Morphisms of simplicial complexes¶
AUTHORS:
- Benjamin Antieau <d.ben.antieau@gmail.com> (2009.06)
- Travis Scrimshaw (2012-08-18): Made all simplicial complexes immutable to work with the homset cache.
This module implements morphisms of simplicial complexes. The input is given by a dictionary on the vertex set of a simplicial complex. The initialization checks that faces are sent to faces.
There is also the capability to create the fiber product of two morphisms with the same codomain.
EXAMPLES:
sage: S = SimplicialComplex([[0,2],[1,5],[3,4]], is_mutable=False)
sage: H = Hom(S,S.product(S, is_mutable=False))
sage: H.diagonal_morphism()
Simplicial complex morphism {0: 'L0R0', 1: 'L1R1', 2: 'L2R2', 3: 'L3R3', 4: 'L4R4', 5: 'L5R5'} from Simplicial complex with vertex set (0, 1, 2, 3, 4, 5) and facets {(3, 4), (1, 5), (0, 2)} to Simplicial complex with 36 vertices and 18 facets
sage: S = SimplicialComplex([[0,2],[1,5],[3,4]], is_mutable=False)
sage: T = SimplicialComplex([[0,2],[1,3]], is_mutable=False)
sage: f = {0:0,1:1,2:2,3:1,4:3,5:3}
sage: H = Hom(S,T)
sage: x = H(f)
sage: x.image()
Simplicial complex with vertex set (0, 1, 2, 3) and facets {(1, 3), (0, 2)}
sage: x.is_surjective()
True
sage: x.is_injective()
False
sage: x.is_identity()
False
sage: S = simplicial_complexes.Sphere(2)
sage: H = Hom(S,S)
sage: i = H.identity()
sage: i.image()
Simplicial complex with vertex set (0, 1, 2, 3) and facets {(0, 2, 3), (0, 1, 2), (1, 2, 3), (0, 1, 3)}
sage: i.is_surjective()
True
sage: i.is_injective()
True
sage: i.is_identity()
True
sage: S = simplicial_complexes.Sphere(2)
sage: H = Hom(S,S)
sage: i = H.identity()
sage: j = i.fiber_product(i)
sage: j
Simplicial complex morphism {'L1R1': 1, 'L3R3': 3, 'L2R2': 2, 'L0R0': 0} from Simplicial complex with 4 vertices and 4 facets to Simplicial complex with vertex set (0, 1, 2, 3) and facets {(0, 2, 3), (0, 1, 2), (1, 2, 3), (0, 1, 3)}
sage: S = simplicial_complexes.Sphere(2)
sage: T = S.product(SimplicialComplex([[0,1]]), rename_vertices = False, is_mutable=False)
sage: H = Hom(T,S)
sage: T
Simplicial complex with 8 vertices and 12 facets
sage: T.vertices()
((0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 0), (3, 1))
sage: f = {(0, 0): 0, (0, 1): 0, (1, 0): 1, (1, 1): 1, (2, 0): 2, (2, 1): 2, (3, 0): 3, (3, 1): 3}
sage: x = H(f)
sage: U = simplicial_complexes.Sphere(1)
sage: G = Hom(U,S)
sage: U
Simplicial complex with vertex set (0, 1, 2) and facets {(1, 2), (0, 2), (0, 1)}
sage: g = {0:0,1:1,2:2}
sage: y = G(g)
sage: z = y.fiber_product(x)
sage: z # this is the mapping path space
Simplicial complex morphism {'L2R(2, 0)': 2, 'L2R(2, 1)': 2, 'L0R(0, 0)': 0, 'L0R(0, 1)': 0, 'L1R(1, 0)': 1, 'L1R(1, 1)': 1} from Simplicial complex with 6 vertices and 6 facets to Simplicial complex with vertex set (0, 1, 2, 3) and facets {(0, 2, 3), (0, 1, 2), (1, 2, 3), (0, 1, 3)}
-
class
sage.homology.simplicial_complex_morphism.
SimplicialComplexMorphism
(f, X, Y)¶ Bases:
sage.structure.sage_object.SageObject
An element of this class is a morphism of simplicial complexes.
-
associated_chain_complex_morphism
(base_ring=Integer Ring, augmented=False, cochain=False)¶ Returns the associated chain complex morphism of
self
.EXAMPLES:
sage: S = simplicial_complexes.Sphere(1) sage: T = simplicial_complexes.Sphere(2) sage: H = Hom(S,T) sage: f = {0:0,1:1,2:2} sage: x = H(f) sage: x Simplicial complex morphism {0: 0, 1: 1, 2: 2} from Simplicial complex with vertex set (0, 1, 2) and facets {(1, 2), (0, 2), (0, 1)} to Simplicial complex with vertex set (0, 1, 2, 3) and facets {(0, 2, 3), (0, 1, 2), (1, 2, 3), (0, 1, 3)} sage: a = x.associated_chain_complex_morphism() sage: a Chain complex morphism from Chain complex with at most 2 nonzero terms over Integer Ring to Chain complex with at most 3 nonzero terms over Integer Ring sage: a._matrix_dictionary {0: [0 0 0] [0 1 0] [0 0 1] [1 0 0], 1: [0 0 0] [0 1 0] [0 0 0] [1 0 0] [0 0 0] [0 0 1], 2: []} sage: x.associated_chain_complex_morphism(augmented=True) Chain complex morphism from Chain complex with at most 3 nonzero terms over Integer Ring to Chain complex with at most 4 nonzero terms over Integer Ring sage: x.associated_chain_complex_morphism(cochain=True) Chain complex morphism from Chain complex with at most 3 nonzero terms over Integer Ring to Chain complex with at most 2 nonzero terms over Integer Ring sage: x.associated_chain_complex_morphism(augmented=True,cochain=True) Chain complex morphism from Chain complex with at most 4 nonzero terms over Integer Ring to Chain complex with at most 3 nonzero terms over Integer Ring sage: x.associated_chain_complex_morphism(base_ring=GF(11)) Chain complex morphism from Chain complex with at most 2 nonzero terms over Finite Field of size 11 to Chain complex with at most 3 nonzero terms over Finite Field of size 11
Some simplicial maps which reverse the orientation of a few simplices:
sage: g = {0:1, 1:2, 2:0} sage: H(g).associated_chain_complex_morphism()._matrix_dictionary {0: [0 0 0] [1 0 0] [0 1 0] [0 0 1], 1: [ 0 0 0] [-1 0 0] [ 0 0 0] [ 0 0 1] [ 0 0 0] [ 0 -1 0], 2: []} sage: X = SimplicialComplex([[0, 1]], is_mutable=False) sage: Hom(X,X)({0:1, 1:0}).associated_chain_complex_morphism()._matrix_dictionary {0: [0 1] [1 0], 1: [-1]}
-
codomain
()¶ Returns the codomain of the morphism.
EXAMPLES:
sage: S = SimplicialComplex([[0,1],[2,3]], is_mutable=False) sage: T = SimplicialComplex([[0,1]], is_mutable=False) sage: f = {0:0,1:1,2:0,3:1} sage: H = Hom(S,T) sage: x = H(f) sage: x.codomain() Simplicial complex with vertex set (0, 1) and facets {(0, 1)}
-
domain
()¶ Returns the domain of the morphism.
EXAMPLES:
sage: S = SimplicialComplex([[0,1],[2,3]], is_mutable=False) sage: T = SimplicialComplex([[0,1]], is_mutable=False) sage: f = {0:0,1:1,2:0,3:1} sage: H = Hom(S,T) sage: x = H(f) sage: x.domain() Simplicial complex with vertex set (0, 1, 2, 3) and facets {(2, 3), (0, 1)}
-
fiber_product
(other, rename_vertices=True)¶ Fiber product of
self
andother
. Both morphisms should have the same codomain. The method returns a morphism of simplicial complexes, which is the morphism from the space of the fiber product to the codomain.EXAMPLES:
sage: S = SimplicialComplex([[0,1],[1,2]], is_mutable=False) sage: T = SimplicialComplex([[0,2],[1]], is_mutable=False) sage: U = SimplicialComplex([[0,1],[2]], is_mutable=False) sage: H = Hom(S,U) sage: G = Hom(T,U) sage: f = {0:0,1:1,2:0} sage: g = {0:0,1:1,2:1} sage: x = H(f) sage: y = G(g) sage: z = x.fiber_product(y) sage: z Simplicial complex morphism {'L1R2': 1, 'L1R1': 1, 'L2R0': 0, 'L0R0': 0} from Simplicial complex with 4 vertices and facets {('L2R0',), ('L1R1',), ('L0R0', 'L1R2')} to Simplicial complex with vertex set (0, 1, 2) and facets {(2,), (0, 1)}
-
image
()¶ Computes the image simplicial complex of
.
EXAMPLES:
sage: S = SimplicialComplex([[0,1],[2,3]], is_mutable=False) sage: T = SimplicialComplex([[0,1]], is_mutable=False) sage: f = {0:0,1:1,2:0,3:1} sage: H = Hom(S,T) sage: x = H(f) sage: x.image() Simplicial complex with vertex set (0, 1) and facets {(0, 1)} sage: S = SimplicialComplex(is_mutable=False) sage: H = Hom(S,S) sage: i = H.identity() sage: i.image() Simplicial complex with vertex set () and facets {()} sage: i.is_surjective() True sage: S = SimplicialComplex([[0,1]], is_mutable=False) sage: T = SimplicialComplex([[0,1], [0,2]], is_mutable=False) sage: f = {0:0,1:1} sage: g = {0:0,1:1} sage: k = {0:0,1:2} sage: H = Hom(S,T) sage: x = H(f) sage: y = H(g) sage: z = H(k) sage: x == y True sage: x == z False sage: x.image() Simplicial complex with vertex set (0, 1) and facets {(0, 1)} sage: y.image() Simplicial complex with vertex set (0, 1) and facets {(0, 1)} sage: z.image() Simplicial complex with vertex set (0, 2) and facets {(0, 2)}
-
is_identity
()¶ If
self
is an identity morphism, returnsTrue
. Otherwise,False
.EXAMPLES:
sage: T = simplicial_complexes.Sphere(1) sage: G = Hom(T,T) sage: T Simplicial complex with vertex set (0, 1, 2) and facets {(1, 2), (0, 2), (0, 1)} sage: j = G({0:0,1:1,2:2}) sage: j.is_identity() True sage: S = simplicial_complexes.Sphere(2) sage: T = simplicial_complexes.Sphere(3) sage: H = Hom(S,T) sage: f = {0:0,1:1,2:2,3:3} sage: x = H(f) sage: x Simplicial complex morphism {0: 0, 1: 1, 2: 2, 3: 3} from Simplicial complex with vertex set (0, 1, 2, 3) and facets {(0, 2, 3), (0, 1, 2), (1, 2, 3), (0, 1, 3)} to Simplicial complex with vertex set (0, 1, 2, 3, 4) and 5 facets sage: x.is_identity() False
-
is_injective
()¶ Returns
True
if and only ifself
is injective.EXAMPLES:
sage: S = simplicial_complexes.Sphere(1) sage: T = simplicial_complexes.Sphere(2) sage: U = simplicial_complexes.Sphere(3) sage: H = Hom(T,S) sage: G = Hom(T,U) sage: f = {0:0,1:1,2:0,3:1} sage: x = H(f) sage: g = {0:0,1:1,2:2,3:3} sage: y = G(g) sage: x.is_injective() False sage: y.is_injective() True
-
is_surjective
()¶ Returns
True
if and only ifself
is surjective.EXAMPLES:
sage: S = SimplicialComplex([(0,1,2)], is_mutable=False) sage: S Simplicial complex with vertex set (0, 1, 2) and facets {(0, 1, 2)} sage: T = SimplicialComplex([(0,1)], is_mutable=False) sage: T Simplicial complex with vertex set (0, 1) and facets {(0, 1)} sage: H = Hom(S,T) sage: x = H({0:0,1:1,2:1}) sage: x.is_surjective() True sage: S = SimplicialComplex([[0,1],[2,3]], is_mutable=False) sage: T = SimplicialComplex([[0,1]], is_mutable=False) sage: f = {0:0,1:1,2:0,3:1} sage: H = Hom(S,T) sage: x = H(f) sage: x.is_surjective() True
-
mapping_torus
()¶ The mapping torus of a simplicial complex endomorphism
The mapping torus is the simplicial complex formed by taking the product of the domain of
self
with apoint interval
and identifying vertices of the form
with
where
is the image of
under the given morphism.
See Wikipedia article Mapping torus
EXAMPLES:
sage: C = simplicial_complexes.Sphere(1) # Circle sage: T = Hom(C,C).identity().mapping_torus() ; T # Torus Simplicial complex with 9 vertices and 18 facets sage: T.homology() == simplicial_complexes.Torus().homology() True sage: f = Hom(C,C)({0:0,1:2,2:1}) sage: K = f.mapping_torus() ; K # Klein Bottle Simplicial complex with 9 vertices and 18 facets sage: K.homology() == simplicial_complexes.KleinBottle().homology() True
TESTS:
sage: g = Hom(simplicial_complexes.Simplex([1]),C)({1:0}) sage: g.mapping_torus() Traceback (most recent call last): ... ValueError: self must have the same domain and codomain.
-
-
sage.homology.simplicial_complex_morphism.
is_SimplicialComplexMorphism
(x)¶ Returns
True
if and only ifx
is a morphism of simplicial complexes.EXAMPLES:
sage: from sage.homology.simplicial_complex_morphism import is_SimplicialComplexMorphism sage: S = SimplicialComplex([[0,1],[3,4]], is_mutable=False) sage: H = Hom(S,S) sage: f = {0:0,1:1,3:3,4:4} sage: x = H(f) sage: is_SimplicialComplexMorphism(x) True