Introduction
This chapter deals with pseudo-matrices. We follow the common terminology and conventions introduced in Henri Cohen (2000), however, we operate on rows, not on columns.
Let be a Dedekind domain, typically, the maximal order of some number field , further fix some finite dimensional -vectorspace (with some basis), frequently or the -structure of some extension of . Since in general is not a PID, the -modules in are usually not free, but still projective.
Any finitely generated -module can be represented as a pseudo-matrix PMat
as follows: The structure theory of -modules gives the existence of (fractional) -ideals and elements such that and the sum is direct.
Following Cohen we call modules of the form for some ideal and a pseudo element. A system is called a pseudo-generating system for if . A pseudo-generating system is called a pseudo-basis if the are -linear independent.
A pseudo-matrix is a tuple containing a vector of ideals () and a matrix . The -th row together with the -th ideal defines a pseudo-element, thus an -module, all of them together generate a module .
A pseudo-matrix is said to be in pseudo-hnf if is essentially upper triangular. Similar to the classical hnf, there is an algorithm that transforms any pseudo-matrix into one in pseudo-hnf while maintaining the module.
Creation
In general to create a PMat
one has to specify a matrix and a vector of ideals:
#
pseudo_matrix
— Method.
pseudo_matrix(m::Generic.Mat{AbsSimpleNumFieldElem}, c::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> PMat{AbsSimpleNumFieldElem, AbsSimpleNumFieldOrderFractionalIdeal}
Returns the (row) pseudo matrix representing the -module where are the ideals in and the rows of .
#
pseudo_matrix
— Method.
pseudo_matrix(m::Generic.Mat{AbsSimpleNumFieldOrderElem}, c::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> PMat{AbsSimpleNumFieldElem, AbsSimpleNumFieldOrderFractionalIdeal}
Returns the (row) pseudo matrix representing the -module where are the ideals in and the rows of .
#
pseudo_matrix
— Method.
pseudo_matrix(m::Generic.Mat{AbsSimpleNumFieldOrderElem}) -> PMat{AbsSimpleNumFieldElem, AbsSimpleNumFieldOrderFractionalIdeal}
Returns the free (row) pseudo matrix representing the -module where are the rows of .
(Those functions are also available as pseudo_matrix
)
Operations
#
coefficient_ideals
— Method.
coefficient_ideals(M::PMat)
Returns the vector of coefficient ideals.
#
matrix
— Method.
matrix(M::PMat)
Returns the matrix part of the PMat
.
#
base_ring
— Method.
base_ring(M::PMat)
The PMat
defines an -module for some maximal order . This function returns the that was used to defined .
#
pseudo_hnf
— Method.
pseudo_hnf(P::PMat)
Transforms into pseudo-Hermite form as defined by Cohen. Essentially the matrix part of will be upper triangular with some technical normalisation for the off-diagonal elements. This operation preserves the module.
A optional second argument can be specified as a symbols, indicating the desired shape of the echelon form. Possible are :upperright
(the default) and :lowerleft
#
pseudo_hnf_with_transform
— Method.
pseudo_hnf_with_transform(P::PMat)
Transforms into pseudo-Hermite form as defined by Cohen. Essentially the matrix part of will be upper triangular with some technical normalisation for the off-diagonal elements. This operation preserves the module. The used transformation is returned as a second return value.
A optional second argument can be specified as a symbol, indicating the desired shape of the echelon form. Possible are :upperright
(the default) and :lowerleft