Vinberg's algorithm

A Lorentzian lattice LL is an integral Z\Z-lattice of signature (s+,s)(s_+, s_-) with s+=1s_+=1 and s>0s_->0. A root of rLr \in L is a primitive vector s.t. reflection in the hyperplane rr^\perp maps LL to itself. Let W(L)O(L)W(L)\leq O(L) be the Weyl group, that is the group generated by reflections in the root hyperplanes of LL. We say that LL is reflective if W(L)W(L) is of finite index in O(L)O(L). For x,yLx,y \in L we write x.y:=Φ(x,y)x.y:=\Phi(x,y) and x2:=Φ(x,x)x^2:=\Phi(x,x) for the symmetric bilinear form in LL.

See for example [Tur18] for the theory of Arithmetic Reflection Groups and Reflective Lorentzian Lattices.

Description

Vinberg's algorithm constructs a fundamental polyhedron PP for a Lorentzian lattice LL by computing its fundamental roots rr, i.e. the roots rr which are perpendicular to the faces of PP and which have inner product at least 0 with the elements of PP. Choose v0v_0 in LL primitive with v02>0v_0^2 > 0 as a point that PP should contain.

Let QQ be the Gram matrix of LL with respect to some basis. A vector rr is a fundamental root, if

  • the vector rr is primitive,
  • reflection by rr preserves the lattice, i.e. 2r2rQ\frac{2}{r^2} r Q is an integer matrix,
  • the pair (r,v0)(r, v_0) is positive oriented, i.e. r.v0>0r. v_0 > 0,
  • the product r.r˜ 0r. \~{r} \geq \ 0 for all roots r˜\~{r} already found.

This implies that r2r^2 divides 2i2 i for ii being the level of QQ, i.e. the last invariant of the Smith normal form of QQ.

PP can be constructed by solving r.v0=nr.v_0 = n and r2=kr^2 = k by increasing order of the value n2k\frac{n^2}{k} and rr satisfying the above conditions.

If v0v_0 lies on a root hyperplane, then PP is not uniquely determined. In that case we need a direction vector v1v_1 which satisfies v˜.v10\~{v}. v_1 \neq 0 for all possible roots v˜\~{v} with v0.v˜=0v_0. \~{v} = 0

With v0v_0 and v1v_1 fixed PP is uniquely determined for any choice of root lengths and maximal distance v0.rv_0.r. We choose the first roots rr by increasing order of the value r˜.v1r2\frac{\~{r}. v_1}{r^2} for all possible roots v˜\~{v} with v0.v˜=0v_0. \~{v} = 0. For any other root length we continue as stated above.

For proofs of the statements above and further explanations see [Vin75].

Function

vinberg_algorithmFunction
vinberg_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 r.v0)2r2\frac{r.v_0)^2}{r^2}, stopping at upper_bound. If root_lengths is not defined it takes all possible values of r2r^2. 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 Z\Z matrix of signature (1,n)(1, n) – the corresponding Gram matrix
  • upper_bound: the upper bound of the value (r.v02r2\frac{(r.v_0^2}{r^2}
  • v0: primitive row vector with v02>0v_0^2 > 0
  • root_lengths: the possible integer values of r2r^2
  • direction_vector: row vector v1 with v0.v1=0v_0.v_1 = 0 and v.v10v.v_1 \neq 0 for all possible roots v with v.v0=0v.v_0 = 0
source
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 r.v0)2r2\frac{r.v_0)^2}{r^2}, stopping at upper_bound. If root_lengths is not defined it takes all possible values of r2r^2. 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 Z\Z-lattice of signature (1,0,n)(1,0,n).
  • upper_bound: the upper bound of the value (r.v02r2\frac{(r.v_0^2}{r^2}
  • v0: primitive row vector with v02>0v_0^2 > 0 given w.r.t. the ambient space
  • root_lengths: the possible integer values of r2r^2
  • direction_vector: row vector v1 with v0.v1=0v_0.v_1 = 0 and v.v10v.v_1 \neq 0 for all possible roots v with v.v0=0v.v_0 = 0, given w.r.t. the ambient space
  • divisibilities: 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 rr has one of the specified divisibilities.
source

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.

This documentation is not for the latest stable release, but for either the development version or an older release.
Click here to go to the documentation for the latest stable release.