|
Let M and N be A-modules where A is an algebra defined over
a field K. Then HomA(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.
Given A-modules M and N, create the (map) homomorphism from M to N
given by matrix X.
Given a matrix algebra A defined over a field and A-modules M and N,
construct the vector space of homomorphisms, HomK(M, N).
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) : ModRng, ModRng -> ModRng
Let A be a matrix algebra defined over a finite field or number field.
Given A-modules M and N, construct HomL[G](M, N) as a subspace
of HomK(M, N), where L is the centralizing field of M.
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,
HomA(M, N), as a submodule of HomK(M, N).
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)(α * g) := ((m * g - 1)α) * g for m ∈M, g ∈G,
and α ∈Hom(M,N).
Given the matrix space H, which is HomA(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.
Given a matrix X belonging to HomK(M, N), where M and N
are A-modules, return true if X is an A-homomorphism.
We construct a 12-dimensional module M and a 9-dimensional
submodule P of M for a soluble group of order 648 over GF(3).
We then construct H = 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]
We construct a G-homomorphism module H 1 for a G-module and then
the homomorphism module H = 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]
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 MT = 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.
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.
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].
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.
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.
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 GF(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 GF(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
...
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 EndA(M) of M as a subring of the
complete matrix ring K(n x n).
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 EndA(M)
of M as a subring of the complete matrix ring K(n x n).
This is equivalent to Centre(EndomorphismRing(M)) but will often
be much faster.
Given an A-module M with base ring K, where K is a finite field or
a number field, return the automorphism group 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 End(M).
We construct the endomorphism ring for a permutation module
over GF(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 Z2 x Z3 x Z3.
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|