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.

TorQuadModuleWithIsomType
TorQuadModuleWithIsom

A 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]
source

Given a torsion quadratic module with isometry $(T, f)$, we provide the following accessors:

underlying_moduleMethod
underlying_module(Tf::TorQuadModuleWithIsom) -> TorQuadModule

Given 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]
source
isometryMethod
isometry(Tf::TorQuadModuleWithIsom) -> TorQuadModuleMap

Given 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/2Z
source

Note 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_isometryMethod
order_of_isometry(Tf::TorQuadModuleWithIsom) -> Int

Given 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)
2
source

Constructors

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_isometryMethod
torsion_quadratic_module_with_isometry(
  T::TorQuadModule,
  [f::U];
  check::Bool=true,
) -> TorQuadModuleWithIsom

Given 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$.

source
torsion_quadratic_module_with_isometryMethod
torsion_quadratic_module_with_isometry(
  q::QQMatrix,
  [f::ZZMatrix];
  check::Bool=true,
) -> TorQuadModuleWithIsom

Given 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$.

source

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$.

subMethod
sub(
  Tf::TorQuadModuleWithIsom,
  gene::Vector{TorQuadModuleElem},
) -> TorQuadModuleWithIsom, TorQuadModuleMap

Given 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$.

source
primary_partMethod
primary_part(
  Tf::TorQuadModuleWithIsom,
  m::IntegerUnion,
) -> TorQuadModuleWithIsom, TorQuadModuleMap

Given 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$.

source
orthogonal_submoduleMethod
orthogonal_submodule(
  Tf::TorQuadModuleWithIsom,
  S::TorQuadModule;
  check::Bool=true,
) -> TorQuadModuleWithIsom, TorQuadModuleMap

Given 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$.

source
submodulesMethod
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 to abelian_group(quotype).

See also stable_submodules(::TorQuadModule, ::Vector{TorQuadModuleMap}).

source

(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_inclusionMethod
automorphism_group_with_inclusion(
  Tf::TorQuadModuleWithIsom
) -> AutomorphismGroup{TorQuadModule}, GAPGroupHomomorphism

Given 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)
8
source
is_isomorphic_with_mapMethod
is_isomorphic_with_map(
  Tf::TorQuadModuleWithIsom,
  Sg::TorQuadModuleWithIsom,
) -> Bool, TorQuadModuleMap

Given 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$.

source
is_anti_isomorphic_with_mapMethod
is_anti_isomorphic_with_map(
  Tf::TorQuadModuleWithIsom,
  Sg::TorQuadModuleWithIsom,
) -> Bool, TorQuadModuleMap

Given 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)
source

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.