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)).
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.
> 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]
> 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.
> 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 + 2Isomorphism 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) } }; trueSimilarity 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 ...
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.