Construction of Elements

Contents

elt< M | a1, ..., an > : ModTupRng, List -> ModTupRngElt
Given a module M with base module S(n), and elements a1, ..., an belonging to S, construct the element m = (a1, ..., an) of M. Note that if m is not an element of M, an error will result.
M ! Q : ModTupRng, [RngElt] -> ModTupRngElt
Given the module M with base module S(n), and elements a1, ..., an belonging to S, construct the element m = (a1, ..., an) of M. Note that if m is not an element of M, an error will result.
CharacteristicVector(M, S) : ModRng, { RngIntElt } -> ModRngElt
Given a submodule M of the module R(n) together with a set S of integers lying in the interval [1, n], return the characteristic number of S as a vector of R.
Zero(M) : ModRng -> ModRngElt
M ! 0 : ModRng, RngIntElt -> ModRngElt
The zero element for the R-module M.
Random(M) : ModRng -> ModRngElt
Given a module M defined over a finite ring or field, return a random vector.

Example ModRng_Elements (H59E2)

We create the module of 4-tuples over the polynomial ring Z[x] and define various elements.
> P<x> := PolynomialRing(IntegerRing());
> M := RModule(P, 4);
> a := elt< M | 1+x, -x, 2+x, 0 >;
> a;
(x + 1    -x x + 2     0)
> b := M ! [ 1+x+x^2, 0, 1-x^7, 2*x ];
> b;
(x^2 + x + 1           0    -x^7 + 1         2*x)
> zero := M ! 0;
> zero;
(0 0 0 0)

Deconstruction of Elements

ElementToSequence(u) : ModTupRngElt -> [RngElt]
Eltseq(u) : ModTupRngElt -> [RngElt]
Given an element u belonging to the R-module M, return u in the form of a sequence Q of elements of R. Thus, if u is an element of R(n), then Q[i] = u[i], 1 ≤i ≤n, while if u is an element of R(m x n), then Q[(i - 1)n + j] = u[i, j], 1 ≤i ≤m, 1 ≤j ≤n.

Operations on Module Elements

Arithmetic
u + v : ModTupRngElt, ModTupRngElt -> ModTupRngElt
Sum of the elements u and v, where u and v lie in the same R-module M.
- u : ModTupRngElt -> ModTupRngElt
Additive inverse of the element u.
u - v : ModTupRngElt, ModTupRngElt -> ModTupRngElt
Difference of the elements u and v, where u and v lie in the same R-module M.
x * u : RngElt, ModTupRngElt -> ModTupRngElt
Given an element x belonging to a ring R, and an element u belonging to the left R-module M, return the (left) scalar product x * u as an element of M.
u * x : ModTupRngElt, RngElt -> ModTupRngElt
Given an element x belonging to a ring R, and an element u belonging to the right R-module M, return the (right) scalar product u * x as an element of M.
u / x : ModTupRngElt, RngElt -> ModTupRngElt
Given a non-zero element x belonging to a field K, and an element u belonging to the right K-module M, return the scalar product u * (1/x) as an element of M.
Indexing
u[i] : ModTupRngElt, RngIntElt -> RngElt
Given an element u belonging to a submodule M of the R-module R(n) and a positive integer i, 1 ≤i≤n, return the i-th component of u (as an element of the ring R).
u[i] := x : ModTupRngElt, RngIntElt, RngElt -> ModTupRngElt
Given an element u belonging to a submodule M of the R-module T = R(n), a positive integer i, 1 ≤i≤n, and an element x of the ring R, redefine the i-th component of u to be x. The parent of u is changed to T (since the modified element u need not lie in M).
Normalization
Normalize(u) : ModTupRngElt -> ModTupRngElt
Normalise(u) : ModTupRngElt -> ModTupRngElt
The element u must belong to an R-module, where R is either a field, the ring of integers or a univariate polynomial ring over a field. Assume that the vector u is non-zero. If R is a field then Normalize returns (1/a) * u, where a is the first non-zero component of u. If R is the ring of integers, Normalize returns ε * u, where ε is +1 if the first non-zero component of u is positive, and -1 otherwise. If R is the polynomial ring K[x], K a field, then Normalize returns (1/a) * u, where a is the leading coefficient of the first non-zero (polynomial) component of u. If u is the zero vector, it is returned as the value of this function.
Rotate(u, k) : ModTupRngElt, RngIntElt -> ModTupRngElt
Given a vector u, return the vector obtained from u by rotating by k coordinate positions.
Rotate(~u, k) : ModTupRngElt, RngIntElt ->
Given a vector u, destructively rotate u by k coordinate positions.

Example ModRng_Operations (H59E3)

We illustrate the use of the arithmetic operators for module elements by applying them to elements of the module of 4-tuples over the polynomial ring Z[x].
> P<x> := PolynomialRing(IntegerRing());
> M := RModule(P, 4);
> a :=  M ! [ 1+x, -x, 2+x, 0 ];
> b := M ! [ 1+x+x^2, 0, 1-x^7, 2*x ];
> a + b;
(x^2 + 2*x + 2    -x    -x^7 + x + 3    2*x)
> -a;
(-x - 1      x -x - 2      0)
> a - b;
(       -x^2          -x x^7 + x + 1        -2*x)
> (1-x + x^2)*a;
(x^3 + 1    -x^3 + x^2 - x    x^3 + x^2 - x + 2    0)
> a*(1-x);
(    -x^2 + 1      x^2 - x -x^2 - x + 2            0)
> a[3];
x + 2
> a[3] := x - 2;
> a;
(x + 1    -x x - 2     0)
> ElementToSequence(a - b);
[
    -x^2,
    -x,
    x^7 + x - 3,
    -2*x
]
> Support(a);
{ 1, 2, 3 }

Properties of Vectors

IsZero(u) : ModTupRngElt -> BoolElt
Returns true if the element u of the R-module M is the zero element.
Depth(v) : ModTupRngElt -> RngIntElt
The index of the first non-zero entry of the vector v (0 if none such).
Support(u) : ModTupRngElt -> { RngElt }
A set of integers giving the positions of the non-zero components of the vector u.
Weight(u) : ModTupRngElt -> RngIntElt
The number of non-zero components of the vector u.

Inner Products

(u, v) : ModTupRngElt, ModTupRngElt -> RngElt
InnerProduct(u, v) : ModTupRngElt, ModTupRngElt -> RngElt
Return the inner product of the vectors u and v with respect to the inner product defined on the space. If an inner product matrix F is given when the space is created, then this is defined to be u.F.vtr. Otherwise, this is simply u.vtr.
Norm(u) : ModTupRngElt -> RngElt
Return the norm product of the vector u with respect to the inner product defined on the space. If an inner product matrix F is given when the space is created, then this is defined to be u.F.utr. Otherwise, this is simply u.utr.
V2.28, 13 July 2023