Set of Morphisms between Topological Manifolds

The class TopologicalManifoldHomset implements sets of morphisms between two topological manifolds over the same topological field \(K\), a morphism being a continuous map for the category of topological manifolds.

AUTHORS:

  • Eric Gourgoulhon (2015): initial version

  • Travis Scrimshaw (2016): review tweaks

REFERENCES:

class sage.manifolds.manifold_homset.TopologicalManifoldHomset(domain, codomain, name=None, latex_name=None)[source]

Bases: UniqueRepresentation, Homset

Set of continuous maps between two topological manifolds.

Given two topological manifolds \(M\) and \(N\) over a topological field \(K\), the class TopologicalManifoldHomset implements the set \(\mathrm{Hom}(M, N)\) of morphisms (i.e. continuous maps) \(M \to N\).

This is a Sage parent class, whose element class is ContinuousMap.

INPUT:

  • domainTopologicalManifold; the domain topological manifold \(M\) of the morphisms

  • codomainTopologicalManifold; the codomain topological manifold \(N\) of the morphisms

  • name – (default: None) string; the name of self; if None, Hom(M,N) will be used

  • latex_name – (default: None) string; LaTeX symbol to denote self; if None, \(\mathrm{Hom}(M,N)\) will be used

EXAMPLES:

Set of continuous maps between a 2-dimensional manifold and a 3-dimensional one:

sage: M = Manifold(2, 'M', structure='topological')
sage: X.<x,y> = M.chart()
sage: N = Manifold(3, 'N', structure='topological')
sage: Y.<u,v,w> = N.chart()
sage: H = Hom(M, N) ; H
Set of Morphisms from 2-dimensional topological manifold M to
 3-dimensional topological manifold N in Category of manifolds over
 Real Field with 53 bits of precision
sage: type(H)
<class 'sage.manifolds.manifold_homset.TopologicalManifoldHomset_with_category'>
sage: H.category()
Category of homsets of topological spaces
sage: latex(H)
\mathrm{Hom}\left(M,N\right)
sage: H.domain()
2-dimensional topological manifold M
sage: H.codomain()
3-dimensional topological manifold N
>>> from sage.all import *
>>> M = Manifold(Integer(2), 'M', structure='topological')
>>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2)
>>> N = Manifold(Integer(3), 'N', structure='topological')
>>> Y = N.chart(names=('u', 'v', 'w',)); (u, v, w,) = Y._first_ngens(3)
>>> H = Hom(M, N) ; H
Set of Morphisms from 2-dimensional topological manifold M to
 3-dimensional topological manifold N in Category of manifolds over
 Real Field with 53 bits of precision
>>> type(H)
<class 'sage.manifolds.manifold_homset.TopologicalManifoldHomset_with_category'>
>>> H.category()
Category of homsets of topological spaces
>>> latex(H)
\mathrm{Hom}\left(M,N\right)
>>> H.domain()
2-dimensional topological manifold M
>>> H.codomain()
3-dimensional topological manifold N
M = Manifold(2, 'M', structure='topological')
X.<x,y> = M.chart()
N = Manifold(3, 'N', structure='topological')
Y.<u,v,w> = N.chart()
H = Hom(M, N) ; H
type(H)
H.category()
latex(H)
H.domain()
H.codomain()

An element of H is a continuous map from M to N:

sage: H.Element
<class 'sage.manifolds.continuous_map.ContinuousMap'>
sage: f = H.an_element() ; f
Continuous map from the 2-dimensional topological manifold M to the
 3-dimensional topological manifold N
sage: f.display()
M → N
   (x, y) ↦ (u, v, w) = (0, 0, 0)
>>> from sage.all import *
>>> H.Element
<class 'sage.manifolds.continuous_map.ContinuousMap'>
>>> f = H.an_element() ; f
Continuous map from the 2-dimensional topological manifold M to the
 3-dimensional topological manifold N
>>> f.display()
M → N
   (x, y) ↦ (u, v, w) = (0, 0, 0)
H.Element
f = H.an_element() ; f
f.display()

The test suite is passed:

sage: TestSuite(H).run()
>>> from sage.all import *
>>> TestSuite(H).run()
TestSuite(H).run()

When the codomain coincides with the domain, the homset is a set of endomorphisms in the category of topological manifolds:

sage: E = Hom(M, M) ; E
Set of Morphisms from 2-dimensional topological manifold M to
 2-dimensional topological manifold M in Category of manifolds over
 Real Field with 53 bits of precision
sage: E.category()
Category of endsets of topological spaces
sage: E.is_endomorphism_set()
True
sage: E is End(M)
True
>>> from sage.all import *
>>> E = Hom(M, M) ; E
Set of Morphisms from 2-dimensional topological manifold M to
 2-dimensional topological manifold M in Category of manifolds over
 Real Field with 53 bits of precision
>>> E.category()
Category of endsets of topological spaces
>>> E.is_endomorphism_set()
True
>>> E is End(M)
True
E = Hom(M, M) ; E
E.category()
E.is_endomorphism_set()
E is End(M)

In this case, the homset is a monoid for the law of morphism composition:

sage: E in Monoids()
True
>>> from sage.all import *
>>> E in Monoids()
True
E in Monoids()

This was of course not the case of H = Hom(M, N):

sage: H in Monoids()
False
>>> from sage.all import *
>>> H in Monoids()
False
H in Monoids()

The identity element of the monoid is of course the identity map of M:

sage: E.one()
Identity map Id_M of the 2-dimensional topological manifold M
sage: E.one() is M.identity_map()
True
sage: E.one().display()
Id_M: M → M
   (x, y) ↦ (x, y)
>>> from sage.all import *
>>> E.one()
Identity map Id_M of the 2-dimensional topological manifold M
>>> E.one() is M.identity_map()
True
>>> E.one().display()
Id_M: M → M
   (x, y) ↦ (x, y)
E.one()
E.one() is M.identity_map()
E.one().display()

The test suite is passed by E:

sage: TestSuite(E).run()
>>> from sage.all import *
>>> TestSuite(E).run()
TestSuite(E).run()

This test suite includes more tests than in the case of H, since E has some extra structure (monoid).

Element[source]

alias of ContinuousMap

one()[source]

Return the identity element of self considered as a monoid (case of a set of endomorphisms).

This applies only when the codomain of the homset is equal to its domain, i.e. when the homset is of the type \(\mathrm{Hom}(M,M)\). Indeed, \(\mathrm{Hom}(M,M)\) equipped with the law of morphisms composition is a monoid, whose identity element is nothing but the identity map of \(M\).

OUTPUT:

EXAMPLES:

The identity map of a 2-dimensional manifold:

sage: M = Manifold(2, 'M', structure='topological')
sage: X.<x,y> = M.chart()
sage: H = Hom(M, M) ; H
Set of Morphisms from 2-dimensional topological manifold M to
 2-dimensional topological manifold M in Category of manifolds over
 Real Field with 53 bits of precision
sage: H in Monoids()
True
sage: H.one()
Identity map Id_M of the 2-dimensional topological manifold M
sage: H.one().parent() is H
True
sage: H.one().display()
Id_M: M → M
   (x, y) ↦ (x, y)
>>> from sage.all import *
>>> M = Manifold(Integer(2), 'M', structure='topological')
>>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2)
>>> H = Hom(M, M) ; H
Set of Morphisms from 2-dimensional topological manifold M to
 2-dimensional topological manifold M in Category of manifolds over
 Real Field with 53 bits of precision
>>> H in Monoids()
True
>>> H.one()
Identity map Id_M of the 2-dimensional topological manifold M
>>> H.one().parent() is H
True
>>> H.one().display()
Id_M: M → M
   (x, y) ↦ (x, y)
M = Manifold(2, 'M', structure='topological')
X.<x,y> = M.chart()
H = Hom(M, M) ; H
H in Monoids()
H.one()
H.one().parent() is H
H.one().display()

The identity map is cached:

sage: H.one() is H.one()
True
>>> from sage.all import *
>>> H.one() is H.one()
True
H.one() is H.one()

If the homset is not a set of endomorphisms, the identity element is meaningless:

sage: N = Manifold(3, 'N', structure='topological')
sage: Y.<u,v,w> = N.chart()
sage: Hom(M, N).one()
Traceback (most recent call last):
...
TypeError: Set of Morphisms
 from 2-dimensional topological manifold M
 to 3-dimensional topological manifold N
 in Category of manifolds over Real Field with 53 bits of precision
 is not a monoid
>>> from sage.all import *
>>> N = Manifold(Integer(3), 'N', structure='topological')
>>> Y = N.chart(names=('u', 'v', 'w',)); (u, v, w,) = Y._first_ngens(3)
>>> Hom(M, N).one()
Traceback (most recent call last):
...
TypeError: Set of Morphisms
 from 2-dimensional topological manifold M
 to 3-dimensional topological manifold N
 in Category of manifolds over Real Field with 53 bits of precision
 is not a monoid
N = Manifold(3, 'N', structure='topological')
Y.<u,v,w> = N.chart()
Hom(M, N).one()