Homsets 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.

class sage.modules.fp_graded.homspace.FPModuleHomspace(X, Y, category=None, base=None, check=True)[source]

Bases: Homset

Element[source]

alias of FPModuleMorphism

an_element(n=0)[source]

Create a homomorphism belonging to self.

INPUT:

  • n – (default: 0) an integer degree

OUTPUT: a module homomorphism of degree n

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: A = SteenrodAlgebra(2)
sage: HZ = FPModule(A, [0], relations=[[Sq(1)]])

sage: Hom(HZ, HZ).an_element(3)
Module endomorphism of Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
  Defn: g[0] |--> Sq(0,1)*g[0]
>>> from sage.all import *
>>> from sage.modules.fp_graded.module import FPModule
>>> A = SteenrodAlgebra(Integer(2))
>>> HZ = FPModule(A, [Integer(0)], relations=[[Sq(Integer(1))]])

>>> Hom(HZ, HZ).an_element(Integer(3))
Module endomorphism of Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
  Defn: g[0] |--> Sq(0,1)*g[0]
from sage.modules.fp_graded.module import FPModule
A = SteenrodAlgebra(2)
HZ = FPModule(A, [0], relations=[[Sq(1)]])
Hom(HZ, HZ).an_element(3)
basis_elements(n)[source]

Return a basis for the free module of degree n morphisms.

INPUT:

  • n – integer degree

OUTPUT: a basis for the set of all module homomorphisms of degree n

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: A = SteenrodAlgebra(2)
sage: Hko = FPModule(A, [0], relations=[[Sq(2)], [Sq(1)]])

sage: Hom(Hko, Hko).basis_elements(21)
[Module endomorphism of Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
   Defn: g[0] |--> (Sq(0,0,3)+Sq(0,2,0,1))*g[0],
 Module endomorphism of Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
   Defn: g[0] |--> Sq(8,2,1)*g[0]]
>>> from sage.all import *
>>> from sage.modules.fp_graded.module import FPModule
>>> A = SteenrodAlgebra(Integer(2))
>>> Hko = FPModule(A, [Integer(0)], relations=[[Sq(Integer(2))], [Sq(Integer(1))]])

>>> Hom(Hko, Hko).basis_elements(Integer(21))
[Module endomorphism of Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
   Defn: g[0] |--> (Sq(0,0,3)+Sq(0,2,0,1))*g[0],
 Module endomorphism of Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
   Defn: g[0] |--> Sq(8,2,1)*g[0]]
from sage.modules.fp_graded.module import FPModule
A = SteenrodAlgebra(2)
Hko = FPModule(A, [0], relations=[[Sq(2)], [Sq(1)]])
Hom(Hko, Hko).basis_elements(21)
identity()[source]

Return the identity homomorphism.

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
sage: L = FPModule(A2, [2,3], [[Sq(2),Sq(1)], [0,Sq(2)]])

sage: one = Hom(L, L).identity(); one
Module endomorphism of Finitely presented left module on 2 generators and 2 relations over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  Defn: g[2] |--> g[2]
        g[3] |--> g[3]

sage: e = L.an_element(5)
sage: e == one(e)
True
>>> from sage.all import *
>>> from sage.modules.fp_graded.module import FPModule
>>> A2 = SteenrodAlgebra(Integer(2), profile=(Integer(3),Integer(2),Integer(1)))
>>> L = FPModule(A2, [Integer(2),Integer(3)], [[Sq(Integer(2)),Sq(Integer(1))], [Integer(0),Sq(Integer(2))]])

>>> one = Hom(L, L).identity(); one
Module endomorphism of Finitely presented left module on 2 generators and 2 relations over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  Defn: g[2] |--> g[2]
        g[3] |--> g[3]

>>> e = L.an_element(Integer(5))
>>> e == one(e)
True
from sage.modules.fp_graded.module import FPModule
A2 = SteenrodAlgebra(2, profile=(3,2,1))
L = FPModule(A2, [2,3], [[Sq(2),Sq(1)], [0,Sq(2)]])
one = Hom(L, L).identity(); one
e = L.an_element(5)
e == one(e)

It is an error to call this function when the homset is not a set of endomorphisms:

sage: F = FPModule(A2, [1,3])
sage: Hom(F,L).identity()
Traceback (most recent call last):
...
TypeError: this homspace does not consist of endomorphisms
>>> from sage.all import *
>>> F = FPModule(A2, [Integer(1),Integer(3)])
>>> Hom(F,L).identity()
Traceback (most recent call last):
...
TypeError: this homspace does not consist of endomorphisms
F = FPModule(A2, [1,3])
Hom(F,L).identity()

An example with free graded modules:

sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
sage: L = A2.free_graded_module((2,3))
sage: H = Hom(L, L)
sage: H.identity()
Module endomorphism of Free graded left module on 2 generators
 over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  Defn: g[2] |--> g[2]
        g[3] |--> g[3]
>>> from sage.all import *
>>> A2 = SteenrodAlgebra(Integer(2), profile=(Integer(3),Integer(2),Integer(1)))
>>> L = A2.free_graded_module((Integer(2),Integer(3)))
>>> H = Hom(L, L)
>>> H.identity()
Module endomorphism of Free graded left module on 2 generators
 over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  Defn: g[2] |--> g[2]
        g[3] |--> g[3]
A2 = SteenrodAlgebra(2, profile=(3,2,1))
L = A2.free_graded_module((2,3))
H = Hom(L, L)
H.identity()
zero()[source]

Create the trivial homomorphism in self.

EXAMPLES:

sage: from sage.modules.fp_graded.module import FPModule
sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
sage: F = FPModule(A2, [1,3])
sage: L = FPModule(A2, [2,3], [[Sq(2),Sq(1)], [0,Sq(2)]])

sage: z = Hom(F, L).zero()
sage: z(F.an_element(5))
0
sage: z(F.an_element(23))
0
>>> from sage.all import *
>>> from sage.modules.fp_graded.module import FPModule
>>> A2 = SteenrodAlgebra(Integer(2), profile=(Integer(3),Integer(2),Integer(1)))
>>> F = FPModule(A2, [Integer(1),Integer(3)])
>>> L = FPModule(A2, [Integer(2),Integer(3)], [[Sq(Integer(2)),Sq(Integer(1))], [Integer(0),Sq(Integer(2))]])

>>> z = Hom(F, L).zero()
>>> z(F.an_element(Integer(5)))
0
>>> z(F.an_element(Integer(23)))
0
from sage.modules.fp_graded.module import FPModule
A2 = SteenrodAlgebra(2, profile=(3,2,1))
F = FPModule(A2, [1,3])
L = FPModule(A2, [2,3], [[Sq(2),Sq(1)], [0,Sq(2)]])
z = Hom(F, L).zero()
z(F.an_element(5))
z(F.an_element(23))

Example with free modules:

sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
sage: F = A2.free_graded_module((1,3))
sage: L = A2.free_graded_module((2,3))
sage: H = Hom(F, L)
sage: H.zero()
Module morphism:
  From: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  To:   Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  Defn: g[1] |--> 0
        g[3] |--> 0
>>> from sage.all import *
>>> A2 = SteenrodAlgebra(Integer(2), profile=(Integer(3),Integer(2),Integer(1)))
>>> F = A2.free_graded_module((Integer(1),Integer(3)))
>>> L = A2.free_graded_module((Integer(2),Integer(3)))
>>> H = Hom(F, L)
>>> H.zero()
Module morphism:
  From: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  To:   Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
  Defn: g[1] |--> 0
        g[3] |--> 0
A2 = SteenrodAlgebra(2, profile=(3,2,1))
F = A2.free_graded_module((1,3))
L = A2.free_graded_module((2,3))
H = Hom(F, L)
H.zero()