Throughout this part of the chapter, when discussing the set of all R-homomorphisms from the R-module M into the R-module N, it will be assumed that R is a commutative ring. We further assume that M and N are free R-modules and that bases for these modules are present. The module HomR(M, N) will be identified with the module of m x n matrices over R. Thus, an element of HomR(M, N) is represented as a matrix relative to the bases of the generic modules corresponding to M and N. For this reason, we will refer to these modules as matrix modules.
We remind the reader that submodules of HomR(M, N) are always presented in embedded form. If the user wishes to have submodules presented in reduced form then he/she should use the natural isomorphism between R(m x n) and R(mn).
It should be noted that essentially operation defined for tuple modules, their elements and submodules applies to matrix modules. Thus, all of the operations discussed earlier in this chapter apply to matrix modules.
The modules M and N may themselves be matrix modules. In this case, the resulting matrix module has either a right or left action and an element belonging to it transforms a (homomorphism) element of M into a (homomorphism) element of N.
The function Reduce may be used to construct for a matrix module H the matrix module H' equivalent to H whose elements are with respect to the actual bases of the domain and codomain of elements of H (not the generic bases of the domain and codomain).
If M is the tuple module R(m) and N is the tuple module R(n), create the module HomR(M, N) as the (R, R)-bimodule R(m x n), represented as the set of all m x n matrices over R. The module is created with the standard basis, {Eij | i = 1 ..., m, j = 1 ..., n}, where Eij is the matrix having a 1 in the (i, j)-th position and zeros elsewhere.
Given a ring R and positive integers m and n, construct H = Hom(M, N), where M = R(m) and N = R(n), as the free (R, R)-bimodule R(m x n), consisting of all m x n matrices over R. The module is created with the standard basis, {Eij | i = 1 ..., m, j = 1 ..., m}. Note that the modules M and N are created by this function and may be accessed as Domain(H) and Codomain(H), respectively.
> F2 := GaloisField(2); > V := VectorSpace(F2, 3); > W := VectorSpace(F2, 4); > M := Hom(V, W); > M; Full KMatrixSpace of 3 by 4 matrices over GF(2)
Suppose M is a matrix module over the coefficient ring R whose elements are a by b matrices and have domain D and codomain C. Suppose also that N is a matrix module over the coefficient ring R whose elements are a by c matrices and have domain D and codomain C'. Then the homomorphism module H = Hom(M, N) with right multiplication action exists and consists of all b by c matrices over R which multiply an element of M on the right to yield an element of N. This function constructs H explicitly. The domain of elements of H is then M and the codomain of elements of H is N and the elements are b by c matrices over R which multiply an element of M on the right to yield an element of N. Note that if M and N are proper submodules of their respective generic modules, then H may be a proper submodule of its generic module, and the correct basis of H will be explicitly constructed.
Suppose M is a matrix module over the coefficient ring R whose elements are a by c matrices and have domain D and codomain C. Suppose also that N is a matrix module over the coefficient ring R whose elements are b by c and have domain D' and codomain C. Then the homomorphism module H = Hom(M, N) with left multiplication action exists and consists of all b by a matrices over R which multiply an element of M on the left to yield an element of N. This function constructs H explicitly. The domain of elements of H is then M and the codomain of elements of H is N and the elements are b by a matrices over R which multiply an element of M on the right to yield an element of N. Note that if M and N are proper submodules of their respective generic modules, then H may be a proper submodule of its generic module, and the correct basis of H will be explicitly constructed.
> Q := RationalField(); > H1 := sub<RMatrixSpace(Q, 2, 3) | [1,2,3, 4,5,6], [0,0,1, 1,3,3]>; > H2 := sub<RMatrixSpace(Q, 2, 4) | [6,5,7,1, 15,14,16,4], [0,0,0,0, 1,2,3,4]>; > H := Hom(H1, H2, "right"); > H: Maximal; KMatrixSpace of 3 by 4 matrices and dimension 1 over Rational Field Echelonized basis: [ 1 2 3 4] [-1/2 -1 -3/2 -2] [ 0 0 0 0] > H1.1 * H.1; [ 0 0 0 0] [3/2 3 9/2 6] > H1.1 * H.1 in H2; true > Image(H.1): Maximal; KMatrixSpace of 2 by 4 matrices and dimension 1 over Rational Field Echelonized basis: [0 0 0 0] [1 2 3 4] > Kernel(H.1): Maximal; KMatrixSpace of 2 by 3 matrices and dimension 1 over Rational Field Echelonized basis: [ 1 2 6] [ 7 14 15] > H1 := sub<RMatrixSpace(Q,2,3) | [1,2,3, 4,5,6]>; > H2 := sub<RMatrixSpace(Q,3,3) | [1,2,3, 5,7,9, 4,5,6]>; > H := Hom(H1, H2, "left"); > H: Maximal; KMatrixSpace of 3 by 2 matrices and dimension 1 over Rational Field Echelonized basis: [1 0] [1 1] [0 1] > Image(H.1); KMatrixSpace of 3 by 3 matrices and dimension 1 over Rational Field > Kernel(H.1); KMatrixSpace of 2 by 3 matrices and dimension 0 over Rational Field
Given a sequence Q of k independent matrices each lying in a matrix space H = Hom(M, N), where M = R(m) and N = R(n), construct the subspace of H of dimension k whose basis is Q. The basis is echelonized internally but all functions which depend on the basis of the matrix space (e.g. Coordinates) will use the given basis Q.
Given a sequence Q of k independent matrices each lying in a matrix space H = Hom(M, N), where M = K(m) and N = K(n), with K a field, construct the subspace of H of dimension k whose basis is Q. The basis is echelonized internally but all functions which depend on the basis of the matrix space (e.g. Coordinates) will use the given basis Q.
If M is the free R-module R(m), create the matrix algebra Matm(R). The algebra is created with the standard basis, {Eij | i = 1 ..., m, j = 1 ..., m}, where Eij is the matrix having a 1 in the (i, j)-th position and zeros elsewhere.
> Q := RationalField(); > R4 := RModule(Q, 4); > M := EndomorphismAlgebra(R4); > M; Full Matrix Algebra of degree 4 over Rational Field
Suppose H is a matrix module whose elements have domain A and codomain B. Suppose first that A and B are tuple modules (R-spaces, R-modules, or RG-modules) and that A has degree a and dimension d while B has degree b and dimension e. (For the reduced cases (R-modules or RG-modules), a equals d and b equals e). The elements of H have the natural representation with respect to the standard embedded basis of the generic modules of A and B. Thus H has degree a by b. So one can multiply a 1 by a vector of A directly by an element h of H (in the natural matrix way) to get a 1 by b vector of B. Now suppose A and B are in the embedded form (R-space) and h is in H. Then h is an a by b matrix but there is a corresponding d by e matrix h' which gives the same transformation of h from A to B but is with respect to the bases of A and B. We call h' the reduced form of h. Also, there is the reduced module H' corresponding to H. This function constructs the reduced module H' corresponding to H, together with the epimorphism f from H onto H'. Note that if A and B are in reduced form, then H' is the same as H.Suppose secondly that A and B are matrix modules themselves. Suppose A = Hom(D1, C1), B = Hom(D1, C2), and H = Hom(A, B) with the right multiplication action. Suppose also that A has degree r by s and dimension d while B has degree r by t, and dimension e. Then H would have degree s by t so an element h of H would be s by t and would multiply a r by s element of A on the right to yield an r by t element of B. Then the reduced matrix h' corresponding to a matrix h of H would be a d by e matrix corresponding to the bases of A and B. This function similarly constructs the reduced module H' corresponding to H, together with the epimorphism f from H onto H'. Note also that in this case the domain and codomains of H' are the generic R-spaces (tuple modules) corresponding to A (of dimension d) and B (of dimension e). Similarly, for the left multiplication action there is the corresponding reduced module constructed in the obvious way.
Note also that the kernel of the epimorphism f is the submodule of H which consists of all matrices which transform all elements of A to the zero element of B.
> V1 := sub<VectorSpace(GF(3), 3) | [1,0,1], [0,1,2]>; > V2 := sub<VectorSpace(GF(3), 4) | [1,1,0,2], [0,0,1,2]>; > H := Hom(V1, V2); > H; KMatrixSpace of 3 by 4 matrices and dimension 8 over GF(3) > R, f := Reduce(H); > R; Full KMatrixSpace of 2 by 2 matrices over GF(3) > H.1; [1 0 0 0] [0 1 0 2] [0 1 0 2] > f(H.1); [1 0] [0 0] > V1.1; (1 0 1) > V1.1 * H.1; (1 1 0 2) > Coordinates(V2, V1.1 * H.1); [ 1, 0 ] > Coordinates(V2, V1.2 * H.1); [ 0, 0 ] > Kernel(f): Maximal; KMatrixSpace of 3 by 4 matrices and dimension 4 over GF(3) Echelonized basis: [1 0 0 0] [2 0 0 0] [2 0 0 0] [0 1 0 0] [0 2 0 0] [0 2 0 0] [0 0 1 0] [0 0 2 0] [0 0 2 0] [0 0 0 1] [0 0 0 2] [0 0 0 2] > R.1@@f; [1 0 0 0] [0 1 0 2] [0 1 0 2]
> V1 := VectorSpace(GF(3), 2); > V2 := VectorSpace(GF(3), 3); > V3 := VectorSpace(GF(3), 4); > H1 := Hom(V1, V2); > H2 := Hom(V1, V3); > H := Hom(H1, H2, "right"); > H1; Full KMatrixSpace of 2 by 3 matrices over GF(3) > H2; Full KMatrixSpace of 2 by 4 matrices over GF(3) > H; Full KMatrixSpace of 3 by 4 matrices over GF(3) > R,f := Reduce(H); > R; KMatrixSpace of 6 by 8 matrices and dimension 12 over GF(3) > X := H.1; > X; [1 0 0 0] [0 0 0 0] [0 0 0 0] > f(X); [1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 1 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] > Domain(X); Full KMatrixSpace of 2 by 3 matrices over GF(3) > Domain(f(X)); Full Vector space of degree 6 over GF(3) > Image(X): Maximal; KMatrixSpace of 2 by 4 matrices and dimension 2 over GF(3) Echelonized basis: [1 0 0 0] [0 0 0 0] [0 0 0 0] [1 0 0 0] > Image(f(X)); Vector space of degree 8, dimension 2 over GF(3) Echelonized basis: (1 0 0 0 0 0 0 0) (0 0 0 0 1 0 0 0) > Kernel(X): Maximal; KMatrixSpace of 2 by 3 matrices and dimension 4 over GF(3) Echelonized basis: [0 1 0] [0 0 0] [0 0 1] [0 0 0] [0 0 0] [0 1 0] [0 0 0] [0 0 1] > Kernel(f(X)): Maximal; Vector space of degree 6, dimension 4 over GF(3) Echelonized basis: (0 1 0 0 0 0) (0 0 1 0 0 0) (0 0 0 0 1 0) (0 0 0 0 0 1)
Given the matrix bimodule M over the ring R, and the sequence Q = [a11, ..., a1n, a21, ..., a2n, ..., am1, ..., amn] whose terms are elements of the ring R, construct the m x n matrix[ a_11 a_12 ... a_1n ] [ a_21 a_22 ... a_2n ] [ ... ] [ ... ] [ a_m1 a_m2 ... a_mn ]as an element of M. In the context of the sub or quo constructors the coercion clause M ! may be omitted.
> Q := RationalField(); > R4 := RModule(Q, 4); > M := EndomorphismAlgebra(R4); > h4 := M ! [ 1/i : i in [1 .. 16 ] ]; > h4; [ 1 1/2 1/3 1/4] [ 1/5 1/6 1/7 1/8] [ 1/9 1/10 1/11 1/12] [1/13 1/14 1/15 1/16]
All operations that apply to elements of tuple modules also apply to elements of matrix modules. Here, we confine our discussion to those operations which are special to matrix modules.
Throughout this section, M is a submodule of R(m), N is a submodule of R(n) and a is a homomorphism belonging to HomR(M, N), where R is a Euclidean Domain.
See also the chapter on general matrices for many other functions applicable to matrices (e.g., EchelonForm).
Given an element u belonging to the module M, return the image of u under the homomorphism a as an element of the module N.
Given a homomorphism a belonging to a submodule of Hom(M, N), and a homomorphism b belonging to a submodule of Hom(N, P), return the composition of the homomorphisms a and b as an element of Hom(M, P). Note that if Hom(M, P) does not already exist, it will be created.
Given a homomorphism a belonging to a submodule of Hom(M, N) with M and N having the same dimension, return the inverse of a as an element of Hom(N, M).
Given a submodule S of the module Hom(M, N), return the module N.
The codomain N of the homomorphism a belonging to Hom(M, N).
The cokernel for the homomorphism a belonging to the module Hom(M, N).
The domain M of the submodule S belonging to the module Hom(M, N).
The domain M of the homomorphism a belonging to the module Hom(M, N).
The image of the homomorphism a belonging to the module H =Hom(M, N), returned as a submodule of N. Note that if the domain and codomain of a are matrix modules themselves, the image will be with respect to the appropriate action (right or left).
The kernel of the homomorphism a belonging to the module Hom(M, N), returned as a submodule of M. Note that if the domain and codomain of a are matrix modules themselves, the kernel will be with respect to the appropriate action (right or left).
Assuming the R-module M was created as a submodule of the module N, return the matrix defining the inclusion homomorphism φ : M -> N as an element of HomR(M, N). Thus φ gives the correspondence between elements of M (represented with respect to the standard basis of M) and elements for N.
The dimension of the image of the homomorphism a, i.e. the rank of a.
Returns true if the homomorphism a belonging to the module Hom(M, N) is a bijective mapping.
Returns true if the homomorphism a belonging to the module Hom(M, N) is an injective mapping.
Returns true if the homomorphism a belonging to the module HomR(M, N) is a surjective mapping.
> K<w> := GaloisField(8); > V3 := VectorSpace(K, 3); > V4 := VectorSpace(K, 4); > M := Hom(V4, V3); > A := M ! [1, w, w^5, 0, w^3, w^4, w, 1, w^6, w^3, 1, w^4 ]; > A; [ 1 w w^5] [ 0 w^3 w^4] [ w 1 w^6] [w^3 1 w^4] > Rank(A); 3 > Image(A); Full Vector space of degree 3 over GF(2^3) > Kernel(A); Vector space of degree 4, dimension 1 over GF(2^3) Echelonized basis: ( 1 w^5 1 1) > Cokernel(A); Vector space of degree 3, dimension 0 over GF(2^3)