jaxvacua.util.orthogonal_lattice#
- orthogonal_lattice(gens_in)#
Returns generators of the integer lattice orthogonal to the lattice spanned by
gens_in.Details
Given \(d\) generators \(g_1,\ldots,g_d \in \mathbb{Z}^n\) with \(d < n\), the function computes generators of the orthogonal complement lattice
\[L^\perp = \bigl\{ v \in \mathbb{Z}^n \;:\; v \cdot g_i = 0 \;\;\forall\, i=1,\ldots,d \bigr\} \,,\]which has rank \(n - d\).
The algorithm constructs the augmented matrix
\[\begin{split}B = \begin{pmatrix} c\,G \\ I_n \end{pmatrix} \in \mathbb{Z}^{(d+n)\times n} \,,\end{split}\]where \(G\) is the \(d\times n\) generator matrix and \(c\) is an integer scale chosen so that LLL reduction on \(B^T\) separates the null-space rows. The last \(n-d\) rows of the LLL-reduced matrix (extracted from the \(I_n\) block) are the desired generators. The LLL computation uses
flint.fmpz_matfor exact integer arithmetic.- Parameters:
gens_in (
List[List[int]]) – List of \(d\) integer generator vectors of length \(n\), with \(d < n\).- Returns:
list – List of \(n-d\) integer generators of \(L^\perp\),
each of length :math:`n`.
- Return type:
List[List[int]]
See also:
extended_euclidean(), and the conifold-specificjaxvacua.conifold.conifold_utils.get_basis_change().