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

\[0 \rightarrow \Omega^0(M,\varphi) \xrightarrow{\mathrm{d}_0} \Omega^1(M,\varphi) \xrightarrow{\mathrm{d}_1} \dots \xrightarrow{\mathrm{d}_{n-1}} \Omega^n(M,\varphi) \xrightarrow{\mathrm{d}_{n}} 0,\]

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

\[H^k_{\mathrm{dR}}(M, \varphi) = \left. \mathrm{ker}(\mathrm{d}_k) \middle/ \mathrm{im}(\mathrm{d}_{k-1}) \right. ,\]

and the corresponding ring is obtained by

\[H^*_{\mathrm{dR}}(M, \varphi) = \bigoplus^n_{k=0} H^k_{\mathrm{dR}}(M, \varphi).\]

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)

Bases: sage.structure.element.RingElement

Define a cohomology class in the de Rham cohomology ring.

INPUT:

  • parent – de Rham cohomology ring represented by an instance of DeRhamCohomologyRing

  • 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]

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

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
cup(other)

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]
lift()

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
representative()

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
class sage.manifolds.differentiable.de_rham_cohomology.DeRhamCohomologyRing(de_rham_complex)

Bases: sage.structure.parent.Parent, sage.structure.unique_representation.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 of MixedFormAlgebra

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

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]

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

The ring admits a zero and unit element:

sage: H.zero()
[zero]
sage: H.one()
[one]
Element

alias of DeRhamCohomologyClass

one()

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
zero()

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