Collections of isometries

In this section, we review methods related to collections of isometries for rational quadratic spaces and integer lattices.

Change of basis representation

Given an integer lattice $L$ and a collection $F$ of isometries of $L$, there are two ways of representing the isometries in $F$ by mean of matrices. The first way is to represent the isometries in $F$ in the standard basis of the ambient quadratic space of $L$. The second way is to represent such isometries in the given fixed basis of $L$.

Given one representation of $F$, by mean of matrices, the following two methods allow to switch to another one.

extend_to_ambient_spaceFunction
extend_to_ambient_space(
  L::ZZLat,
  F::T;
  check::Bool=false,
) where T <: Union{QQMatrix, Vector{QQMatrix}, MatrixGroup} -> T

Given $F$ being either:

  • a matrix with rational entries;
  • a list of matrices with rational entries;
  • a matrix group over the rationals,

defining a collection of isometries of $L$, represented in the fixed basis of $L$, return the same collection but represented in the standard basis of the ambient space of $L$.

If $L$ is not of full rank in its ambient quadratic space $V$, each isometry is extended to be the identity on the quadratic space orthogonal to $L\otimes\mathbb{Q}$ inside $V$.

Arguments

  • If check is set to true, the function checks whether $F$ indeed defines a collection of isometries of $L$.
source
restrict_to_latticeFunction
restrict_to_lattice(
  L::ZZLat,
  F::T;
  check::Bool=false,
) where T <: Union{QQMatrix, Vector{QQMatrix}, MatrixGroup} -> T

Given $F$ being either:

  • a matrix with rational entries;
  • a list of matrices with rational entries;
  • a matrix group over the rationals,

defining a collection of isometries of the ambient space $V$ of $L$ preserving $L$, represented in the standard basis of $V$, return the associated collection of isometries of $L$, represented in the fixed basis of $L$, obtained by restricting all the isometries in $F$ to $L$.

Arguments

  • If check is set to true, the function checks whether $F$ indeed defines a collection of isometries of the ambient space of $L$ which preserve $L$.
source

Note that the second function can actually be used to restrict any collection of isometries of the ambient space of $L$ preserving $L$.

Invariant and coinvariant lattices

We provide the possibility to compute invariant and coinvariant sublattices given an orthogonal representation G in matrix form of a collection of isometries of a given lattice L:

coinvariant_latticeMethod
coinvariant_lattice(
  L::ZZLat,
  G::MatrixGroup;
  ambient_representation::Bool=true,
  check::Bool=true,
) -> ZZLat, MatrixGroup

Given an integer lattice $L$ and a group $G$ of isometries of $L$, return the coinvariant sublattice $L_G$ of $L$, together with the subgroup $H$ of isometries of $L_G$ induced by the action of $G$.

If ambient_representation is set to true, the isometries in $G$ and $H$ are considered as matrix representation of their action on the standard basis of the ambient space of $L$. Otherwise, they are considered as matrix representation of their action on the basis matrices of $L$ and $L_G$ respectively.

If check is set to true, the functions tests whether the group $G$ consists of isometries of the lattice $L$.

Examples

julia> L = root_lattice(:A, 2);

julia> G = isometry_group(L);

julia> L2, G2 = coinvariant_lattice(L, G)
(Integer lattice of rank 2 and degree 2, Matrix group of degree 2 over QQ)

julia> L == L2
true

julia> G == G2
true
source
invariant_latticeMethod
invariant_lattice(
  L::ZZLat,
  G::MatrixGroup;
  ambient_representation::Bool=true,
  check::Bool=true,
) -> ZZLat

Given an integer lattice $L$ and a group $G$ of isometries of $L$ in matrix, return the invariant sublattice $L^G$ of $L$.

If ambient_representation is set to true, the isometries in $G$ are considered as matrix representation of their action on the standard basis of the ambient space of $L$. Otherwise, they are considered as matrix representation of their action on the basis matrix of $L$.

If check is set to true, the functions tests whether the group $G$ consists of isometries of the lattice $L$.

Examples

julia> L = root_lattice(:A, 2);

julia> G = isometry_group(L);

julia> invariant_lattice(L, G)
Integer lattice of rank 0 and degree 2
with gram matrix
0 by 0 empty matrix
source
invariant_coinvariant_pairMethod
invariant_coinvariant_pair(
  L::ZZLat,
  F::T;
  ambient_representation::Bool=true,
  check::Bool=true,
  ) where T <: Union{QQMatrix, Vector{QQMatrix}, MatrixGroup} -> ZZLat, ZZLat, T

Given $F$ being either:

  • a matrix with rational entries;
  • a list of matrices with rational entries;
  • a matrix group over the rationals,

representing a collection of isometries of the lattice $L$, return the invariant sublattice $L^F$ of $L$ and its coinvariant sublattice $L_F$ together with the collection $F'$ of isometries of $L_F$ induced by $F$.

If ambient_representation is set to true, the isometries in $F$ and $F'$ are considered as matrix representation of their action on the standard basis of the ambient space of $L$. Otherwise, they are considered as matrix representation of their action on the basis matrices of $L$ and $L_F$ respectively.

If check is set to true, the function tests whether the matrices in $F$ define isometries of the lattice $L$.

Examples

julia> L = root_lattice(:A, 2);

julia> G = isometry_group(L);

julia> F, C, _ = invariant_coinvariant_pair(L, matrix(last(gens(G))))
(Integer lattice of rank 1 and degree 2, Integer lattice of rank 1 and degree 2, [1 0; -1 -1])

julia> F
Integer lattice of rank 1 and degree 2
with gram matrix
[2]

julia> C
Integer lattice of rank 1 and degree 2
with gram matrix
[6]
source

Special isometries

Given an integer lattice $L$, any isometry $f$ of $L$ has determinant equal to $\pm 1$. We define the specialorthogonalgroup $SO(L)$ of $L$ to be the normal subgroup of $O(L)$ consisting of isometries of determinant $+1$.

special_orthogonal_groupMethod
special_orthogonal_group(
  L::ZZLat;
  kwargs...,
) -> MatrixGroup, GAPGroupHomomorphism

Given an integer lattice $L$ which is definite or of rank 2, return the subgroup $SO(L)$ of the orthogonal group of $L$ consisting of isometries with determinant $1$.

The function first computes the orthogonal group of $L$: the extra keyword arguments in kwargs are optional arguments in the computations of such a group (see isometry_group(::ZZLat)).

Examples

julia> D5 = root_lattice(:D, 5);

julia> H, _ = special_orthogonal_group(D5);

julia> order(H)
1920
source

Similarly, given any finite group $G$ of isometries of $L$, one can compute the special subgroup $G\cap SO(L)$ of $G$.

special_subgroupMethod
special_subgroup(
  L::ZZLat,
  G::MatrixGroup;
  ambient_representation::Bool=true,
  check::Bool=true
) -> MatrixGroup, GAPGroupHomomorphism

Given an integer lattice $L$ and a group $G$ of isometries of $L$, return the normal subgroup $S$ of $G$ consisting of isometries with determinant $+1$, together with embedding $S \to G$.

If ambient_representation is set to true, then the isometries in $G$ are considered as matrix representation of their action on the standard basis of the ambient space of $L$. Otherwise, they are considered as matrix representation of their action on the basis matrix of $L$.

Examples

julia> A4 = root_lattice(:A, 4);

julia> OA4 = isometry_group(A4);

julia> H, _ = special_subgroup(A4, OA4)
(Matrix group of degree 4 over QQ, Hom: H -> OA4)

julia> index(OA4, H)
2
source

Stable isometries

Given an integral integer lattice $L$, any isometry $f$ of $L$ acts on the discriminant group $D_L$ of $L$. We define the stableorthogonalgroup $O^\#(L)$ of $L$ to be the normal subgroup of $O(L)$ consisting of isometries acting trivially on $D_L$.

stable_orthogonal_groupMethod
stable_orthogonal_group(
  L::ZZLat;
  kwargs...,
) -> MatrixGroup, GAPGroupHomomorphism

Given an integer lattice $L$ which is definite or of rank 2, return the subgroup $O^\#(L)$ of the orthogonal group of $L$ consisting of isometries acting trivially on the discriminant group of $L$.

The function first computes the orthogonal group of $L$: the extra keyword arguments in kwargs are optional arguments in the computations of such a group (see isometry_group(::ZZLat)).

Examples

julia> A5 = root_lattice(:A, 5);

julia> H, _ = stable_orthogonal_group(A5);

julia> order(H)
720
source

Similarly, given any finite group $G$ of isometries of $L$, one can compute the stable subgroup $G\cap O^\#(L)$ of $G$.

stable_subgroupMethod
stable_subgroup(
  L::ZZLat,
  G::MatrixGroup;
  ambient_representation::Bool=true,
  check::Bool=true,
) -> MatrixGroup, GAPGroupHomomorphism

Given an integer lattice $L$ and a group $G$ of isometries of $L$, return the kernel $G^\#$ of the orthogonal representation $G\to O(D_L)$ of $G$ on the discriminant group $D_L$ of $L$, together with embedding $G^\# \to G$.

If ambient_representation is set to true, then the isometries in $G$ are considered as matrix representation of their action on the standard basis of the ambient space of $L$. Otherwise, they are considered as matrix representation of their action on the basis matrix of $L$.

See discriminant_representation.

Examples

julia> A4 = root_lattice(:A,4);

julia> OA4 = isometry_group(A4);

julia> H, _ = stable_subgroup(A4, OA4)
(Matrix group of degree 4 over QQ, Hom: H -> OA4)

julia> index(OA4, H)
2
source

Stabilizers

stabilizer_discriminant_subgroupFunction
stabilizer_discriminant_subgroup(
  L::ZZLat,
  G::MatrixGroup,
  H::TorQuadModule;
  pointwise::Bool=false,
  ambient_representation::Bool=true,
  check::Bool=true,

) -> MatrixGroup, GAPGroupHomomorphism

Given an integral lattice $L$, a group $G$ of isometries of $L$ and a submodule $H$ of the discriminant group $D_L$ of $L$, return the largest subgroup of $G$ preserving $H$ under its action on $D_L$. This is also the largest subgroup of $G$ acting on the overlattice lattice of $L$ determined by $H$.

Arguments

  • If pointwise is set to true, return the largest subgroup of $G$ fixing $H$ pointwise;

  • If ambient_representation is set to true, the group $G$ is considered as a group of $\mathbb{Q}$-linear automorphisms on the ambient space of $L$.

  • If check is set to true, the functions tests whether $G$ defines a group of isometries of $L$ and whether $H$ is a submodule of $D_L$.

source
stabilizer_in_diagonal_actionFunction
stabilizer_in_diagonal_action(
  L::ZZLat,
  K::ZZLat,
  N::ZZLat,
  OK::MatrixGroup,
  ON::MatrixGroup;
  check::Bool=true,
) -> Vector{QQMatrix}

Given a primitive extension $K\oplus N \subseteq L$ of even lattices, and given two groups of isometries $OK$ and $ON$ of $K$ and $N$, respectively, return generators for the setwise stabilizer of $L$ in $OK\times ON$, seen as a group of isometries of the ambient space of $L$.

Arguments

  • If check is set to true, the function tests whether $L$ is even, $K$ and $N$ are orthogonal and both primitive in $L$, and $K\oplus N$ and $L$ are rationally equal.
source
maximal_extensionMethod
maximal_extension(
  L::ZZLat,
  S::ZZLat,
  OS::MatrixGroup;
  check::Bool=true,
  kwargs...,
) -> MatrixGroup

Given a primitive sublattice $S$ of an even lattice $L$ whose orthogonal complement $K$ is definite or of rank 2, and given a group $OS$ of isometries $S$, return the largest group $P$ of isometries of $L$ preserving $S$ and whose restriction to $S$ is contained in $OS$.

By definition, $P$ is the setwise stabilizer of $L$ in $O(K)\times OS$ where $O(K)$ is the full orthogonal group of $K$.

Arguments

  • If check is set to true, the function tests whether $L$ is even, $S$ is primitive in $L$ and $K$ is definite or of rank 2.

  • The keyword arguments in kwargs are optional arguments for the computation of $O(K)$; see isometry_group(::ZZLat).

source
stabilizer_in_orthogonal_groupFunction
stabilizer_in_orthogonal_group(
  L::ZZLat,
  B::QQMatrix;
  stable::Bool=false,
  special::Bool=false,
  check::Bool=true,
  kwargs...,
) -> MatrixGroup

Given $B$ a matrix with rational entries whose set of rows represent a finite collection $F$ of vectors in the rational span $L\otimes \mathbb{Q}$ of the even lattice $L$, return the subgroup

\[S_F := \{ f \in O(L) | \forall v\in F : f(v) = v\} \subseteq O(L)\]

defining the joint stabilizers, in the orthogonal group of $L$, of the vectors in $F$.

The implementation requires that the largest saturated submodule $K$ of $L$ orthogonal to $B$ is definite or of rank 2.

Arguments

  • If stable is set to true, return the intersection of $S_F$ with the stable orthogonal group $O^\#(L)$ of $L$.

  • If special is set to true, return the intersection of $S_F$ with the special orthogonal group $SO(L)$ of $L$.

  • If both of the previous are true, then return the intersection $S_F\cap O^\#(L)\cap SO(L)$.

  • If check is set to true, the function tests whether the lattice $L$ is even, the matrix $B$ defines a set of vectors in $L\otimes \mathbb{Q}$ and whether the lattice $K$ is definite or of rank 2.

  • The function first computes the orthogonal group of $K$: the extra keyword arguments in kwargs are optional arguments in the computations of such a group (see isometry_group(::ZZLat)).

Examples

julia> A2 = root_lattice(:A, 2)
Integer lattice of rank 2 and degree 2
with gram matrix
[ 2   -1]
[-1    2]

julia> v = QQ[1 1;]
[1   1]

julia> H = stabilizer_in_orthogonal_group(A2, v)
Matrix group of degree 2
  over rational field

julia> order(H)
2
source
pointwise_stabilizer_in_orthogonal_groupFunction
pointwise_stabilizer_in_orthogonal_group(
  L::ZZLat,
  S::ZZLat;
  kwargs...,
) -> MatrixGroup

Given a sublattice $S$ of an even lattice $L$, return the subgroup

\[\{ f \in O(L) | \forall v\in S : f(v) = v\} \subseteq O(L)\]

defining the pointwise stabilizer, in the orthogonal group of $L$, of the sublattice $S$ of $L$.

Arguments

Examples

julia> A4 = root_lattice(:A, 4)
Integer lattice of rank 4 and degree 4
with gram matrix
[ 2   -1    0    0]
[-1    2   -1    0]
[ 0   -1    2   -1]
[ 0    0   -1    2]

julia> A2 = lattice_in_same_ambient_space(A4, QQ[1 0 0 0; 0 1 0 0])
Integer lattice of rank 2 and degree 4
with gram matrix
[ 2   -1]
[-1    2]

julia> H = pointwise_stabilizer_in_orthogonal_group(A4, A2)
Matrix group of degree 4
  over rational field

julia> order(H)
2
source
setwise_stabilizer_in_orthogonal_groupFunction
setwise_stabilizer_in_orthogonal_group(
  L::ZZLat,
  S::Union{QQMatrix, ZZLat};
  stable::Bool=false,
  special::Bool=false,
  check::Bool=true,
  kwargs...,
) -> MatrixGroup

Given a sublattice $S$ of an even lattice $L$, or a generating set of vectors given as rows in a matrix with rational entries, return the subgroup

\[\{ f \in O(L) | f(S) \subseteq S\} \subseteq O(L)\]

defining the setwise stabilizer, in the orthogonal group of $L$, of the sublattice $S$.

Arguments

  • The function requires that $S$ and its orthogonal complement $T$ in $L$ are both definite or of rank 2. However $S$ need not be primitive in $L$.

  • If check is set to true, the function tests whether $L$ is even, whether $S$ is a sublattice of $L$, and whether $S$ and $T$ are definite or of rank 2.

  • For the other keyword arguments, see stabilizer_in_orthogonal_group(::ZZLat, ::QQMatrix).

Examples

julia> A2 = root_lattice(:A, 2)
Integer lattice of rank 2 and degree 2
with gram matrix
[ 2   -1]
[-1    2]

julia> L = lattice_in_same_ambient_space(A2, QQ[1 1; 1 -1])
Integer lattice of rank 2 and degree 2
with gram matrix
[2   0]
[0   6]

julia> H1 = setwise_stabilizer_in_orthogonal_group(A2, L)
Matrix group of degree 2
  over rational field

julia> describe(H1)
"C2 x C2"

julia> H2 = setwise_stabilizer_in_orthogonal_group(A2, L; stable=true, special=true)
Matrix group of degree 2
  over rational field

julia> order(H2)
1
source
pointwise_stabilizer_orthogonal_complement_in_orthogonal_groupFunction
pointwise_stabilizer_orthogonal_complement_in_orthogonal_group(
  L::ZZLat,
  S::Union{QQMatrix, ZZLat};
  check::Bool=true,
  kwargs...,
) -> MatrixGroup

Given a sublattice $S$ of an even lattice $L$, or a generating set of vectors given as rows in a matrix with rational entries, return the pointwise stabilizer, in the orthogonal group of $L$, of the orthogonal complement of $S$ in $L$.

Arguments

  • The function requires that $S$ is definite or of rank 2. However $S$ need not be primitive in $L$.

  • If check is set to true, the function tests whether $L$ is even, whether $S$ is a sublattice of $L$, and whether $S$ is definite or of rank 2.

  • For the other keyword arguments, see stabilizer_in_orthogonal_group(::ZZLat, ::QQMatrix).

Examples

julia> A2 = root_lattice(:A, 2)
Integer lattice of rank 2 and degree 2
with gram matrix
[ 2   -1]
[-1    2]

julia> v = QQ[1 1;]
[1   1]

julia> H1 = pointwise_stabilizer_orthogonal_complement_in_orthogonal_group(A2, v)
Matrix group of degree 2
  over rational field

julia> H2 = pointwise_stabilizer_orthogonal_complement_in_orthogonal_group(A2, v; special=true)
Matrix group of degree 2
  over rational field

julia> index(H1, H2)
2
source

Saturation

Given an integer lattice $L$ and two groups of isometries $H \leq G$ of $L$, we define the saturation of $H$ in $G$ to be the kernel of group homomorphism

\[G(L^H) \to O(L^H)\]

where $G(L^H)$ denotes the stabilizer of the invariant sublattice $L^H$ in $G$. In other words, the saturation of $H$ in $G$ is the pointwise stabilizer of $L^H$ in $G$. In the case where the group $G$ is finite, one can actually explictly compute such a group:

saturationMethod
saturation(
  L::ZZLat,
  G::MatrixGroup,
  H::MatrixGroup;
  ambient_representation::Bool=true,
  check::Bool=true,
  kwargs...,
) -> MatrixGroup

Given an even lattice $L$ and two finite group of isometries $H \leq G$ of $L$ such that the coinvariant sublattice $S$ of $H$ is definite, return the saturation of $H$ in the group $G$, that is the pointwize stabilizer in $G$ of its invariant sublattice associated to $H$.

See saturation(::ZZLat, ::MatrixGroup).

Arguments

  • If ambient_representation is set to true, the groups $G$ and $H$ are considered as a group of $\mathbb{Q}$-linear automorphisms on the ambient space of $L$.

  • If check is set to true, the function tests whether $G$ is a finite group of isometries of $L$, whether $H$ is contained in $G$ and whether the associated coinvariant sublattice $S$ is definite.

  • The keyword arguments in kwargs are optional arguments for the computation of isometry group of lattices (see isometry_group(::ZZLat)).

source

In general, if the coinvariant sublattice $L_H$ of the group $H$ is definite or of rank 2, one can compute the saturation of $H$ inside the orthogonal group $O(L)$ of $L$.

saturationMethod
saturation(
  L::ZZLat,
  G::MatrixGroup;
  ambient_representation::Bool=true,
  check::Bool=true,
  special::Bool=false,
  stable::Bool=false,
  kwargs...,
) -> MatrixGroup

Given an even lattice $L$ and a group of isometries $G$ of $L$ whose associated coinvariant sublattice $S$ is definite or of rank 2, return the saturation of $G$ in the orthogonal group $O(L)$ of $L$, that is the pointwize stabilizer in $O(L)$ of its invariant sublattice.

See pointwise_stabilizer_in_orthogonal_group.

Arguments

  • If ambient_representation is set to true, the group $G$ is considered as a group of $\mathbb{Q}$-linear automorphisms on the ambient space of $L$.

  • If check is set to true, the function tests whether $G$ defines a group of isometries of the lattice $L$ and whether the associated coinvariant sublattice $S$ is definite or of rank 2.

  • If special is set to true, the function returns the saturation of $G$ in the special orthogonal group $SO(L)$ of $L$. Note that this requires $G$ to consist also of special isometries. If check is set to true, the function tests in addition whether all isometries in $G$ have determinant

  • If stable is set to true, the function returns the saturation of $G$ in the stable orthogonal group $O^\#(L)$ of $L$. Note that this requires $G$ to consist also of stable isometries. If check is set to true, the function tests in addition whether all isometries in $G$ act trivially on the discriminant group of $L$.

  • The keyword arguments in kwargs are optional arguments for the computation of isometry group of lattices (see isometry_group(::ZZLat)).

source

Finally, whenever the coinvariant lattice $L_H$ of $H$ is definite, it is possible to decide whether $H$ is saturated in the given groups as above.

is_saturated_with_saturationFunction
is_saturated_with_saturation(
  L::ZZLat,
  [G::MatrixGroup],
  H::MatrixGroup;
  kwargs...,
) -> Bool, MatrixGroup

Given a lattice $L$ and a group of isometries $H$ of $L$ with definite coinvariant sublattice$S$ , return whether the group $H$ is saturated in the orthogonal group $O(L)$ of $L$, meaning $H$ is the pointwize stabilizer in $O(L)$ of its invariant sublattice. The second returned output is the saturation of $H$ in $O(L)$.

Alternatively, one can ask whether $H$ is saturated in a given finite group $G$ of isometries of $L$ containing $H$.

Arguments

source

Isometry checks

Given a rational quadratic space or an integer lattice, one can ask whether a collection of matrices with rational entries consists of isometries of the given object. The following six functions are not exported, they can be used for input checks in one's functions.

is_isometryMethod
is_isometry(
  Q::QuadSpace,
  f::QQMatrix;
  is_special::Bool=false,
) -> Bool

Return whether $f$ defines an isometry of the quadratic space $Q$.

Arguments

  • If is_special is set to true, return whether in addition $f$ has determinant 1.
source
is_isometryMethod
is_isometry(
  L::ZZLat,
  f::QQMatrix,
  ambient_representation::Bool = false;
  is_special::Bool=false,
  is_stable::Bool=false,
) -> Bool

Return whether $f$ defines an isometry of the lattice $L$.

Arguments

  • If is_special is set to true, return whether in addition $f$ has determinant 1.

  • If is_stable is set to true, return whether in addition $f$ acts trivially on the discriminant group of $L$ (note: this requires $L$ being integral).

  • If ambient_representation is set to true, $f$ is considered as a $\mathbb{Q}$-linear map on the ambient space of $L$.

source
is_isometry_listMethod
is_isometry_list(
  Q::QuadSpace,
  V::Vector{QQMatrix};
  is_special::Bool=false,
) -> Bool

Return whether the matrices in $V$ define isometries of the quadratic space $Q$.

Arguments

  • If is_special is set to true, return whether in addition all isometries in $V$ have determinant 1.
source
is_isometry_listMethod
is_isometry_list(
  L::ZZLat,
  V::Vector{QQMatrix},
  ambient_representation::Bool = false;
  is_special::Bool=false,
  is_stable::Bool = false,
) -> Bool

Return whether the matrices in $V$ define isometries of the lattice $L$.

Arguments

  • For the optional arguments, see [is_isometry(::ZZLat, ::QQMatrix)].
source
is_isometry_groupMethod
is_isometry_group(
  Q::QuadSpace
  G::MatrixGroup;
  is_special::Bool=false,
) -> Bool

Return whether the matrix $G$ defines a group of isometries of the quadratic space $Q$.

Arguments

  • If is_special is set to true, return whether in addition all isometries in $G$ have determinant 1.
source
is_isometry_groupMethod
is_isometry_group(
  L::ZZLat,
  G::MatrixGroup,
  ambient_representation::Bool = false;
  is_special::Bool=false,
  is_stable::Bool=false,
) -> Bool

Return whether the matrix $G$ defines a group of isometries of the lattice $L$.

Arguments

  • For the optional arguments, see [is_isometry(::ZZLat, ::QQMatrix)].
source

Given an integer lattice with isometry $(L, f)$, one can also ask whether the isometry $f$ satisfies some properties.

is_stable_isometryMethod
is_stable_isometry(Lf::ZZLatWithIsom) -> Bool

Given an integral $\mathbb{Z}$-lattice with isometry $(L, f)$, return whether the isometry $f$ acts trivially on the discriminant group of $L$.

Examples

julia> A2 = root_lattice(:A, 2);

julia> f = matrix(QQ, 2, 2, [0 -1; 1 1]);

julia> Lf = integer_lattice_with_isometry(A2, f);

julia> is_stable_isometry(Lf)
false
source
is_special_isometryMethod
is_special_isometry(Lf::ZZLatWithIsom) -> Bool

Given a $\mathbb{Z}$-lattice with isometry $(L, f)$, return whether the isometry $f$ has determinant $+1$.

Examples

julia> A2 = root_lattice(:A, 2);

julia> f = matrix(QQ, 2, 2, [0 -1; 1 1]);

julia> Lf = integer_lattice_with_isometry(A2, f);

julia> is_special_isometry(Lf)
true
source