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]
@-------------------------------------------------------------------------