GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
@--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ FILE: autgrp.c @--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ @------------------------------------------------------------------------- @ bravais_TYP *autgrp(Fo, Foanz, SV, Erz, Erzanz, options) @ matrix_TYP **Fo, **Erz, *SV; @ int Foanz, Erzanz, *options; @ @ The functions 'autgrp' calculates generators and the order of the group @ G := {g in GL_n(Z) | g^{tr} * Fo[i] * g = Fo[i], 1<= i<= Foanz} @ returned via a pointer to 'bravais_TYP'. @ @ The arguments of autgrp are: @ matrix_TYP **Fo: a set of n times n matrices, @ the first must be positiv definite @ int Foanz: the number of the matrices given in 'Fo'. @ matrix_TYP **Erz: if already element of G are known, @ they can be used for calculating generators @ for the whole group. @ The matrices of known elements can be given @ to the function by the pointer 'Erz'. @ int Erzanz: The number of matrices given in 'Erz" @ matrix_TYP *SV: The rows of the matrix 'SV' must be the vectors @ x in Z^n with x * F[0] * x^{tr} <= m, where @ m is the maximal diagonal entry of the Matrix @ F[0] @ int *options: see below. @ @ options is a pointer to integer (of length 6) @ The possible options are encoded in the following way: @ options[0]: The depth, up to wich scalar product combinations @ shall be calculated. The value should be small. @ options[0] > 0 should be used only, if the automorphismn @ group is expected to be small (with respect to the number @ of shortest vectors). @ options[1]: The n-point stabiliser with respect to different basis @ will be calculated. @ options[2]: If options[2] = 1, additional output is written to the @ file AUTO.tmp @ options[3]: If options[3] = 1, Bacher polynomials are used. @ If options[3] = 2, Bacher polynomial are used up to a deepth @ specified in options[4]. @ If options[3] = 3, Bacher polynomials are used, using @ combinations of vectors having the scalar @ product specified in options[5] @ options[3] = 4 is the combination of options[3] = 2 and @ options[3] = 3. @ options[4]: A natural number number or zero (if options[3] = 2 or 4) @ options[5]: An integral number (if options[3] = 3 or 4) @ @ It is possible to use NULL for options, @ in this case option is assumed to be [0,0,0,0,0,0] @------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ bravais_TYP *perfect_normal_autgrp(Fo, SV, Erz, Erzanz, options, @ P, Panz, Pbase, Pdim) @ matrix_TYP *Fo, **Erz, *SV, **P, **Pbase; @ int Erzanz, *options, Panz, Pdim; @ @ The function 'perfect_normak_autgrp' calculates generators for @ G = {g in GL_n(Z)| g^{tr} * Fo * g = Fo and @ g^{tr} Pbase[i] g is a matrix in P for 0<=i<Pdim} @ @ The arguments are: @ Fo: a symmetric positive definite n by n-matrix. @ SV: the vectors x in GL_n(Z) (up to sign) with x Fo x^{tr} < k, @ where k is the maximal diagonal entry of 'Fo'. @ Erz: matrices of elements of G (if known). @ Erzanz: the number of matrices in 'Erz'. @ options: the same as for the function 'autgrp'. @ P: a set of matrices @ Panz: the number of matrices given in 'P'. @ Pbase: a set of matrices @ Pdim: the number of matrices given in 'Pbase'. @ @ This function is designed to calculate the stabilizer of a perfect @ form 'Fo' in the normalizer of the group generated by the matrices @ given in 'Erz'. @ Then 'P' is the set of matrices given by the Voronoi-directions of 'Fo' @ and 'Pbase' a maximal linearly independent subset of 'P'. @ @--------------------------------------------------------------------------- @ @--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ FILE: isometry.c @--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ @------------------------------------------------------------------------- @ matrix_TYP *isometry(F1, F2, Fanz, SV1, SV2, Erz, Erzanz, options) @ matrix_TYP **F1, **F2, *SV1, *SV2, **Erz; @ int Fanz, Erzanz, *options; @ @ The function 'isometry' calculates a matrix X such that @ X * F1[i] *X^{tr} = F2[i] for 1<= i<= Foanz @ returned via a pointer to 'matrix_TYP'. @ If no such matrix exists the functions returns NULL @ @ The arguments of isometry are: @ matrix_TYP **F1: a set of n times n matrices, @ the first must be positiv definite @ matrix_TYP **F2: a set of n times n matrices, @ the first must be positiv definite @ int Fanz: the number of the matrices given in 'F1'. @ matrix_TYP *SV1: The rows of the matrix 'SV1' must be the vectors @ x in Z^n with x * F1[0] * x^{tr} <= m, where @ m is the maximal diagonal entry of the Matrix @ F1[0] @ matrix_TYP *SV2: The rows of the matrix 'SV2' must be the vectors @ x in Z^n with x * F2[0] * x^{tr} <= m, where @ m is the maximal diagonal entry of the Matrix @ F.[0] @ int *options: see below. @ matrix_TYP **Erz: if already elements with g^{tr}F1[i]g = F2[i] @ are known, the can be used for calculating @ the isometry. @ The matrices of known elements can be given @ to the function by the pointer 'Erz'. @ int Erzanz: The number of matrices given in 'Erz" @ int *options: see below. @ @ options is a pointer to integer (of length 6) @ The possible options are encoded in the following way: @ options[0]: The depth, up to wich scalar product combinations @ shall be calculated. The value should be small. @ options[0] > 0 should be used only, if the automorphismn @ group is expected to be small (with respect to the number @ of shortest vectors). @ options[1]: The n-point stabiliser with respect to different basis @ will be calculated. @ options[2]: If options[2] = 1, additional output is written to the @ file AUTO.tmp @ options[3]: If options[3] = 1, Bacher polynomials are used. @ If options[3] = 2, Bacher polynomial are used up to a deepth @ specified in options[4]. @ If options[3] = 3, Bacher polynomials are used, using @ combinations of vectors having the scalar @ product specified in options[5] @ options[3] = 4 is the combination of options[3] = 2 and @ options[3] = 3. @ options[4]: A natural number number or zero (if options[3] = 2 or 4) @ options[5]: An integral number (if options[3] = 3 or 4) @ @ It is possible to use NULL for options, @ in this case option is assumed to be [0,0,0,0,0,0] @------------------------------------------------------------------------- @------------------------------------------------------------------------- @ matrix_TYP *perfect_normal_isometry(F1, F2, SV1, SV2, Erz, Erzanz, @ options, P, Panz, Pbase, Pdim) @ matrix_TYP *F1, *F2, *SV1, *SV2, **Erz, **P, **Pbase; @ int Erzanz, *options, Panz, Pdim; @ @ The function 'perfect_normal_isometry' calculates a matrix X with @ X * F1 * X^{tr} = F2 and @ X^{-1} * Pbase[i] * X^{-tr} is a matrix in P for 0<= i< Pdim @ @ @ The arguments are: @ F1: a symmetric positive definite n by n-matrix. @ F2: a symmetric positive definite n by n-matrix. @ SV1: the vectors x in GL_n(Z) (up to sign) with xF1x^{tr} < k, @ where k is the maximal diagonal entry of 'F1'. @ SV2: the vectors x in GL_n(Z) (up to sign) with xF2x^{tr} < k, @ where k is the maximal diagonal entry of 'F1'. @ Erz: matrices of elements of Aut(F2) (if known). @ Erzanz: the number of matrices in 'Erz'. @ options: the same as for the function 'isometry'. @ P: a set of matrices @ Panz: the number of matrices given in 'P'. @ Pbase: a set of matrices @ Pdim: the number of matrices given in 'Pbase'. @ @ This function is designed to calculate an isometry of two @ G-perfect forms that is in the normalizer of a group G (the @ generators of G are the matrices 'Erz'). @ Then 'P' is the set of matrices given by the Voronoi-directions of 'F1' @ and 'Pbase' a maximal linearly independent subset of the @ Voronoi-directions of 'F2'. @ @--------------------------------------------------------------------------- @ @--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ FILE: pr_aut.c @--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ @--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ FILE: pr_isom.c @--------------------------------------------------------------------------- @--------------------------------------------------------------------------- @ @------------------------------------------------------------------------- @ matrix_TYP *pr_isom(F1, F2, Fanz, Erz, Erzanz, options) @ matrix_TYP **F1, **F2, **Erz; @ int Fanz, Erzanz, *options; @ @ The function 'isometry' calculates a matrix X such that @ X * F1[i] *X^{tr} = F2[i] for 1<= i<= Foanz @ returned via a pointer to 'matrix_TYP'. @ If no such matrix exists the functions returns NULL @ 'pr_aut' applies a pair_reduction to F1[0] and then @ uses then the function isometry to calculate an isometry @ for the reduced form @ @ The arguments of isometry are: @ matrix_TYP **F1: a set of n times n matrices, @ the first must be positiv definite @ matrix_TYP **F2: a set of n times n matrices, @ the first must be positiv definite @ int Fanz: the number of the matrices given in 'F1'. @ int *options: see below. @ matrix_TYP **Erz: if already elements with g^{tr}F1[i]g = F2[i] @ are known, the can be used for calculating @ the isometry. @ The matrices of known elements can be given @ to the function by the pointer 'Erz'. @ int Erzanz: The number of matrices given in 'Erz" @ int *options: see below. @ @ options is a pointer to integer (of length 6) @ The possible options are encoded in the following way: @ options[0]: The depth, up to wich scalar product combinations @ shall be calculated. The value should be small. @ options[0] > 0 should be used only, if the automorphismn @ group is expected to be small (with respect to the number @ of shortest vectors). @ options[1]: The n-point stabiliser with respect to different basis @ will be calculated. @ options[2]: If options[2] = 1, additional output is written to the @ file AUTO.tmp @ options[3]: If options[3] = 1, Bacher polynomials are used. @ If options[3] = 2, Bacher polynomial are used up to a deepth @ specified in options[4]. @ If options[3] = 3, Bacher polynomials are used, using @ combinations of vectors having the scalar @ product specified in options[5] @ options[3] = 4 is the combination of options[3] = 2 and @ options[3] = 3. @ options[4]: A natural number number or zero (if options[3] = 2 or 4) @ options[5]: An integral number (if options[3] = 3 or 4) @ @ It is possible to use NULL for options, @ in this case option is assumed to be [0,0,0,0,0,0] @-------------------------------------------------------------------------