# Elements of finitely presented graded modules#

AUTHORS:

• Robert R. Bruner, Michael J. Catanzaro (2012): Initial version.

• Sverre Lunoee–Nielsen and Koen van Woerden (2019-11-29): Updated the original software to Sage version 8.9.

• Sverre Lunoee–Nielsen (2020-07-01): Refactored the code and added new documentation and tests.

A module element of a finitely presented graded module over a connected graded algebra.

degree()#

The degree of self.

OUTPUT:

The integer degree of self or raise an error if the zero element.

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
sage: x = M.an_element(7)

sage: x
Sq(0,0,1)*g[0] + Sq(3,1)*g[1]
sage: x.degree()
7


The zero element has no degree:

sage: (x-x).degree()
Traceback (most recent call last):
...
ValueError: the zero element does not have a well-defined degree

dense_coefficient_list(order=None)#

Return a list of all coefficients of self.

INPUT:

• order – (optional) an ordering of the basis indexing set

Note that this includes all of the coefficients, not just the nonzero ones. By default they appear in the same order as the module generators.

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: A = SteenrodAlgebra()
sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
sage: x = M([Sq(1), 1])
sage: x.dense_coefficient_list()
[Sq(1), 1]
sage: y = Sq(2) * M.generator(1)
sage: y.dense_coefficient_list()
[0, Sq(2)]

lift_to_free()#

Return the lift of self to the free module F, where self is in a quotient of F.

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
sage: x = M([Sq(1), 1])
sage: x
Sq(1)*g[0] + g[1]
sage: x.parent()
Finitely presented left module on 2 generators and 1 relation over mod 2 Steenrod algebra, milnor basis
sage: x.lift_to_free()
Sq(1)*g[0] + g[1]
sage: x.lift_to_free().parent()
Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis

normalize()#

A normalized form of self.

OUTPUT:

An instance representing the same module element as self in normalized form.

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: M.<a0,b2,c4> = FPModule(SteenrodAlgebra(2), [0,2,4], [[Sq(4),Sq(2),0]])

sage: m = M((Sq(6), 0, Sq(2))); m
Sq(6)*a0 + Sq(2)*c4
sage: m.normalize()
Sq(6)*a0 + Sq(2)*c4
sage: m == m.normalize()
True

sage: n = M((Sq(4), Sq(2), 0)); n
Sq(4)*a0 + Sq(2)*b2
sage: n.normalize()
0
sage: n == n.normalize()
True

vector_presentation()#

A coordinate vector representing self when it is non-zero.

These are coordinates with respect to the basis chosen by basis_elements(). When the element is zero, it has no well defined degree, and this function returns None.

OUTPUT:

A vector of elements in the ground ring of the algebra for this module when this element is non-zero. Otherwise, the value None.

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
sage: M.<m0,m1> = FPModule(A2, (0,1))

sage: x = M.an_element(7)
sage: v = x.vector_presentation(); v
(1, 0, 0, 0, 0, 1, 0)
sage: type(v)
<class 'sage.modules.vector_mod2_dense.Vector_mod2_dense'>

sage: V = M.vector_presentation(7)
sage: v in V
True

sage: M.element_from_coordinates(v, 7) == x
True


We can use the basis for the module elements in the degree of $$x$$, together with the coefficients $$v$$ to recreate the element $$x$$:

sage: basis = M.basis_elements(7)
sage: x_ = sum( [c*b for (c,b) in zip(v, basis)] ); x_
Sq(0,0,1)*m0 + Sq(3,1)*m1
sage: x__ = M.linear_combination(zip(basis, v)); x__
Sq(0,0,1)*m0 + Sq(3,1)*m1
sage: x == x_ == x__
True