Induced morphisms on homology#

This module implements morphisms on homology induced by morphisms of simplicial complexes. It requires working with field coefficients.

See InducedHomologyMorphism for documentation.

AUTHORS:

  • John H. Palmieri (2015.09)

class sage.homology.homology_morphism.InducedHomologyMorphism(map, base_ring=None, cohomology=False)#

Bases: Morphism

An element of this class is a morphism of (co)homology groups induced by a map of simplicial complexes. It requires working with field coefficients.

INPUT:

  • map – the map of simplicial complexes

  • base_ring – a field (optional, default QQ)

  • cohomology – boolean (optional, default False). If True, return the induced map in cohomology rather than homology.

Note

This is not intended to be used directly by the user, but instead via the method induced_homology_morphism().

EXAMPLES:

sage: S1 = simplicial_complexes.Sphere(1)
sage: H = Hom(S1, S1)
sage: f = H({0:0, 1:2, 2:1})  # f switches two vertices
sage: f_star = f.induced_homology_morphism(QQ, cohomology=True)
sage: f_star
Graded algebra endomorphism of Cohomology ring of Minimal triangulation of the 1-sphere over Rational Field
  Defn: induced by:
    Simplicial complex endomorphism of Minimal triangulation of the 1-sphere
      Defn: 0 |--> 0
            1 |--> 2
            2 |--> 1
sage: f_star.to_matrix(1)
[-1]
sage: f_star.to_matrix()
[ 1| 0]
[--+--]
[ 0|-1]

sage: T = simplicial_complexes.Torus()
sage: y = T.homology_with_basis(QQ).basis()[(1,1)]
sage: y.to_cycle()
(0, 5) - (0, 6) + (5, 6)

Since \((0,2) - (0,5) + (2,5)\) is a cycle representing a homology class in the torus, we can define a map \(S^1 \to T\) inducing an inclusion on \(H_1\):

sage: Hom(S1, T)({0:0, 1:2, 2:5})
Simplicial complex morphism:
  From: Minimal triangulation of the 1-sphere
  To: Minimal triangulation of the torus
  Defn: 0 |--> 0
        1 |--> 2
        2 |--> 5
sage: g = Hom(S1, T)({0:0, 1:2, 2: 5})
sage: g_star = g.induced_homology_morphism(QQ)
sage: g_star.to_matrix(0)
[1]
sage: g_star.to_matrix(1)
[-1]
[ 0]
sage: g_star.to_matrix()
[ 1| 0]
[--+--]
[ 0|-1]
[ 0| 0]
[--+--]
[ 0| 0]

We can evaluate such a map on (co)homology classes:

sage: H = S1.homology_with_basis(QQ)
sage: a = H.basis()[(1,0)]
sage: g_star(a)
-h_{1,0}

sage: T = S1.product(S1, is_mutable=False)
sage: diag = Hom(S1,T).diagonal_morphism()
sage: b,c = list(T.cohomology_ring().basis(1))
sage: diag_c = diag.induced_homology_morphism(cohomology=True)
sage: diag_c(b)
h^{1,0}
sage: diag_c(c)
h^{1,0}
base_ring()#

The base ring for this map

EXAMPLES:

sage: K = simplicial_complexes.Simplex(2)
sage: H = Hom(K,K)
sage: id = H.identity()
sage: id.induced_homology_morphism(QQ).base_ring()
Rational Field
sage: id.induced_homology_morphism(GF(13)).base_ring()
Finite Field of size 13
is_identity()#

True if this is the identity map on (co)homology.

EXAMPLES:

sage: S1 = simplicial_complexes.Sphere(1)
sage: H = Hom(S1, S1)
sage: flip = H({0:0, 1:2, 2:1})
sage: flip.induced_homology_morphism(QQ).is_identity()
False
sage: flip.induced_homology_morphism(GF(2)).is_identity()
True
sage: rotate = H({0:1, 1:2, 2:0})
sage: rotate.induced_homology_morphism(QQ).is_identity()
True
is_injective()#

True if this map is injective on (co)homology.

EXAMPLES:

sage: S1 = simplicial_complexes.Sphere(1)
sage: K = simplicial_complexes.Simplex(2)
sage: H = Hom(S1, K)
sage: f = H({0:0, 1:1, 2:2})
sage: f.induced_homology_morphism().is_injective()
False
sage: f.induced_homology_morphism(cohomology=True).is_injective()
True

sage: T = simplicial_complexes.Torus()
sage: g = Hom(S1, T)({0:0, 1:3, 2: 6})
sage: g_star = g.induced_homology_morphism(QQ)
sage: g.is_injective()
True
is_surjective()#

True if this map is surjective on (co)homology.

EXAMPLES:

sage: S1 = simplicial_complexes.Sphere(1)
sage: K = simplicial_complexes.Simplex(2)
sage: H = Hom(S1, K)
sage: f = H({0:0, 1:1, 2:2})
sage: f.induced_homology_morphism().is_surjective()
True
sage: f.induced_homology_morphism(cohomology=True).is_surjective()
False
to_matrix(deg=None)#

The matrix for this map.

If degree deg is specified, return the matrix just in that degree; otherwise, return the block matrix representing the entire map.

INPUT:

  • deg – (optional, default None) the degree

EXAMPLES:

sage: S1 = simplicial_complexes.Sphere(1)
sage: S1_b = S1.barycentric_subdivision()
sage: S1_b.set_immutable()
sage: d = {(0,): 0, (0,1): 1, (1,): 2, (1,2): 0, (2,): 1, (0,2): 2}
sage: f = Hom(S1_b, S1)(d)
sage: h = f.induced_homology_morphism(QQ)
sage: h.to_matrix(1)
[2]
sage: h.to_matrix()
[1|0]
[-+-]
[0|2]