De Rham Cohomology#
Let \(M\) and \(N\) be differentiable manifolds and \(\varphi\colon M \to N\) be a differentiable map. Then the associated de Rham complex is given by
where \(\Omega^k(M,\varphi)\) is the module of differential forms of degree \(k\), and \(d_k\) is the associated exterior derivative. Then the \(k\)-th de Rham cohomology group is given by
and the corresponding ring is obtained by
The de Rham cohomology ring is implemented via DeRhamCohomologyRing
.
Its elements, the cohomology classes, are represented by
DeRhamCohomologyClass
.
AUTHORS:
Michael Jung (2021) : initial version
- class sage.manifolds.differentiable.de_rham_cohomology.DeRhamCohomologyClass(parent, representative)[source]#
Bases:
AlgebraElement
Define a cohomology class in the de Rham cohomology ring.
INPUT:
parent
– de Rham cohomology ring represented by an instance ofDeRhamCohomologyRing
representative
– a closed (mixed) differential form representing the cohomology class
Note
The current implementation only provides basic features. Comparison via exact forms are not supported at the time being.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: C = M.de_rham_complex() sage: H = C.cohomology() sage: omega = M.diff_form(1, [1,1], name='omega') sage: u = H(omega); u [omega]
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> C = M.de_rham_complex() >>> H = C.cohomology() >>> omega = M.diff_form(Integer(1), [Integer(1),Integer(1)], name='omega') >>> u = H(omega); u [omega]
Cohomology classes can be lifted to the algebra of mixed differential forms:
sage: u.lift() Mixed differential form omega on the 2-dimensional differentiable manifold M
>>> from sage.all import * >>> u.lift() Mixed differential form omega on the 2-dimensional differentiable manifold M
However, comparison of two cohomology classes is limited the time being:
sage: eta = M.diff_form(1, [1,1], name='eta') sage: H(eta) == u True sage: H.one() == u Traceback (most recent call last): ... NotImplementedError: comparison via exact forms is currently not supported
>>> from sage.all import * >>> eta = M.diff_form(Integer(1), [Integer(1),Integer(1)], name='eta') >>> H(eta) == u True >>> H.one() == u Traceback (most recent call last): ... NotImplementedError: comparison via exact forms is currently not supported
- cup(other)[source]#
Cup product of two cohomology classes.
INPUT:
other
– another cohomology class in the de Rham cohomology
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: C = M.de_rham_complex() sage: H = C.cohomology() sage: omega = M.diff_form(1, [1,1], name='omega') sage: eta = M.diff_form(1, [1,-1], name='eta') sage: H(omega).cup(H(eta)) [omega∧eta]
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> C = M.de_rham_complex() >>> H = C.cohomology() >>> omega = M.diff_form(Integer(1), [Integer(1),Integer(1)], name='omega') >>> eta = M.diff_form(Integer(1), [Integer(1),-Integer(1)], name='eta') >>> H(omega).cup(H(eta)) [omega∧eta]
- lift()[source]#
Return a representative of
self
in the associated de Rham complex.EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: C = M.de_rham_complex() sage: H = C.cohomology() sage: omega = M.diff_form(2, name='omega') sage: omega[0,1] = x sage: omega.display() omega = x dx∧dy sage: u = H(omega); u [omega] sage: u.representative() Mixed differential form omega on the 2-dimensional differentiable manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> C = M.de_rham_complex() >>> H = C.cohomology() >>> omega = M.diff_form(Integer(2), name='omega') >>> omega[Integer(0),Integer(1)] = x >>> omega.display() omega = x dx∧dy >>> u = H(omega); u [omega] >>> u.representative() Mixed differential form omega on the 2-dimensional differentiable manifold M
- representative()[source]#
Return a representative of
self
in the associated de Rham complex.EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: C = M.de_rham_complex() sage: H = C.cohomology() sage: omega = M.diff_form(2, name='omega') sage: omega[0,1] = x sage: omega.display() omega = x dx∧dy sage: u = H(omega); u [omega] sage: u.representative() Mixed differential form omega on the 2-dimensional differentiable manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> C = M.de_rham_complex() >>> H = C.cohomology() >>> omega = M.diff_form(Integer(2), name='omega') >>> omega[Integer(0),Integer(1)] = x >>> omega.display() omega = x dx∧dy >>> u = H(omega); u [omega] >>> u.representative() Mixed differential form omega on the 2-dimensional differentiable manifold M
- class sage.manifolds.differentiable.de_rham_cohomology.DeRhamCohomologyRing(de_rham_complex)[source]#
Bases:
Parent
,UniqueRepresentation
The de Rham cohomology ring of a de Rham complex.
This ring is naturally endowed with a multiplication induced by the wedge product, called cup product, see
DeRhamCohomologyClass.cup()
.Note
The current implementation only provides basic features. Comparison via exact forms are not supported at the time being.
INPUT:
de_rham_complex
– a de Rham complex, typically an instance ofMixedFormAlgebra
EXAMPLES:
We define the de Rham cohomology ring on a parallelizable manifold \(M\):
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: C = M.de_rham_complex() sage: H = C.cohomology(); H De Rham cohomology ring on the 2-dimensional differentiable manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> C = M.de_rham_complex() >>> H = C.cohomology(); H De Rham cohomology ring on the 2-dimensional differentiable manifold M
Its elements are induced by closed differential forms on \(M\):
sage: beta = M.diff_form(1, [1,0], name='beta') sage: beta.display() beta = dx sage: d1 = C.differential(1) sage: d1(beta).display() dbeta = 0 sage: b = H(beta); b [beta]
>>> from sage.all import * >>> beta = M.diff_form(Integer(1), [Integer(1),Integer(0)], name='beta') >>> beta.display() beta = dx >>> d1 = C.differential(Integer(1)) >>> d1(beta).display() dbeta = 0 >>> b = H(beta); b [beta]
Cohomology classes can be lifted to the algebra of mixed differential forms:
sage: b.representative() Mixed differential form beta on the 2-dimensional differentiable manifold M
>>> from sage.all import * >>> b.representative() Mixed differential form beta on the 2-dimensional differentiable manifold M
The ring admits a zero and unit element:
sage: H.zero() [zero] sage: H.one() [one]
>>> from sage.all import * >>> H.zero() [zero] >>> H.one() [one]
- Element[source]#
alias of
DeRhamCohomologyClass
- one()[source]#
Return the one element of
self
.EXAMPLES:
sage: M = Manifold(2, 'M') sage: C = M.de_rham_complex() sage: H = C.cohomology() sage: H.one() [one] sage: H.one().representative() Mixed differential form one on the 2-dimensional differentiable manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M') >>> C = M.de_rham_complex() >>> H = C.cohomology() >>> H.one() [one] >>> H.one().representative() Mixed differential form one on the 2-dimensional differentiable manifold M
- zero()[source]#
Return the zero element of
self
.EXAMPLES:
sage: M = Manifold(2, 'M') sage: C = M.de_rham_complex() sage: H = C.cohomology() sage: H.zero() [zero] sage: H.zero().representative() Mixed differential form zero on the 2-dimensional differentiable manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M') >>> C = M.de_rham_complex() >>> H = C.cohomology() >>> H.zero() [zero] >>> H.zero().representative() Mixed differential form zero on the 2-dimensional differentiable manifold M