Operations on Modules

Kernel

kernelMethod
kernel(a::FreeModuleHom)

Return the kernel of a as an object of type SubQuo.

Additionally, if K denotes this object, return the inclusion map K $\rightarrow$ domain(a).

Examples

julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> F = free_module(R, 3)
Free module of rank 3 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> G = free_module(R, 2)
Free module of rank 2 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> V = [y*G[1], x*G[1]+y*G[2], z*G[2]]
3-element Vector{FreeModElem{fmpq_mpoly}}:
 y*e[1]
 x*e[1] + y*e[2]
 z*e[2]

julia> a = hom(F, G, V)
Map with following data
Domain:
=======
Free module of rank 3 over Multivariate Polynomial Ring in x, y, z over Rational Field
Codomain:
=========
Free module of rank 2 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> kernel(a)
(Submodule with 1 generator
1 -> x*z*e[1] - y*z*e[2] + y^2*e[3]
represented as subquotient with no relations., Map with following data
Domain:
=======
Submodule with 1 generator
1 -> x*z*e[1] - y*z*e[2] + y^2*e[3]
represented as subquotient with no relations.
Codomain:
=========
Free module of rank 3 over Multivariate Polynomial Ring in x, y, z over Rational Field)
source
kernelMethod
kernel(a::SubQuoHom)

Return the kernel of a as an object of type SubQuo.

Additionally, if K denotes this object, return the inclusion map K $\rightarrow$ domain(a).

source

Image

imageMethod
image(a::FreeModuleHom)

Return the image of a as an object of type SubQuo.

Additionally, if I denotes this object, return the inclusion map I $\rightarrow$ codomain(a).

Examples

julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> F = free_module(R, 3)
Free module of rank 3 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> G = free_module(R, 2)
Free module of rank 2 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> V = [y*G[1], x*G[1]+y*G[2], z*G[2]]
3-element Vector{FreeModElem{fmpq_mpoly}}:
 y*e[1]
 x*e[1] + y*e[2]
 z*e[2]

julia> a = hom(F, G, V)
Map with following data
Domain:
=======
Free module of rank 3 over Multivariate Polynomial Ring in x, y, z over Rational Field
Codomain:
=========
Free module of rank 2 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> image(a)
(Submodule with 3 generators
1 -> y*e[1]
2 -> x*e[1] + y*e[2]
3 -> z*e[2]
represented as subquotient with no relations., Map with following data
Domain:
=======
Submodule with 3 generators
1 -> y*e[1]
2 -> x*e[1] + y*e[2]
3 -> z*e[2]
represented as subquotient with no relations.
Codomain:
=========
Free module of rank 2 over Multivariate Polynomial Ring in x, y, z over Rational Field)
source
imageMethod
image(a::SubQuoHom)

Return the image of a as an object of type SubQuo.

Additionally, if I denotes this object, return the inclusion map I $\rightarrow$ codomain(a).

source

Cokernel

cokernelMethod
cokernel(a::FreeModuleHom)

Given a homomorphism a between free modules, return the cokernel of a as an object of type SubQuo.

cokernel(F::FreeMod{T}, A::MatElem{T}) where T

Given a matrix A with with rank F columns, return cokernel(a), where a is a free module homomorphism with codomain F represented by A.

cokernel(A::MatElem)

Create a free module F, say, with rank F columns, and return cokernel(F, A).

Examples

julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> F = free_module(R, 3)
Free module of rank 3 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> G = free_module(R, 2)
Free module of rank 2 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> V = [y*G[1], x*G[1]+y*G[2], z*G[2]]
3-element Vector{FreeModElem{fmpq_mpoly}}:
 y*e[1]
 x*e[1] + y*e[2]
 z*e[2]

julia> a = hom(F, G, V)
Map with following data
Domain:
=======
Free module of rank 3 over Multivariate Polynomial Ring in x, y, z over Rational Field
Codomain:
=========
Free module of rank 2 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> cokernel(a)
Subquotient of Submodule with 2 generators
1 -> e[1]
2 -> e[2]
by Submodule with 3 generators
1 -> y*e[1]
2 -> x*e[1] + y*e[2]
3 -> z*e[2]
source

Chain Complexes

Constructors

Data Associated to Chain Complexes

Operations on Chain Complexes

Tests on Chain Complexes

Homology

Direct Sums and Products

direct_sumMethod
direct_sum(M::ModuleFP{T}...; task::Symbol = :none) where T

Given modules $M_1\dots M_n$, say, return the direct sum $\bigoplus_{i=1}^n M_i$.

Additionally, return

  • a vector containing the canonical injections $M_i\rightarrow\bigoplus_{i=1}^n M_i$ if task = :sum (default),
  • a vector containing the canonical projections $\bigoplus_{i=1}^n M_i\rightarrow M_i$ if task = :prod,
  • two vectors containing the canonical injections and projections, respectively, if task = :both.
source
direct_productMethod
direct_product(M::ModuleFP{T}...; task::Symbol = :none) where T

Given modules $M_1\dots M_n$, say, return the direct product $\prod_{i=1}^n M_i$.

Additionally, return

  • a vector containing the canonical projections $\prod_{i=1}^n M_i\rightarrow M_i$ if task = :prod (default),
  • a vector containing the canonical injections $M_i\rightarrow\prod_{i=1}^n M_i$ if task = :sum,
  • two vectors containing the canonical projections and injections, respectively, if task = :both.
source
hom_productMethod
hom_product(M::ModuleFP, N::ModuleFP, A::Matrix{<:ModuleMap})

Given modules M, N which are products with the same number of factors, say $M = \prod_{i=1}^r M_i$, $N = \prod_{j=1}^r N_j$, and given a matrix A of homomorphisms $a_{ij} : M_i \to N_j$, return the homomorphism $M \rightarrow N$ with $ij$-components $a_{ij}$.

source

Presentations

Syzygies and Free Resolutions

free_resolutionMethod
free_resolution(M::SubQuo; ordering::ModuleOrdering = default_ordering(M),
    length::Int=0, algorithm::Symbol=:fres)

Return a free resolution of M.

If length != 0, the free resolution is only computed up to the length-th free module. algorithm can be set to :sres or :fres.

Examples

julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> A = R[x; y]
[x]
[y]

julia> B = R[x^2; x*y; y^2; z^4]
[x^2]
[x*y]
[y^2]
[z^4]

julia> M = SubQuo(A, B)
Subquotient of Submodule with 2 generators
1 -> x*e[1]
2 -> y*e[1]
by Submodule with 4 generators
1 -> x^2*e[1]
2 -> x*y*e[1]
3 -> y^2*e[1]
4 -> z^4*e[1]

julia> fr = free_resolution(M, length=1)

rank   | 6  2
-------|------
degree | 1  0

julia> is_complete(fr)
false

julia> fr[4]
Free module of rank 0 over Multivariate Polynomial Ring in x, y, z over Rational Field

julia> fr

rank   | 0  2  6  6  2
-------|---------------
degree | 4  3  2  1  0

julia> is_complete(fr)
true

julia> fr = free_resolution(M, algorithm=:sres)

rank   | 0  2  6  6  2
-------|---------------
degree | 4  3  2  1  0
source

Hom and Ext

Tensorproduct and Tor

hom_tensorMethod
hom_tensor(M::ModuleFP, N::ModuleFP, V::Vector{ <: ModuleMap})

Given modules M, N which are tensor products with the same number of factors, say $M = M_1 \otimes \cdots \otimes M_r$, $N = N_1 \otimes \cdots \otimes N_r$, and given a vector V of homomorphisms $a_i : M_i \to N_i$, return $a_1 \otimes \cdots \otimes a_r$.

source