Homomorphisms of finitely generated free graded left 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.

class sage.modules.fp_graded.free_morphism.FreeGradedModuleMorphism(parent, values)[source]#

Bases: FPModuleMorphism

Create a homomorphism from a finitely generated free graded module to a graded module.

INPUT:

  • parent – a homspace in the category of finitely generated free modules

  • values – a list of elements in the codomain; each element corresponds (by their ordering) to a module generator in the domain

EXAMPLES:

sage: from sage.modules.fp_graded.free_module import FreeGradedModule
sage: A = SteenrodAlgebra(2)
sage: F1 = FreeGradedModule(A, (4,5), names='b')
sage: F2 = FreeGradedModule(A, (3,4), names='c')
sage: F3 = FreeGradedModule(A, (2,3), names='d')
sage: H1 = Hom(F1, F2)
sage: H2 = Hom(F2, F3)
sage: f = H1((F2((Sq(4), 0)), F2((0, Sq(4)))))
sage: g = H2((F3((Sq(2), 0)), F3((Sq(3), Sq(2)))))
sage: g*f
Module morphism:
  From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
  To:   Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
  Defn: b[4] |--> (Sq(0,2)+Sq(3,1)+Sq(6))*d[2]
        b[5] |--> (Sq(1,2)+Sq(7))*d[2] + (Sq(0,2)+Sq(3,1)+Sq(6))*d[3]
>>> from sage.all import *
>>> from sage.modules.fp_graded.free_module import FreeGradedModule
>>> A = SteenrodAlgebra(Integer(2))
>>> F1 = FreeGradedModule(A, (Integer(4),Integer(5)), names='b')
>>> F2 = FreeGradedModule(A, (Integer(3),Integer(4)), names='c')
>>> F3 = FreeGradedModule(A, (Integer(2),Integer(3)), names='d')
>>> H1 = Hom(F1, F2)
>>> H2 = Hom(F2, F3)
>>> f = H1((F2((Sq(Integer(4)), Integer(0))), F2((Integer(0), Sq(Integer(4))))))
>>> g = H2((F3((Sq(Integer(2)), Integer(0))), F3((Sq(Integer(3)), Sq(Integer(2))))))
>>> g*f
Module morphism:
  From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
  To:   Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
  Defn: b[4] |--> (Sq(0,2)+Sq(3,1)+Sq(6))*d[2]
        b[5] |--> (Sq(1,2)+Sq(7))*d[2] + (Sq(0,2)+Sq(3,1)+Sq(6))*d[3]
degree()[source]#

The degree of self.

OUTPUT:

The degree of this homomorphism. Raise an error if this is the trivial homomorphism.

EXAMPLES:

sage: from sage.modules.fp_graded.free_module import FreeGradedModule
sage: A = SteenrodAlgebra(2)
sage: homspace = Hom(FreeGradedModule(A, (0,1)), FreeGradedModule(A, (0,)))
sage: N = homspace.codomain()
sage: values = [Sq(5)*N.generator(0), Sq(3,1)*N.generator(0)]
sage: f = homspace(values)
sage: f.degree()
5
>>> from sage.all import *
>>> from sage.modules.fp_graded.free_module import FreeGradedModule
>>> A = SteenrodAlgebra(Integer(2))
>>> homspace = Hom(FreeGradedModule(A, (Integer(0),Integer(1))), FreeGradedModule(A, (Integer(0),)))
>>> N = homspace.codomain()
>>> values = [Sq(Integer(5))*N.generator(Integer(0)), Sq(Integer(3),Integer(1))*N.generator(Integer(0))]
>>> f = homspace(values)
>>> f.degree()
5

The zero homomorphism has no degree:

sage: homspace.zero().degree()
Traceback (most recent call last):
...
ValueError: the zero morphism does not have a well-defined degree
>>> from sage.all import *
>>> homspace.zero().degree()
Traceback (most recent call last):
...
ValueError: the zero morphism does not have a well-defined degree
fp_module()[source]#

Create a finitely presented module from self.

OUTPUT:

The finitely presented module with presentation equal to self.

EXAMPLES:

sage: A = SteenrodAlgebra(2)
sage: F1 = A.free_graded_module([2])
sage: F2 = A.free_graded_module([0])
sage: v = F2([Sq(2)])
sage: pres = Hom(F1, F2)([v])
sage: M = pres.fp_module(); M
Finitely presented left module on 1 generator and 1 relation over
 mod 2 Steenrod algebra, milnor basis
sage: M.generator_degrees()
(0,)
sage: M.relations()
(Sq(2)*g[0],)

sage: from sage.modules.fp_graded.module import FPModule
sage: A = SteenrodAlgebra(2)
sage: F1 = A.free_graded_module((2,))
sage: F2 = FPModule(A, (0,), [[Sq(4)]])
sage: v = F2([Sq(2)])
sage: pres = Hom(F1, F2)([v])
sage: pres.fp_module()
Traceback (most recent call last):
...
ValueError: this is not a morphism between free modules
>>> from sage.all import *
>>> A = SteenrodAlgebra(Integer(2))
>>> F1 = A.free_graded_module([Integer(2)])
>>> F2 = A.free_graded_module([Integer(0)])
>>> v = F2([Sq(Integer(2))])
>>> pres = Hom(F1, F2)([v])
>>> M = pres.fp_module(); M
Finitely presented left module on 1 generator and 1 relation over
 mod 2 Steenrod algebra, milnor basis
>>> M.generator_degrees()
(0,)
>>> M.relations()
(Sq(2)*g[0],)

>>> from sage.modules.fp_graded.module import FPModule
>>> A = SteenrodAlgebra(Integer(2))
>>> F1 = A.free_graded_module((Integer(2),))
>>> F2 = FPModule(A, (Integer(0),), [[Sq(Integer(4))]])
>>> v = F2([Sq(Integer(2))])
>>> pres = Hom(F1, F2)([v])
>>> pres.fp_module()
Traceback (most recent call last):
...
ValueError: this is not a morphism between free modules