Torsion quadratic modules with isometry
We call torsion quadratic module with isometry any pair $(T, f)$ consisting of a torsion quadratic module $T$, of type TorQuadModule, together with an isometry $f\in O(T)$, of type TorQuadModuleMap. We refer to the section about Torsion Quadratic Modules of the manual for new users.
TorQuadModuleWithIsom — Type
TorQuadModuleWithIsomA type for pairs $(T, f)$ consisting of a torsion quadratic module $T$ of type TorQuadModule and an isometry $f$ given as a TorQuadModuleMap.
To construct an object of type TorQuadModuleWithIsom, see the set of functions called torsion_quadratic_module_with_isometry
Examples
julia> Tf = torsion_quadratic_module_with_isometry(QQ[-1//60;], ZZ[11;])
Finite quadratic module of order 60
with 1 generator
with isometry given by
[11]
julia> E6 = root_lattice(:E, 6)
Integer lattice of rank 6 and degree 6
with gram matrix
[ 2 -1 0 0 0 0]
[-1 2 -1 0 0 0]
[ 0 -1 2 -1 0 -1]
[ 0 0 -1 2 -1 0]
[ 0 0 0 -1 2 0]
[ 0 0 -1 0 0 2]
julia> q = discriminant_group(E6)
Finite quadratic module
over integer ring
Abelian group: Z/3
Bilinear value module: Q/Z
Quadratic value module: Q/2Z
Gram matrix quadratic form:
[4//3]
julia> torsion_quadratic_module_with_isometry(q)
Finite quadratic module of order 3
with 1 generator
with isometry given by
[1]Given a torsion quadratic module with isometry $(T, f)$, we provide the following accessors:
underlying_module — Method
underlying_module(Tf::TorQuadModuleWithIsom) -> TorQuadModuleGiven a torsion quadratic module with isometry $(T, f)$, return $T$.
Examples
julia> Tf = torsion_quadratic_module_with_isometry(QQ[-1//60;], ZZ[11;])
Finite quadratic module of order 60
with 1 generator
with isometry given by
[11]
julia> underlying_module(Tf)
Finite quadratic module
over integer ring
Abelian group: Z/60
Bilinear value module: Q/Z
Quadratic value module: Q/2Z
Gram matrix quadratic form:
[119//60]torsion_quadratic_module — Method
torsion_quadratic_module(Tf::TorQuadModuleWithIsom) -> TorQuadModuleAlias for underlying_module(::TorQuadModuleWithIsom).
isometry — Method
isometry(Tf::TorQuadModuleWithIsom) -> TorQuadModuleMapGiven a torsion quadratic module with isometry $(T, f)$, return $f$.
Examples
julia> Tf = torsion_quadratic_module_with_isometry(QQ[-1//60;], ZZ[11;])
Finite quadratic module of order 60
with 1 generator
with isometry given by
[11]
julia> isometry(Tf)
Map
from finite quadratic module: Z/60 -> Q/2Z
to finite quadratic module: Z/60 -> Q/2ZNote that the isometry $f$ is of finite order, but this order is not computed by default. One can use the following function, which stores this order of $f$ after being computed once:
order_of_isometry — Method
order_of_isometry(Tf::TorQuadModuleWithIsom) -> IntGiven a torsion quadratic module with isometry $(T, f)$, return the order of the isometry $f$.
Examples
julia> Tf = torsion_quadratic_module_with_isometry(QQ[-1//60;], ZZ[11;])
Finite quadratic module of order 60
with 1 generator
with isometry given by
[11]
julia> order_of_isometry(Tf)
2Constructors
There are two standard ways to describe a torsion quadratic module:
- As a quotient $L/S$ where $L$ is $\mathbb{Z}$-lattice and $S\subseteq L$ is a finite index sublattice;
- As an finite abelian group $A$ equipped with a torsion quadratic/bilinear form $q$.
These different viewpoints bring different ways to construct objects of types TorQuadModuleWithIsom, especially when it comes to describing the associated isometry. We provide the following constructors:
torsion_quadratic_module_with_isometry — Method
torsion_quadratic_module_with_isometry(
T::TorQuadModule,
[f::U];
check::Bool=true,
) -> TorQuadModuleWithIsomGiven a torsion quadratic module $T$ and given $f$ being either:
- an isometry of $T$ (
U <: AutomorphismGroupElem{TorQuadModule}), - an abelian group endomorphism of $T$ (
U <: Union{TorQuadModuleMap, FinGenAbGroupHom, ZZMatrix}), - or an isometry of the cover $L$ of $T$ (
U <: MatrixGroupElem{QQFieldElem, QQMatrix})
return the associated torsion quadratic module with isometry $(T, f')$, where $f' <: TorQuadModuleMap$ is the isometry of $T$ defined by $f$.
If $f$ is not supplied, it is set to be the identity map of $T$ by default.
If check is set to true, the function checks whether $f$ indeed defines an isometry of $T$.
torsion_quadratic_module_with_isometry — Method
torsion_quadratic_module_with_isometry(
q::QQMatrix,
[f::ZZMatrix];
check::Bool=true,
) -> TorQuadModuleWithIsomGiven a symmetric matrix $q$ with rational entries and a matrix $f$ with integer entries, return the pair $(T, f')$ where:
- $T$ is a torsion quadratic module with Gram matrix $T$, for the associated finite quadratic form;
- $f'$ is the isometry of $T$ defined by $f$.
If $f$ is not supplied, then it is set to be the identity matrix by default.
If check is set to true, the function tests whether $f$ defines an isometry of $T$.
Given a fixed torsion quadratic module with isometry $(T, f)$, there isanother way to construct objects of type TorQuadModuleWithIsom as $f$-stable submodules of $T$.
sub — Method
sub(
Tf::TorQuadModuleWithIsom,
gene::Vector{TorQuadModuleElem},
) -> TorQuadModuleWithIsom, TorQuadModuleMapGiven a torsion quadratic module with isometry $(T, f)$ and a list gene of elements of $T$, return the pair $(S, g)$ where $S$ is the submodule of $T$ generated by gene and $g$ is the restriction of $f$ to $S$. The second output is the embedding of $S$ in $T$.
An error is thrown is $S$ is not preserved by $f$.
primary_part — Method
primary_part(
Tf::TorQuadModuleWithIsom,
m::IntegerUnion,
) -> TorQuadModuleWithIsom, TorQuadModuleMapGiven a torsion quadratic module with isometry $(T, f)$, return the $m$-primary part $S$ of $T$ together with the restriction of $f$ to it. The second output is the embedding of $S$ in $T$.
orthogonal_submodule — Method
orthogonal_submodule(
Tf::TorQuadModuleWithIsom,
S::TorQuadModule;
check::Bool=true,
) -> TorQuadModuleWithIsom, TorQuadModuleMapGiven a torsion quadratic module with isometry $(T, f)$ and a submodule $S$ of $T$ which is preserved by $f$, return the pair $(K, g)$ where $K$ is the orthogonal complement of $S$ in $T$ and $g$ is the restriction of $f$ to $K$. The second output is the embedding of $K$ in $T$.
If check is set to true, the function checks whether $S$ is indeed an $f$-stable submodule of $T$.
submodules — Method
submodules(
Tf::TorQuadModuleWithIsom;
kwargs...,
)Given a torsion quadratic module with isometry $(T, f)$, return an iterator on the $f$-stable submodules of $T$. The possible keyword arguments to restrict the submodules (currently) are:
quotype::Vector{Int}: only submodules whose quotient are isomorphic as an abelian group toabelian_group(quotype).
See also stable_submodules(::TorQuadModule, ::Vector{TorQuadModuleMap}).
(Anti-)Isomorphism
Given two torsion quadratic module $(T, f)$ and $(S, g)$, we call an abelian group isomorphism $\psi\colon T\to S$ an (anti-)isomorphism between $(T, f)$ and $(S, g)$ if $\psi$ defines an (anti-)isometry of $T$ and $S$ and if satisfies $\psi\circ f = g\circ \psi$. We denote by $O(T, f)$ the automorphism group of $(T, f)$, i.e. the group of isomorphisms from $(T, f)$ to $(T, f)$.
automorphism_group_with_inclusion — Method
automorphism_group_with_inclusion(
Tf::TorQuadModuleWithIsom
) -> AutomorphismGroup{TorQuadModule}, GAPGroupHomomorphismGiven a torsion quadratic module with isometry $(T, f)$, return the automorphism group $O(T, f)$ of $(T, f)$. This is defined as the centralizer of the isometry $f$ in the orthogonal group $O(T)$ of $T$. The second output is the embedding of $O(T, f)$ in $O(T)$.
Examples
julia> Tf = torsion_quadratic_module_with_isometry(QQ[-1//60;], ZZ[11;])
Finite quadratic module of order 60
with 1 generator
with isometry given by
[11]
julia> O, _ = automorphism_group_with_inclusion(Tf)
(Group of isometries of finite quadratic module: Z/60 -> Q/2Z, Hom: group of isometries -> group of isometries)
julia> order(O)
8automorphism_group — Method
automorphism_group(
Tf::TorQuadModuleWithMap,
) -> AutomorphismGroup{TorQuadModule}Return the automorphism group of Tf, see also automorphism_group_with_inclusion(::TorQuadModuleWithIsom) for more details.
is_isomorphic_with_map — Method
is_isomorphic_with_map(
Tf::TorQuadModuleWithIsom,
Sg::TorQuadModuleWithIsom,
) -> Bool, TorQuadModuleMapGiven two torsion quadratic modules with isometry $(T, f)$ and $(S, g)$, return whether there exists an isometry $ψ$ between $T$ and $S$ that conjugates $f$ and $g$, i.e. such that $g ∘ ψ = ψ ∘ f$.
If such a $ψ$ exists, return $true, ψ$, otherwise return $false, 0$ where here $0$ denotes the zero map from $T$ to $S$.
is_anti_isomorphic_with_map — Method
is_anti_isomorphic_with_map(
Tf::TorQuadModuleWithIsom,
Sg::TorQuadModuleWithIsom,
) -> Bool, TorQuadModuleMapGiven two torsion quadratic modules with isometry $(T, f)$ and $(S, g)$, return whether there exists an anti-isometry $ψ$ between $T$ and $S$ that conjugates $f$ and $g$, i.e. such that $g ∘ ψ = ψ ∘ f$.
If such a $ψ$ exists, return $true, ψ$, otherwise return $false, 0$ where here $0$ denotes the zero map from $T$ to $S$.
Examples
julia> E8 = root_lattice(:E, 8);
julia> m = QQ[ 1 0 0 0 0 0 0 0;
0 1 0 0 0 0 0 0;
-2 -4 -5 -4 -3 -2 -1 -2;
1 2 3 3 2 1 0 1;
-1 -2 -3 -3 -2 -1 0 -2;
1 2 3 2 1 0 0 2;
0 0 0 0 0 1 0 0;
2 4 6 5 4 3 2 3];
julia> Lf = integer_lattice_with_isometry(E8, m);
julia> F = kernel_lattice(Lf, 3);
julia> C = orthogonal_submodule(Lf, basis_matrix(F));
julia> Tf = discriminant_group(TorQuadModuleWithIsom, F)
Finite quadratic module of order 12
with 2 generators
with isometry given by
[0 3]
[1 1]
julia> Sg = discriminant_group(TorQuadModuleWithIsom, C)
Finite quadratic module of order 12
with 2 generators
with isometry given by
[0 3]
[1 1]
julia> is_anti_isomorphic_with_map(Tf, Sg)
(true, Map: finite quadratic module -> finite quadratic module)Equality
We choose as a convention that two pairs $(T, f)$ and $(S, g)$ of torsion quadratic modules with isometry are equal if the underlying modules $T$ and $S$ of typeTorQuadModule are the same julia object, and if the associated isometries have the same matrix representation.