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)
S1 = simplicial_complexes.Sphere(1)
H = Hom(S1, S1)
f = H({0:0, 1:2, 2:1})  # f switches two vertices
f_star = f.induced_homology_morphism(QQ, cohomology=True)
f_star
f_star.to_matrix(1)
f_star.to_matrix()
T = simplicial_complexes.Torus()
y = T.homology_with_basis(QQ).basis()[(1,1)]
y.to_cycle()

Since (0,2)(0,5)+(2,5) is a cycle representing a homology class in the torus, we can define a map S1T inducing an inclusion on H1:

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]
Hom(S1, T)({0:0, 1:2, 2:5})
g = Hom(S1, T)({0:0, 1:2, 2: 5})
g_star = g.induced_homology_morphism(QQ)
g_star.to_matrix(0)
g_star.to_matrix(1)
g_star.to_matrix()

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}
H = S1.homology_with_basis(QQ)
a = H.basis()[(1,0)]
g_star(a)
T = S1.product(S1, is_mutable=False)
diag = Hom(S1,T).diagonal_morphism()
b,c = list(T.cohomology_ring().basis(1))
diag_c = diag.induced_homology_morphism(cohomology=True)
diag_c(b)
diag_c(c)
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
K = simplicial_complexes.Simplex(2)
H = Hom(K,K)
id = H.identity()
id.induced_homology_morphism(QQ).base_ring()
id.induced_homology_morphism(GF(13)).base_ring()
is_identity()#

Return 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
S1 = simplicial_complexes.Sphere(1)
H = Hom(S1, S1)
flip = H({0:0, 1:2, 2:1})
flip.induced_homology_morphism(QQ).is_identity()
flip.induced_homology_morphism(GF(2)).is_identity()
rotate = H({0:1, 1:2, 2:0})
rotate.induced_homology_morphism(QQ).is_identity()
is_injective()#

Return 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
S1 = simplicial_complexes.Sphere(1)
K = simplicial_complexes.Simplex(2)
H = Hom(S1, K)
f = H({0:0, 1:1, 2:2})
f.induced_homology_morphism().is_injective()
f.induced_homology_morphism(cohomology=True).is_injective()
T = simplicial_complexes.Torus()
g = Hom(S1, T)({0:0, 1:3, 2: 6})
g_star = g.induced_homology_morphism(QQ)
g.is_injective()
is_surjective()#

Return 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
S1 = simplicial_complexes.Sphere(1)
K = simplicial_complexes.Simplex(2)
H = Hom(S1, K)
f = H({0:0, 1:1, 2:2})
f.induced_homology_morphism().is_surjective()
f.induced_homology_morphism(cohomology=True).is_surjective()
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]
S1 = simplicial_complexes.Sphere(1)
S1_b = S1.barycentric_subdivision()
S1_b.set_immutable()
d = {(0,): 0, (0,1): 1, (1,): 2, (1,2): 0, (2,): 1, (0,2): 2}
f = Hom(S1_b, S1)(d)
h = f.induced_homology_morphism(QQ)
h.to_matrix(1)
h.to_matrix()