Vinberg's algorithm
A Lorentzian lattice is an integral -lattice of signature with and . A root of is a primitive vector s.t. reflection in the hyperplane maps to itself. Let be the Weyl group, that is the group generated by reflections in the root hyperplanes of . We say that is reflective if is of finite index in . For we write and for the symmetric bilinear form in .
See for example [Tur18] for the theory of Arithmetic Reflection Groups and Reflective Lorentzian Lattices.
Description
Vinberg's algorithm constructs a fundamental polyhedron for a Lorentzian lattice by computing its fundamental roots , i.e. the roots which are perpendicular to the faces of and which have inner product at least 0 with the elements of . Choose in primitive with as a point that should contain.
Let be the Gram matrix of with respect to some basis. A vector is a fundamental root, if
- the vector is primitive,
- reflection by preserves the lattice, i.e. is an integer matrix,
- the pair is positive oriented, i.e. ,
- the product for all roots already found.
This implies that divides for being the level of , i.e. the last invariant of the Smith normal form of .
can be constructed by solving and by increasing order of the value and satisfying the above conditions.
If lies on a root hyperplane, then is not uniquely determined. In that case we need a direction vector which satisfies for all possible roots with
With and fixed is uniquely determined for any choice of root lengths and maximal distance . We choose the first roots by increasing order of the value for all possible roots with . For any other root length we continue as stated above.
For proofs of the statements above and further explanations see [Vin75].
Function
vinberg_algorithm
— Functionvinberg_algorithm(Q::ZZMatrix, upper_bound; v0::ZZMatrix, root_lengths::Vector{ZZRingElem}, direction_vector::ZZMatrix) -> Vector{ZZMatrix}
Return the fundamental roots r
of a given hyperbolic reflection lattice with standard basis represented by its corresponding Gram matrix Q
with squared length contained in root_lengths
and by increasing order of the value , stopping at upper_bound
. If root_lengths
is not defined it takes all possible values of . If v0
lies on a root hyperplane and if there is no given direction_vector
it is a random choice which reflection chamber next to v0
will be computed.
Arguments
Q
: symmetric matrix of signature – the corresponding Gram matrixupper_bound
: the upper bound of the valuev0
: primitive row vector withroot_lengths
: the possible integer values ofdirection_vector
: row vectorv1
with and for all possible rootsv
with
vinberg_algorithm(S::ZZLat, upper_bound; v0::ZZMatrix, root_lengths::Vector{ZZRingElem}, direction_vector::ZZMatrix) -> Vector{ZZMatrix}
Return the fundamental roots r
of a given hyperbolic reflection lattice S
with standard basis with squared length contained in root_lengths
and by increasing order of the value , stopping at upper_bound
. If root_lengths
is not defined it takes all possible values of . If v0
lies on a root hyperplane and if there is no given direction_vector
, then it is a random choice which reflection chamber next to v0
will be computed.
Arguments
S
: a hyperbolic -lattice of signature .upper_bound
: the upper bound of the valuev0
: primitive row vector with given w.r.t. the ambient spaceroot_lengths
: the possible integer values ofdirection_vector
: row vectorv1
with and for all possible rootsv
with , given w.r.t. the ambient spacedivisibilities
: a dictionary; The keys are the root lengths and the values are the divisibilities for the given root length. If given requires that a fundamental root has one of the specified divisibilities.
Contact
Please direct questions about this part of OSCAR to the following people:
You can ask questions in the OSCAR Slack.
Alternatively, you can raise an issue on github.