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:
domain
–TopologicalManifold
; the domain topological manifold \(M\) of the morphismscodomain
–TopologicalManifold
; the codomain topological manifold \(N\) of the morphismsname
– (default:None
) string; the name ofself
; ifNone
,Hom(M,N)
will be usedlatex_name
– (default:None
) string; LaTeX symbol to denoteself
; ifNone
, \(\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 fromM
toN
: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
, sinceE
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:
the identity map of \(M\), as an instance of
ContinuousMap
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()