Module Homomorphisms

Module Homomorphisms

Abstract Algebra provides homomorphisms of finitely presented modules.

Generic functionality

The following generic functionality is provided for module homomorphisms.

Constructors

Homomorphisms of AbstractAlgebra modules, $f : R^s \to R^t$, can be represented by $s\times t$ matrices over $R$.

ModuleHomomorphism(M1::AbstractAlgebra.FPModule{T},
 M2::AbstractAlgebra.FPModule{T}, m::AbstractAlgebra.MatElem{T})
        where T <: RingElement

Create the homomorphism $f : M_1 \to M_2$ represented by the matrix $m$.

ModuleIsomorphism(M1::AbstractAlgebra.FPModule{T},
    M2::AbstractAlgebra.FPModule{T}, M::AbstractAlgebra.MatElem{T},
   minv::AbstractAlgebra.MatElem{T}) where T <: RingElement

Create the isomorphism $f : M_1 \to M_2$ represented by the matrix $M$. The inverse morphism is automatically computed.

Examples

julia> M = FreeModule(ZZ, 2)
Free module of rank 2 over Integers

julia> f = ModuleHomomorphism(M, M, matrix(ZZ, 2, 2, [1, 2, 3, 4]))
Module homomorphism with
Domain: Free module of rank 2 over Integers
Codomain: Free module of rank 2 over Integers

julia> m = M([ZZ(1), ZZ(2)])
(1, 2)

julia> f(m)
(7, 10)

Kernels

kernel(f::ModuleHomomorphism{T}) where T <: RingElement

Return a pair K, g consisting of the kernel object $K$ of the given module homomorphism $f$ (as a submodule of its domain) and the canonical injection from the kernel into the domain of $f$

Examples

julia> M = FreeModule(ZZ, 3)
Free module of rank 3 over Integers

julia> m = M([ZZ(1), ZZ(2), ZZ(3)])
(1, 2, 3)

julia> S, f = sub(M, [m])
(Submodule over Integers with 1 generator and no relations
, Module homomorphism with
Domain: Submodule over Integers with 1 generator and no relations

Codomain: Free module of rank 3 over Integers)

julia> Q, g = quo(M, S)
(Quotient module over Integers with 2 generators and no relations
, Module homomorphism with
Domain: Free module of rank 3 over Integers
Codomain: Quotient module over Integers with 2 generators and no relations
)

julia> kernel(g)
(Submodule over Integers with 1 generator and no relations
, Module homomorphism with
Domain: Submodule over Integers with 1 generator and no relations

Codomain: Free module of rank 3 over Integers)

Images

image(f::Map(AbstractAlgebra.FPModuleHomomorphism))

Return a pair I, g consisting of the image object $I$ of the given module homomorphism $f$ (as a submodule of its codomain) and the canonical injection from the image into the codomain of $f$

M = FreeModule(ZZ, 3)

m = M([ZZ(1), ZZ(2), ZZ(3)])

S, f = sub(M, [m])
Q, g = quo(M, S)
K, k = kernel(g)

image(compose(k, g))

Preimages

preimage(f::Map(AbstractAlgebra.FPModuleHomomorphism),
      v::AbstractAlgebra.FPModuleElem{T}) where T <: RingElement

Return a preimage of $v$ under the homomorphism $f$, i.e. an element of the domain of $f$ that maps to $v$ under $f$. Note that this has no special mathematical properties. It is an element of the set theoretical preimage of the map $f$ as a map of sets, if one exists. The preimage is neither unique nor chosen in a canonical way in general. When no such element exists, an exception is raised.

M = FreeModule(ZZ, 3)

m = M([ZZ(1), ZZ(2), ZZ(3)])

S, f = sub(M, [m])
Q, g = quo(M, S)

m = rand(M, -10:10)
n = g(m)

p = preimage(g, n)

Inverses

Module isomorphisms can be cheaply inverted.

Base.invMethod.

inv(f::Map(ModuleIsomorphism))

Return the inverse map of the given module isomorphism. This is computed cheaply.

M = FreeModule(ZZ, 2)
N = matrix(ZZ, 2, 2, BigInt[1, 0, 0, 1])
f = ModuleIsomorphism(M, M, N)

g = inv(f)