Quadratic spaces with isometry
We call quadratic space with isometry any pair consisting of a non-degenerate quadratic space together with an isometry . We refer to the section about Spaces of the documentation for new users.
Note that currently, we support only rational quadratic forms, i.e. quadratic spaces defined over .
In Oscar, such a pair is encoded by the type called QuadSpaceWithIsom
:
QuadSpaceWithIsom
— TypeQuadSpaceWithIsom
A container type for pairs consisting of a rational quadratic space of type QuadSpace
and an isometry given as a QQMatrix
representing the action on the standard basis of .
We store the order of too, which can finite or infinite.
To construct an object of type QuadSpaceWithIsom
, see the set of functions called quadratic_space_with_isometry
Examples
julia> V = quadratic_space(QQ, 4);
julia> quadratic_space_with_isometry(V, neg=true)
Quadratic space of dimension 4
with isometry of finite order 2
given by
[-1 0 0 0]
[ 0 -1 0 0]
[ 0 0 -1 0]
[ 0 0 0 -1]
julia> L = root_lattice(:E, 6);
julia> V = ambient_space(L);
julia> f = matrix(QQ, 6, 6, [ 1 2 3 2 1 1;
-1 -2 -2 -2 -1 -1;
0 1 0 0 0 0;
1 0 0 0 0 0;
-1 -1 -1 0 0 -1;
0 0 1 1 0 1]);
julia> Vf = quadratic_space_with_isometry(V, f)
Quadratic space of dimension 6
with isometry of finite order 8
given by
[ 1 2 3 2 1 1]
[-1 -2 -2 -2 -1 -1]
[ 0 1 0 0 0 0]
[ 1 0 0 0 0 0]
[-1 -1 -1 0 0 -1]
[ 0 0 1 1 0 1]
This function is part of the experimental code in Oscar. Please read here for more details.
It is seen as a triple where is the order of . We actually support isometries of finite and infinite order. In the case where is of infinite order, then n = PosInf
. If has rank 0, then any isometry of is trivial and we set by default n = -1
.
Given a quadratic space with isometry , we provide the following accessors to the elements of the previously described triple:
isometry
— Methodisometry(Vf::QuadSpaceWithIsom) -> QQMatrix
Given a quadratic space with isometry , return the underlying isometry .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> isometry(Vf)
[-1 0]
[ 0 -1]
This function is part of the experimental code in Oscar. Please read here for more details.
order_of_isometry
— Methodorder_of_isometry(Vf::QuadSpaceWithIsom) -> IntExt
Given a quadratic space with isometry , return the order of the underlying isometry .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> order_of_isometry(Vf) == 2
true
This function is part of the experimental code in Oscar. Please read here for more details.
space
— Methodspace(Vf::QuadSpaceWithIsom) -> QuadSpace
Given a quadratic space with isometry , return the underlying space .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> space(Vf) === V
true
This function is part of the experimental code in Oscar. Please read here for more details.
The main purpose of the definition of such objects is to define a contextual ambient space for quadratic lattices endowed with an isometry. Indeed, as we will see in the next section, lattices with isometry are attached to an ambient quadratic space with an isometry inducing the one on the lattice.
Constructors
For simplicity, we have gathered the main constructors for objects of type QuadSpaceWithIsom
under the same name quadratic_space_with_isometry
. The user has then the choice on the parameters depending on what they intend to do:
quadratic_space_with_isometry
— Methodquadratic_space_with_isometry(V:QuadSpace, f::QQMatrix; check::Bool = false)
-> QuadSpaceWithIsom
Given a quadratic space and a matrix , if defines an isometry of of order (possibly infinite), return the corresponding quadratic space with isometry pair .
Examples
julia> V = quadratic_space(QQ, QQ[ 2 -1;
-1 2])
Quadratic space of dimension 2
over rational field
with gram matrix
[ 2 -1]
[-1 2]
julia> f = matrix(QQ, 2, 2, [1 1;
0 -1])
[1 1]
[0 -1]
julia> Vf = quadratic_space_with_isometry(V, f)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[1 1]
[0 -1]
This function is part of the experimental code in Oscar. Please read here for more details.
quadratic_space_with_isometry
— Methodquadratic_space_with_isometry(V::QuadSpace; neg::Bool = false) -> QuadSpaceWithIsom
Given a quadratic space , return the quadratic space with isometry pair where is represented by the identity matrix.
If neg
is set to true
, then the isometry is negative the identity on .
Examples
julia> V = quadratic_space(QQ, QQ[ 2 -1;
-1 2])
Quadratic space of dimension 2
over rational field
with gram matrix
[ 2 -1]
[-1 2]
julia> Vf = quadratic_space_with_isometry(V)
Quadratic space of dimension 2
with isometry of finite order 1
given by
[1 0]
[0 1]
This function is part of the experimental code in Oscar. Please read here for more details.
By default, the first constructor always checks whether the matrix defines an isometry of the quadratic space. We recommend not to disable this parameter to avoid any complications. Note however that in the rank 0 case, the checks are avoided since all isometries are necessarily trivial.
Attributes and first operations
Given a quadratic space with isometry , one has access to most of the attributes of and by calling the similar functions on the pair itself. For instance, in order to know the rank of , one can simply call rank(Vf)
. Here is a list of what are the current accessible attributes:
characteristic_polynomial
— Methodcharacteristic_polynomial(Vf::QuadSpaceWithIsom) -> QQPolyRingElem
Given a quadratic space with isometry , return the characteristic polynomial of the underlying isometry .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> characteristic_polynomial(Vf)
x^2 + 2*x + 1
det
— Methoddet(Vf::QuadSpaceWithIsom) -> QQFieldElem
Given a quadratic space with isometry , return the determinant of the underlying space .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> is_one(det(Vf))
true
This function is part of the experimental code in Oscar. Please read here for more details.
diagonal
— Methoddiagonal(Vf::QuadSpaceWithIsom) -> Vector{QQFieldElem}
Given a quadratic space with isometry , return the diagonal of the underlying space .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> diagonal(Vf)
2-element Vector{QQFieldElem}:
1
1
This function is part of the experimental code in Oscar. Please read here for more details.
dim
— Methoddim(Vf::QuadSpaceWithIsom) -> Integer
Given a quadratic space with isometry , return the dimension of the underlying space of .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> dim(Vf) == 2
true
This function is part of the experimental code in Oscar. Please read here for more details.
discriminant
— Methoddiscriminant(Vf::QuadSpaceWithIsom) -> QQFieldElem
Given a quadratic space with isometry , return the discriminant of the underlying space .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> discriminant(Vf)
-1
This function is part of the experimental code in Oscar. Please read here for more details.
gram_matrix
— Methodgram_matrix(Vf::QuadSpaceWithIsom) -> QQMatrix
Given a quadratic space with isometry , return the Gram matrix of the underlying space with respect to its standard basis.
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> is_one(gram_matrix(Vf))
true
This function is part of the experimental code in Oscar. Please read here for more details.
is_definite
— Methodis_definite(Vf::QuadSpaceWithIsom) -> Bool
Given a quadratic space with isometry , return whether the underlying space is definite.
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> is_definite(Vf)
true
This function is part of the experimental code in Oscar. Please read here for more details.
is_positive_definite
— Methodis_positive_definite(Vf::QuadSpaceWithIsom) -> Bool
Given a quadratic space with isometry , return whether the underlying space is positive definite.
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> is_positive_definite(Vf)
true
This function is part of the experimental code in Oscar. Please read here for more details.
is_negative_definite
— Methodis_negative_definite(Vf::QuadSpaceWithIsom) -> Bool
Given a quadratic space with isometry , return whether the underlying space is negative definite.
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> is_negative_definite(Vf)
false
This function is part of the experimental code in Oscar. Please read here for more details.
minimal_polynomial
— Methodminimal_polynomial(Vf::QuadSpaceWithIsom) -> QQPolyRingElem
Given a quadratic space with isometry , return the minimal polynomial of the underlying isometry .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> minimal_polynomial(Vf)
x + 1
rank
— Methodrank(Vf::QuadSpaceWithIsom) -> Integer
Given a quadratic space with isometry , return the rank of the underlying space .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> rank(Vf) == 2
true
This function is part of the experimental code in Oscar. Please read here for more details.
signature_tuple
— Methodsignature_tuple(Vf::QuadSpaceWithIsom) -> Tuple{Int, Int, Int}
Given a quadratic space with isometry , return the signature tuple of the underlying space .
Examples
julia> V = quadratic_space(QQ, 2);
julia> Vf = quadratic_space_with_isometry(V; neg = true);
julia> signature_tuple(Vf)
(2, 0, 0)
This function is part of the experimental code in Oscar. Please read here for more details.
Similarly, some basic operations on quadratic spaces and matrices are available for quadratic spaces with isometry.
^
— Method^(Vf::QuadSpaceWithIsom, n::Int) -> QuadSpaceWithIsom
Given a quadratic space with isometry and an integer , return the pair .
Examples
julia> V = quadratic_space(QQ, QQ[ 2 -1;
-1 2])
Quadratic space of dimension 2
over rational field
with gram matrix
[ 2 -1]
[-1 2]
julia> f = matrix(QQ, 2, 2, [1 1;
0 -1])
[1 1]
[0 -1]
julia> Vf = quadratic_space_with_isometry(V, f)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[1 1]
[0 -1]
julia> Vf^2
Quadratic space of dimension 2
with isometry of finite order 1
given by
[1 0]
[0 1]
This function is part of the experimental code in Oscar. Please read here for more details.
biproduct
— Methodbiproduct(x::Vector{QuadSpaceWithIsom}) -> QuadSpaceWithIsom, Vector{AbstractSpaceMor}, Vector{AbstractSpaceMor}
biproduct(x::Vararg{QuadSpaceWithIsom}) -> QuadSpaceWithIsom, Vector{AbstractSpaceMor}, Vector{AbstractSpaceMor}
Given a collection of quadratic spaces with isometries , return the quadratic space with isometry together with the injections and the projections , where is the biproduct and is the isometry of induced by the diagonal actions of the 's.
For objects of type QuadSpaceWithIsom
, finite direct sums and finite direct products agree and they are therefore called biproducts. If one wants to obtain as a direct sum with the injections , one should call direct_sum(x)
. If one wants to obtain as a direct product with the projections , one should call direct_product(x)
.
Examples
julia> V1 = quadratic_space(QQ, QQ[2 5;
5 6])
Quadratic space of dimension 2
over rational field
with gram matrix
[2 5]
[5 6]
julia> Vf1 = quadratic_space_with_isometry(V1, neg=true)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[-1 0]
[ 0 -1]
julia> V2 = quadratic_space(QQ, QQ[ 2 -1;
-1 2])
Quadratic space of dimension 2
over rational field
with gram matrix
[ 2 -1]
[-1 2]
julia> f = matrix(QQ, 2, 2, [1 1;
0 -1])
[1 1]
[0 -1]
julia> Vf2 = quadratic_space_with_isometry(V2, f)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[1 1]
[0 -1]
julia> Vf3, inj, proj = biproduct(Vf1, Vf2)
(Quadratic space with isometry of finite order 2, AbstractSpaceMor[Map: quadratic space -> quadratic space, Map: quadratic space -> quadratic space], AbstractSpaceMor[Map: quadratic space -> quadratic space, Map: quadratic space -> quadratic space])
julia> Vf3
Quadratic space of dimension 4
with isometry of finite order 2
given by
[-1 0 0 0]
[ 0 -1 0 0]
[ 0 0 1 1]
[ 0 0 0 -1]
julia> space(Vf3)
Quadratic space of dimension 4
over rational field
with gram matrix
[2 5 0 0]
[5 6 0 0]
[0 0 2 -1]
[0 0 -1 2]
julia> matrix(compose(inj[1], proj[1]))
[1 0]
[0 1]
julia> matrix(compose(inj[1], proj[2]))
[0 0]
[0 0]
This function is part of the experimental code in Oscar. Please read here for more details.
direct_product
— Methoddirect_product(algebras::StructureConstantAlgebra...; task::Symbol = :sum)
-> StructureConstantAlgebra, Vector{AbsAlgAssMor}, Vector{AbsAlgAssMor}
direct_product(algebras::Vector{StructureConstantAlgebra}; task::Symbol = :sum)
-> StructureConstantAlgebra, Vector{AbsAlgAssMor}, Vector{AbsAlgAssMor}
Returns the algebra . task
can be ":sum", ":prod", ":both" or ":none" and determines which canonical maps are computed as well: ":sum" for the injections, ":prod" for the projections.
direct_product(F::FreeMod{T}...; task::Symbol = :prod) where T
Given free modules , say, return the direct product .
Additionally, return
- a vector containing the canonical projections if
task = :prod
(default), - a vector containing the canonical injections if
task = :sum
, - two vectors containing the canonical projections and injections, respectively, if
task = :both
, - none of the above maps if
task = :none
.
direct_product(M::ModuleFP{T}...; task::Symbol = :prod) where T
Given modules , say, return the direct product .
Additionally, return
- a vector containing the canonical projections if
task = :prod
(default), - a vector containing the canonical injections if
task = :sum
, - two vectors containing the canonical projections and injections, respectively, if
task = :both
, - none of the above maps if
task = :none
.
direct_product(x::Vector{QuadSpaceWithIsom}) -> QuadSpaceWithIsom, Vector{AbstractSpaceMor}
direct_product(x::Vararg{QuadSpaceWithIsom}) -> QuadSpaceWithIsom, Vector{AbstractSpaceMor}
Given a collection of quadratic spaces with isometries , return the quadratic space with isometry together with the projections , where is the direct product and is the isometry of induced by the diagonal actions of the 's.
For objects of type QuadSpaceWithIsom
, finite direct sums and finite direct products agree and they are therefore called biproducts. If one wants to obtain as a direct sum with the injections , one should call direct_sum(x)
. If one wants to obtain as a biproduct with the injections and the projections , one should call biproduct(x)
.
Examples
julia> V1 = quadratic_space(QQ, QQ[2 5;
5 6])
Quadratic space of dimension 2
over rational field
with gram matrix
[2 5]
[5 6]
julia> Vf1 = quadratic_space_with_isometry(V1, neg=true)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[-1 0]
[ 0 -1]
julia> V2 = quadratic_space(QQ, QQ[ 2 -1;
-1 2])
Quadratic space of dimension 2
over rational field
with gram matrix
[ 2 -1]
[-1 2]
julia> f = matrix(QQ, 2, 2, [1 1;
0 -1])
[1 1]
[0 -1]
julia> Vf2 = quadratic_space_with_isometry(V2, f)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[1 1]
[0 -1]
julia> Vf3, proj = direct_product(Vf1, Vf2)
(Quadratic space with isometry of finite order 2, AbstractSpaceMor[Map: quadratic space -> quadratic space, Map: quadratic space -> quadratic space])
julia> Vf3
Quadratic space of dimension 4
with isometry of finite order 2
given by
[-1 0 0 0]
[ 0 -1 0 0]
[ 0 0 1 1]
[ 0 0 0 -1]
julia> space(Vf3)
Quadratic space of dimension 4
over rational field
with gram matrix
[2 5 0 0]
[5 6 0 0]
[0 0 2 -1]
[0 0 -1 2]
This function is part of the experimental code in Oscar. Please read here for more details.
direct_sum
— Methoddirect_sum(g1::QuadSpaceCls, g2::QuadSpaceCls) -> QuadSpaceCls
Return the isometry class of the direct sum of two representatives.
direct_sum(M::ModuleFP{T}...; task::Symbol = :sum) where T
Given modules , say, return the direct sum .
Additionally, return
- a vector containing the canonical injections if
task = :sum
(default), - a vector containing the canonical projections if
task = :prod
, - two vectors containing the canonical injections and projections, respectively, if
task = :both
, - none of the above maps if
task = :none
.
direct_sum(x::Vector{QuadSpaceWithIsom}) -> QuadSpaceWithIsom, Vector{AbstractSpaceMor}
direct_sum(x::Vararg{QuadSpaceWithIsom}) -> QuadSpaceWithIsom, Vector{AbstractSpaceMor}
Given a collection of quadratic spaces with isometries , return the quadratic space with isometry together with the injections , where is the direct sum and is the isometry of induced by the diagonal actions of the 's.
For objects of type QuadSpaceWithIsom
, finite direct sums and finite direct products agree and they are therefore called biproducts. If one wants to obtain as a direct product with the projections , one should call direct_product(x)
. If one wants to obtain as a biproduct with the injections and the projections , one should call biproduct(x)
.
Examples
julia> V1 = quadratic_space(QQ, QQ[2 5;
5 6])
Quadratic space of dimension 2
over rational field
with gram matrix
[2 5]
[5 6]
julia> Vf1 = quadratic_space_with_isometry(V1, neg=true)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[-1 0]
[ 0 -1]
julia> V2 = quadratic_space(QQ, QQ[ 2 -1;
-1 2])
Quadratic space of dimension 2
over rational field
with gram matrix
[ 2 -1]
[-1 2]
julia> f = matrix(QQ, 2, 2, [1 1;
0 -1])
[1 1]
[0 -1]
julia> Vf2 = quadratic_space_with_isometry(V2, f)
Quadratic space of dimension 2
with isometry of finite order 2
given by
[1 1]
[0 -1]
julia> Vf3, inj = direct_sum(Vf1, Vf2)
(Quadratic space with isometry of finite order 2, AbstractSpaceMor[Map: quadratic space -> quadratic space, Map: quadratic space -> quadratic space])
julia> Vf3
Quadratic space of dimension 4
with isometry of finite order 2
given by
[-1 0 0 0]
[ 0 -1 0 0]
[ 0 0 1 1]
[ 0 0 0 -1]
julia> space(Vf3)
Quadratic space of dimension 4
over rational field
with gram matrix
[2 5 0 0]
[5 6 0 0]
[0 0 2 -1]
[0 0 -1 2]
This function is part of the experimental code in Oscar. Please read here for more details.
rescale
— Methodrescale(Vf::QuadSpaceWithIsom, a::RationalUnion)
Given a quadratic space with isometry , return the pair ) where is the same space as with the associated quadratic form rescaled by .
Examples
julia> V = quadratic_space(QQ, QQ[ 2 -1;
-1 2])
Quadratic space of dimension 2
over rational field
with gram matrix
[ 2 -1]
[-1 2]
julia> Vf = quadratic_space_with_isometry(V)
Quadratic space of dimension 2
with isometry of finite order 1
given by
[1 0]
[0 1]
julia> Vf2 = rescale(Vf, 1//2)
Quadratic space of dimension 2
with isometry of finite order 1
given by
[1 0]
[0 1]
julia> space(Vf2)
Quadratic space of dimension 2
over rational field
with gram matrix
[ 1 -1//2]
[-1//2 1]
This function is part of the experimental code in Oscar. Please read here for more details.
Spinor norm
Given a rational quadratic space , and given an integer , we define the rational spinor norm on to be the group homomorphism
defined as follows. For , there exist elements where such that is equal to the product of the associated reflections. We define
rational_spinor_norm
— Methodrational_spinor_norm(Vf::QuadSpaceWithIsom; b::Int = -1) -> QQFieldElem
Given a rational quadratic space with isometry , return the rational spinor norm of .
If is the form on , then the spinor norm is computed with respect to .
This function is part of the experimental code in Oscar. Please read here for more details.
Equality
We choose as a convention that two pairs and of quadratic spaces with isometries are equal if and are the same space, and and are represented by the same matrix with respect to the standard basis of .