Homspaces between chain complexes#

Note that some significant functionality is lacking. Namely, the homspaces are not actually modules over the base ring. It will be necessary to enrich some of the structure of chain complexes for this to be naturally available. On other hand, there are various overloaded operators. __mul__ acts as composition. One can __add__, and one can __mul__ with a ring element on the right.

EXAMPLES:

sage: S = simplicial_complexes.Sphere(2)
sage: T = simplicial_complexes.Torus()
sage: C = S.chain_complex(augmented=True, cochain=True)
sage: D = T.chain_complex(augmented=True, cochain=True)
sage: G = Hom(C, D); G
Set of Morphisms
 from Chain complex with at most 4 nonzero terms over Integer Ring
   to Chain complex with at most 4 nonzero terms over Integer Ring
   in Category of chain complexes over Integer Ring

sage: S = simplicial_complexes.ChessboardComplex(3, 3)
sage: H = Hom(S,S)
sage: i = H.identity()
sage: x = i.associated_chain_complex_morphism(augmented=True); x
Chain complex morphism:
  From: Chain complex with at most 4 nonzero terms over Integer Ring
  To:   Chain complex with at most 4 nonzero terms over Integer Ring
sage: x._matrix_dictionary
{-1: [1],
  0: [1 0 0 0 0 0 0 0 0]
     [0 1 0 0 0 0 0 0 0]
     [0 0 1 0 0 0 0 0 0]
     [0 0 0 1 0 0 0 0 0]
     [0 0 0 0 1 0 0 0 0]
     [0 0 0 0 0 1 0 0 0]
     [0 0 0 0 0 0 1 0 0]
     [0 0 0 0 0 0 0 1 0]
     [0 0 0 0 0 0 0 0 1],
  1: [1 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 1 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 1 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 1 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 1 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 1 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 1 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 1 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 1 0]
     [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1],
  2: [1 0 0 0 0 0]
     [0 1 0 0 0 0]
     [0 0 1 0 0 0]
     [0 0 0 1 0 0]
     [0 0 0 0 1 0]
     [0 0 0 0 0 1]}

sage: S = simplicial_complexes.Sphere(2)
sage: A = Hom(S, S)
sage: i = A.identity()
sage: x = i.associated_chain_complex_morphism(); x
Chain complex morphism:
  From: Chain complex with at most 3 nonzero terms over Integer Ring
  To: Chain complex with at most 3 nonzero terms over Integer Ring
sage: y = x*4
sage: z = y*y
sage: y + z
Chain complex morphism:
  From: Chain complex with at most 3 nonzero terms over Integer Ring
  To: Chain complex with at most 3 nonzero terms over Integer Ring
sage: f = x._matrix_dictionary
sage: C = S.chain_complex()
sage: G = Hom(C, C)
sage: w = G(f)
sage: w == x
True
class sage.homology.chain_complex_homspace.ChainComplexHomspace(X, Y, category=None, base=None, check=True)#

Bases: Homset

Class of homspaces of chain complex morphisms.

EXAMPLES:

sage: T = SimplicialComplex([[1,2,3,4],[7,8,9]])
sage: C = T.chain_complex(augmented=True, cochain=True)
sage: G = Hom(C, C)
sage: G
Set of Morphisms
 from Chain complex with at most 5 nonzero terms over Integer Ring
   to Chain complex with at most 5 nonzero terms over Integer Ring
   in Category of chain complexes over Integer Ring
sage.homology.chain_complex_homspace.is_ChainComplexHomspace(x)#

Return True if and only if x is a morphism of chain complexes.

EXAMPLES:

sage: from sage.homology.chain_complex_homspace import is_ChainComplexHomspace
sage: T = SimplicialComplex([[1,2,3,4],[7,8,9]])
sage: C = T.chain_complex(augmented=True, cochain=True)
sage: G = Hom(C, C)
sage: is_ChainComplexHomspace(G)
True