Vinberg's algorithm
A Lorentzian lattice $L$ is an integral $\Z$-lattice of signature $(s_+, s_-)$ with $s_+=1$ and $s_->0$. A root of $r \in L$ is a primitive vector s.t. reflection in the hyperplane $r^\perp$ maps $L$ to itself. Let $W(L)\leq O(L)$ be the Weyl group, that is the group generated by reflections in the root hyperplanes of $L$. We say that $L$ is reflective if $W(L)$ is of finite index in $O(L)$. For $x,y \in L$ we write $x.y:=\Phi(x,y)$ and $x^2:=\Phi(x,x)$ for the symmetric bilinear form in $L$.
See for example [Tur18] for the theory of Arithmetic Reflection Groups and Reflective Lorentzian Lattices.
Description
Vinberg's algorithm constructs a fundamental polyhedron $P$ for a Lorentzian lattice $L$ by computing its fundamental roots $r$, i.e. the roots $r$ which are perpendicular to the faces of $P$ and which have inner product at least 0 with the elements of $P$. Choose $v_0$ in $L$ primitive with $v_0^2 > 0$ as a point that $P$ should contain.
Let $Q$ be the Gram matrix of $L$ with respect to some basis. A vector $r$ is a fundamental root, if
- the vector $r$ is primitive,
- reflection by $r$ preserves the lattice, i.e. $\frac{2}{r^2} r Q$ is an integer matrix,
- the pair $(r, v_0)$ is positive oriented, i.e. $r. v_0 > 0$,
- the product $r. \~{r} \geq \ 0$ for all roots $\~{r}$ already found.
This implies that $r^2$ divides $2 i$ for $i$ being the level of $Q$, i.e. the last invariant of the Smith normal form of $Q$.
$P$ can be constructed by solving $r.v_0 = n$ and $r^2 = k$ by increasing order of the value $\frac{n^2}{k}$ and $r$ satisfying the above conditions.
If $v_0$ lies on a root hyperplane, then $P$ is not uniquely determined. In that case we need a direction vector $v_1$ which satisfies $\~{v}. v_1 \neq 0$ for all possible roots $\~{v}$ with $v_0. \~{v} = 0$
With $v_0$ and $v_1$ fixed $P$ is uniquely determined for any choice of root lengths and maximal distance $v_0.r$. We choose the first roots $r$ by increasing order of the value $\frac{\~{r}. v_1}{r^2}$ for all possible roots $\~{v}$ with $v_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_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 $\frac{r.v_0)^2}{r^2}$, stopping at upper_bound
. If root_lengths
is not defined it takes all possible values of $r^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$ matrix of signature $(1, n)$ – the corresponding Gram matrixupper_bound
: the upper bound of the value $\frac{(r.v_0^2}{r^2}$v0
: primitive row vector with $v_0^2 > 0$root_lengths
: the possible integer values of $r^2$direction_vector
: row vectorv1
with $v_0.v_1 = 0$ and $v.v_1 \neq 0$ for all possible rootsv
with $v.v_0 = 0$
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 $\frac{r.v_0)^2}{r^2}$, stopping at upper_bound
. If root_lengths
is not defined it takes all possible values of $r^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$-lattice of signature $(1,0,n)$.upper_bound
: the upper bound of the value $\frac{(r.v_0^2}{r^2}$v0
: primitive row vector with $v_0^2 > 0$ given w.r.t. the ambient spaceroot_lengths
: the possible integer values of $r^2$direction_vector
: row vectorv1
with $v_0.v_1 = 0$ and $v.v_1 \neq 0$ for all possible rootsv
with $v.v_0 = 0$, 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 $r$ 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.