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