Homomorphisms

Let \(M\) and \(N\) be \(A\)-modules where \(A\) is an algebra defined over a field \(K\). Then \({\operatorname{Hom}}_{A}(M\), \(N)\) consists of all \(K\)-homomorphisms from \(M\) to \(N\) which commute with the action of \(A\). The type of such (matrix) homomorphisms, called \(A\)-homs, is ModMatGrpElt.

Creating Homomorphisms and Hom Spaces

hom< M -> N | X >: ModRng, ModRng, ModMatElt -> Map

Given \(A\)-modules \(M\) and \(N\), create the (map) homomorphism from \(M\) to \(N\) given by matrix \(X\).

Hom(M, N): ModRng, ModRng -> ModMatRng

Given a matrix algebra \(A\) defined over a field and \(A\)-modules \(M\) and \(N\), construct the vector space of homomorphisms, \({\operatorname{Hom}}_K(M, N)\).

GHom(M, N): ModGrp, ModGrp -> ModMatGrp

Given \(K[G]\) modules \(M\) and \(N\), where \(K\) is a finite field or number field, construct the space of all \(KG\)-homomorphisms from \(M\) to \(N\). Note that GHom(M,N) = Fix(HomMod(M,N)).

GHomOverCentralizingField(M, N): ModGrp, ModGrp -> ModMatGrp
GHomOverCentralizingField(M, N): ModRng, ModRng -> ModRng

Let \(A\) be a matrix algebra defined over a finite field or number field. Given \(A\)-modules \(M\) and \(N\), construct \({\operatorname{Hom}}_{L[G]}(M\), \(N\)) as a subspace of \({\operatorname{Hom}}_K(M\), \(N\)), where \(L\) is the centralizing field of \(M\).

AHom(M, N): ModRng, ModRng -> ModMatRng

Let \(A\) be a matrix algebra defined over a finite field or number field. Given \(A\)-modules \(M\) and \(N\), construct the vector space of homomorphisms, \({\operatorname{Hom}}_A(M, N)\), as a submodule of \({\operatorname{Hom}}_K(M\), \(N\)).

HomMod(M, N): ModGrp, ModGrp -> ModGrp

Let \(M\) and \(N\) be two \(K[G]\)-modules where \(K\) is a finite field or a number field. This function constructs the \(K[G]\)-module of all \(K\)-homomorphisms from \(M\) to \(N\). The action of \(G\) on the module is given by \((m)(\alpha * g) := ((m * g^{-1})\alpha) * g\) for \(m \in M\), \(g \in G\), and \(\alpha \in\)Hom(M,N).

H ! f: ModMatRng, Map -> ModMatRngElt

Given the matrix space \(H\), which is \({\operatorname{Hom}}_A(M\), \(N)\) for \(A\)-modules \(M\) and \(N\), together with a homomorphism \(f\) from \(M\) to \(N\), create the matrix corresponding to the map \(f\).

IsModuleHomomorphism(X): ModMatFldElt -> BoolElt

Given a matrix \(X\) belonging to \({\operatorname{Hom}}_K(M, N)\), where \(M\) and \(N\) are \(A\)-modules, return true if \(X\) is an \(A\)-homomorphism.

Example: Hom Space of Modules for a Soluble Group (ex-1d057a)

Run in calculator (opens in a new tab)

We construct a \(12\)-dimensional module \(M\) and a \(9\)-dimensional submodule \(P\) of \(M\) for a soluble group of order \(648\) over \({\bf F}_{3}\). We then construct \(H = {\operatorname{Hom}}_A(M, N)\) and perform map operations on elements of \(H\).

> G := PermutationGroup< 12 |
>         (1,6,7)(2,5,8,3,4,9)(11,12),
>         (1,3)(4,9,12)(5,8,10,6,7,11) >;
> K := GF(3);
> P := PermutationModule(G, K);
> M := sub< P | [1,0,0,0,0,1,0,0,1,0,0,1] >;
> M;
GModule M of dimension 9 over GF(3)
> H := AHom(P, M);
> H: Maximal;
KMatrixSpace of 12 by 9 GHom matrices and dimension 2 over GF(3)
Echelonized basis:
[1 1 1 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0 0]
[0 0 0 1 1 0 0 0 0]
[0 0 0 1 1 0 0 0 0]
[0 0 0 1 1 0 0 0 0]
[0 0 0 0 0 1 1 0 0]
[0 0 0 0 0 1 1 0 0]
[0 0 0 0 0 1 1 0 0]
[0 0 0 0 0 0 0 1 1]
[0 0 0 0 0 0 0 1 1]
[0 0 0 0 0 0 0 1 1]

[0 0 0 1 1 1 1 1 1]
[0 0 0 1 1 1 1 1 1]
[0 0 0 1 1 1 1 1 1]
[1 1 1 0 0 1 1 1 1]
[1 1 1 0 0 1 1 1 1]
[1 1 1 0 0 1 1 1 1]
[1 1 1 1 1 0 0 1 1]
[1 1 1 1 1 0 0 1 1]
[1 1 1 1 1 0 0 1 1]
[1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 0 0]
> // We write down a random homomorphism from M to P.
> f := 2*H.1 + H.2;
> f;
[2 2 2 1 1 1 1 1 1]
[2 2 2 1 1 1 1 1 1]
[2 2 2 1 1 1 1 1 1]
[1 1 1 2 2 1 1 1 1]
[1 1 1 2 2 1 1 1 1]
[1 1 1 2 2 1 1 1 1]
[1 1 1 1 1 2 2 1 1]
[1 1 1 1 1 2 2 1 1]
[1 1 1 1 1 2 2 1 1]
[1 1 1 1 1 1 1 2 2]
[1 1 1 1 1 1 1 2 2]
[1 1 1 1 1 1 1 2 2]
> Ker := Kernel(f);
> Ker;
GModule Ker of dimension 8 with base ring GF(3)

If we print the morphism associated with \(Ker\), we see generators for \(Ker\) as a submodule of \(P\).

> Morphism(Ker, P);
[1 0 2 0 0 0 0 0 0 0 0 0]
[0 1 2 0 0 0 0 0 0 0 0 0]
[0 0 0 1 0 2 0 0 0 0 0 0]
[0 0 0 0 1 2 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 2 0 0 0]
[0 0 0 0 0 0 0 1 2 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 2]
[0 0 0 0 0 0 0 0 0 0 1 2]
> // Examine the image of f and its morphism to P.
> Im := Image(f);
> Im;
GModule Im of dimension 4 with base ring GF(3)
> Morphism(Im, P);
[1 1 1 0 0 0 0 0 0 0 0 0]
[0 0 0 1 1 1 0 0 0 0 0 0]
[0 0 0 0 0 0 1 1 1 0 0 0]
[0 0 0 0 0 0 0 0 0 1 1 1]

Run in calculator (opens in a new tab)

Example: Endomorphisms of a G-Homomorphism Module (ex-b3e6b8)

Run in calculator (opens in a new tab)

We construct a \(G\)-homomorphism module \(H_1\) for a \(G\)-module and then the homomorphism module \(H = {\operatorname{Hom}}(H_1, H_1)\) with right matrix action which is equivalent to (the right representation of) the endomorphism module of \(H\).

> P := GModule(CyclicGroup(11), GF(3));
> F := Constituents(P);
> F;
[
    GModule of dimension 1 over GF(3),
    GModule of dimension 5 over GF(3),
    GModule of dimension 5 over GF(3)
]
> H1 := GHom(P, F[2]);
> H1;
KMatrixSpace of 2 by 3 matrices and dimension 1 over Rational Field
> H := Hom(H1, H1, "right");
> H: Maximal;
KMatrixSpace of 5 by 5 matrices and dimension 5 over GF(3)
Echelonized basis:

[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]

[0 1 0 0 0]
[1 1 1 2 1]
[2 0 2 1 1]
[2 1 0 0 0]
[0 2 1 0 0]

[0 0 1 0 0]
[2 0 2 1 1]
[2 2 2 2 2]
[2 0 1 0 2]
[1 0 1 2 1]

[0 0 0 1 0]
[2 1 0 0 0]
[2 0 1 0 2]
[2 2 1 2 2]
[2 1 1 0 1]

[0 0 0 0 1]
[0 2 1 0 0]
[1 0 1 2 1]
[2 1 1 0 1]
[2 1 0 0 2]

Run in calculator (opens in a new tab)

Isomorphism and Similarity

Isomorphism

IsIsomorphic(M, N): ModRng, ModRng -> ModRng, ModRng, BoolElt, AlgMatElt

Let \(A\) be a matrix algebra over a finite field or a number field. This intrinsic returns true if the \(A\)-modules \(M\) and \(N\) are isomorphic, false otherwise. If \(M\) and \(N\) are isomorphic, the function also returns a matrix \(T\) such that \(M^{T} = N\). Note that the action generators of \(M\) and \(N\) must match, so the function effectively determines whether there is an invertible matrix \(T\) such that T^-1*ActionGenerator(M, i)*T equals ActionGenerator(N, i) for each \(i\). This test uses a fast algorithm due to Brooksbank and Luks.

SummandIsomorphism(M, N): ModRng, ModRng -> ModRng, ModRng, Map, Map

Let \(A\) be a matrix algebra over a finite field or a number field and let \(M\) and \(N\) be \(A\)-modules. This intrinsic determines the unique maximal, isomorphic summands of module \(M\) and \(N\). These are returned together with the inverse isomorphisms between them. The algorithm used is due to Brooksbank and Luks.

Similarity of Cyclic Algebras and their Modules

Magma supports similarity testing of modules over cyclic associative rings and cyclic groups. Module similarity over general rings and groups is graph isomorphism hard. The algorithms used are based on [BW15].

IsCyclic(R): AlgAss -> BoolElt, AlgAssElt

Let \(A\) be a matrix algebra over a finite field and let \(M\) be an \(A\)-module. This intrinsic decides if the algebra is generated by a single element and, if so, return such a generator.

IsSimilar(M, N): ModRng, ModRng -> BoolElt, Map

Let \(A\) be a matrix algebra over a finite field or a number field and let \(M\) and \(N\) be \(A\)-modules. This intrinsic decides if modules \(M\) and \(N\) are similar. Note that one of the two modules must have a cyclic coefficient ring.

Example: Similarity versus Isomorphism of Modules (ex-693618)

Run in calculator (opens in a new tab)

In Magma modules of a group or algebra are defined by the action of a fixed generating set of the algebra. Therefore isomorphism of modules in Magma assumes the given modules have been specified by the same generating set. This can lead to a stricter interpretation of isomorphism than perhaps intended in some situations. Consider the following example comparing two 1-dimensional vector spaces over the field \({\bf F}_{9}\).

> SetSeed(1);
> R := MatrixAlgebra(GF(3),2);
> A := sub<R| [R!1, R![0,1,2,0]]>;
> B := sub<R| [R!1, R![1,1,2,1]]>;
> A eq B;   // Both are a field GF(9).
true
> M := RModule(A); // A 1-dim. GF(9) vector space.
> N := RModule(B); // A 1-dim. GF(9) vector space.
> IsIsomorphic(M,N);
false
> MinimalPolynomial(A.2);
$.1^2 + 1
> MinimalPolynomial(B.2);
$.1^2 + $.1 + 2

Isomorphism of the two modules \(M\) and \(N\) failed because the two vector spaces are specified by different generators of \({\bf F}_{9}\), as confirmed by the minimum polynomials of the generators. Module similarity allows the comparison of modules specified by different generating sets, so in this example theses to vector spaces can be proven equivalent.

> IsSimilar(M,N);
true
[2 0]
[0 2]

Similarity can be used to compare modules given by algebras that are conjugate, but perhaps not equal.

> p := RandomIrreduciblePolynomial(GF(101), 10);
> q := RandomIrreduciblePolynomial(GF(101), 10);
> X := CompanionMatrix(p);
> Y := CompanionMatrix(q);
> A := sub<Parent(X)|[X]>;      // Finite field of size 101^10
> B := sub<Parent(Y)|[Y]>;      // Finite field of size 101^10
> M := RModule(A);              // 1-dim vector space over A.
> N := RModule(B);              // 1-dim vector space over B.
> IsIsomorphic(M,N);            // Not isomorphic as A and B are distinct.
false
> cyc, f := IsSimilar(M,N);     // But similar as A is isomorphic to B.
> // f conjugates A into B?
> forall { a : a in Generators (A) | f * a * f^-1 in B };
true
> // and f is a semilinear transform M->N ?
> forall{ i : i in [1..Ngens (M)] | forall { j : j in [1..Ngens (A)] | (Vector
> (M.i * A.j) * f) eq (Vector(M.i)*f)*(f^(-1)*A.j*f) } };
true

Similarity is presently available for cyclic algebras. This can be tested and a generator returned.

> M := RandomMatrix(GF(9), 100, 100);
> A := sub< Parent(M) | [ M^(Random(50)) : i in [1..10]] >;
> Ngens(A);
> IsCyclic(A);
true
...

Run in calculator (opens in a new tab)

The Endomorphism Ring

EndomorphismAlgebra(M): ModRng -> AlgMat
EndomorphismRing(M): ModRng -> AlgMat
Direct: BoolElt                    Default: false

Given an \(A\)-module \(M\) over \(K\), where \(K\) is a finite field or a number field, return the endomorphism ring \({\operatorname{End}}_A(M)\) of \(M\) as a subring of the complete matrix ring \(K^{(n\times n)}\).

CentreOfEndomorphismRing(M): ModRng -> AlgMat

Given an \(A\)-module \(M\) with base ring \(K\), where \(K\) is a finite field or a number field, return the centre of the endomorphism ring \({\operatorname{End}}_A(M)\) of \(M\) as a subring of the complete matrix ring \(K^{(n\times n)}\). This is equivalent to Centre(EndomorphismRing(M)) but will often be much faster.

AutomorphismGroup(M): ModRng -> GrpMat

Given an \(A\)-module \(M\) with base ring \(K\), where \(K\) is a finite field or a number field, return the automorphism group \({\operatorname{Aut}}(M)\) of \(M\) as a subgroup \(G\) of the general linear group \(GL(n, K)\). In fact, \(G\) is the group of units of \({\operatorname{End}}(M)\).

Example: Endomorphism Ring of a Permutation Module (ex-d24d44)

Run in calculator (opens in a new tab)

We construct the endomorphism ring for a permutation module over \({\bf F}_{3}\) for a soluble group of order \(648\).

> G := PermutationGroup< 12 |
>         (1,6,7)(2,5,8,3,4,9)(11,12),
>         (1,3)(4,9,12)(5,8,10,6,7,11) >;
> P := PermutationModule(G, GF(3));
> time End := EndomorphismAlgebra(P);
Time: 0.000
> End;
Matrix Algebra of degree 12 and dimension 3 over GF(3)

Thus, the permutation module \(P\) has \(27\) endomorphisms.

> time Aut := AutomorphismGroup(P);
Time: 0.010
> Aut;
MatrixGroup(12, GF(3))
Generators:
    [1 0 0 1 1 1 1 1 1 1 1 1]
    [0 1 0 1 1 1 1 1 1 1 1 1]
    [0 0 1 1 1 1 1 1 1 1 1 1]
    [1 1 1 1 0 0 1 1 1 1 1 1]
    [1 1 1 0 1 0 1 1 1 1 1 1]
    [1 1 1 0 0 1 1 1 1 1 1 1]
    [1 1 1 1 1 1 1 0 0 1 1 1]
    [1 1 1 1 1 1 0 1 0 1 1 1]
    [1 1 1 1 1 1 0 0 1 1 1 1]
    [1 1 1 1 1 1 1 1 1 1 0 0]
    [1 1 1 1 1 1 1 1 1 0 1 0]
    [1 1 1 1 1 1 1 1 1 0 0 1]

    [2 1 1 0 0 0 0 0 0 0 0 0]
    [1 2 1 0 0 0 0 0 0 0 0 0]
    [1 1 2 0 0 0 0 0 0 0 0 0]
    [0 0 0 2 1 1 0 0 0 0 0 0]
    [0 0 0 1 2 1 0 0 0 0 0 0]
    [0 0 0 1 1 2 0 0 0 0 0 0]
    [0 0 0 0 0 0 2 1 1 0 0 0]
    [0 0 0 0 0 0 1 2 1 0 0 0]
    [0 0 0 0 0 0 1 1 2 0 0 0]
    [0 0 0 0 0 0 0 0 0 2 1 1]
    [0 0 0 0 0 0 0 0 0 1 2 1]
    [0 0 0 0 0 0 0 0 0 1 1 2]

    [0 1 1 0 0 0 0 0 0 0 0 0]
    [1 0 1 0 0 0 0 0 0 0 0 0]
    [1 1 0 0 0 0 0 0 0 0 0 0]
    [0 0 0 0 1 1 0 0 0 0 0 0]
    [0 0 0 1 0 1 0 0 0 0 0 0]
    [0 0 0 1 1 0 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 1 1 0 0 0]
    [0 0 0 0 0 0 1 0 1 0 0 0]
    [0 0 0 0 0 0 1 1 0 0 0 0]
    [0 0 0 0 0 0 0 0 0 0 1 1]
    [0 0 0 0 0 0 0 0 0 1 0 1]
    [0 0 0 0 0 0 0 0 0 1 1 0]
> #Aut;
18
> IsAbelian(Aut);
true
> AbelianInvariants(Aut);
[ 3, 6 ]

Thus, the permutation module \(P\) has 18 automorphisms. The automorphism group is isomorphic to the abelian group \({\mathbb{Z}}_2 \times {\mathbb{Z}}_3 \times {\mathbb{Z}}_3\).

Run in calculator (opens in a new tab)