Section Modules¶
The set of sections over a vector bundle \(E \to M\) of class \(C^k\) on a domain \(U \in M\) is a module over the algebra \(C^k(U)\) of scalar fields on \(U\).
Depending on the domain, there are two classes of section modules:
SectionModulefor local sections over a non-trivial part of a topological vector bundleSectionFreeModulefor local sections over a trivial part of a topological vector bundle
AUTHORS:
Michael Jung (2019): initial version
- class sage.manifolds.section_module.SectionFreeModule(vbundle, domain)[source]¶
Bases:
FiniteRankFreeModuleFree module of sections over a vector bundle \(E \to M\) of class \(C^k\) on a domain \(U \in M\) which admits a trivialization or local frame.
The section module \(C^k(U;E)\) is the set of all \(C^k\)-maps, called sections, of type
\[s: U \longrightarrow E\]such that
\[\forall p \in U,\ s(p) \in E_p,\]where \(E_p\) is the vector bundle fiber of \(E\) at the point \(p\).
Since the domain \(U\) admits a local frame, the corresponding vector bundle \(E|_U \to U\) is trivial and \(C^k(U;E)\) is a free module over \(C^k(U)\).
Note
If \(E|_U\) is not trivial, the class
SectionModuleshould be used instead, for \(C^k(U;E)\) is no longer a free module.INPUT:
vbundle– vector bundle \(E\) on which the sections takes its valuesdomain– (default:None) subdomain \(U\) of the base space on which the sections are defined
EXAMPLES:
Module of sections on the 2-rank trivial vector bundle over the Euclidean plane \(\RR^2\):
sage: M = Manifold(2, 'R^2', structure='top') sage: c_cart.<x,y> = M.chart() sage: E = M.vector_bundle(2, 'E') sage: e = E.local_frame('e') # Trivializes the vector bundle sage: C0 = E.section_module(); C0 Free module C^0(R^2;E) of sections on the 2-dimensional topological manifold R^2 with values in the real vector bundle E of rank 2 sage: C0.category() Category of finite dimensional modules over Algebra of scalar fields on the 2-dimensional topological manifold R^2 sage: C0.base_ring() is M.scalar_field_algebra() True
>>> from sage.all import * >>> M = Manifold(Integer(2), 'R^2', structure='top') >>> c_cart = M.chart(names=('x', 'y',)); (x, y,) = c_cart._first_ngens(2) >>> E = M.vector_bundle(Integer(2), 'E') >>> e = E.local_frame('e') # Trivializes the vector bundle >>> C0 = E.section_module(); C0 Free module C^0(R^2;E) of sections on the 2-dimensional topological manifold R^2 with values in the real vector bundle E of rank 2 >>> C0.category() Category of finite dimensional modules over Algebra of scalar fields on the 2-dimensional topological manifold R^2 >>> C0.base_ring() is M.scalar_field_algebra() True
M = Manifold(2, 'R^2', structure='top') c_cart.<x,y> = M.chart() E = M.vector_bundle(2, 'E') e = E.local_frame('e') # Trivializes the vector bundle C0 = E.section_module(); C0 C0.category() C0.base_ring() is M.scalar_field_algebra()The vector bundle admits a global frame and is therefore trivial:
sage: E.is_manifestly_trivial() True
>>> from sage.all import * >>> E.is_manifestly_trivial() True
E.is_manifestly_trivial()
Since the vector bundle is trivial, its section module of global sections is a free module:
sage: isinstance(C0, FiniteRankFreeModule) True
>>> from sage.all import * >>> isinstance(C0, FiniteRankFreeModule) True
isinstance(C0, FiniteRankFreeModule)
Some elements are:
sage: C0.an_element().display() 2 e_0 + 2 e_1 sage: C0.zero().display() zero = 0 sage: s = C0([-y,x]); s Section on the 2-dimensional topological manifold R^2 with values in the real vector bundle E of rank 2 sage: s.display() -y e_0 + x e_1
>>> from sage.all import * >>> C0.an_element().display() 2 e_0 + 2 e_1 >>> C0.zero().display() zero = 0 >>> s = C0([-y,x]); s Section on the 2-dimensional topological manifold R^2 with values in the real vector bundle E of rank 2 >>> s.display() -y e_0 + x e_1
C0.an_element().display() C0.zero().display() s = C0([-y,x]); s s.display()
The rank of the free module equals the rank of the vector bundle:
sage: C0.rank() 2
>>> from sage.all import * >>> C0.rank() 2
C0.rank()
The basis is given by the definition above:
sage: C0.bases() [Local frame (E|_R^2, (e_0,e_1))]
>>> from sage.all import * >>> C0.bases() [Local frame (E|_R^2, (e_0,e_1))]
C0.bases()
The test suite is passed as well:
sage: TestSuite(C0).run()
>>> from sage.all import * >>> TestSuite(C0).run()
TestSuite(C0).run()
- Element[source]¶
alias of
TrivialSection
- base_space()[source]¶
Return the base space of the sections in this module.
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: U = M.open_subset('U') sage: E = U.vector_bundle(2, 'E') sage: C0 = E.section_module(force_free=True); C0 Free module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: C0.base_space() Open subset U of the 3-dimensional topological manifold M
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> U = M.open_subset('U') >>> E = U.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module(force_free=True); C0 Free module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> C0.base_space() Open subset U of the 3-dimensional topological manifold M
M = Manifold(3, 'M', structure='top') U = M.open_subset('U') E = U.vector_bundle(2, 'E') C0 = E.section_module(force_free=True); C0 C0.base_space()
- basis(symbol=None, latex_symbol=None, from_frame=None, indices=None, latex_indices=None, symbol_dual=None, latex_symbol_dual=None)[source]¶
Define a basis of
self.A basis of the section module is actually a local frame on the differentiable manifold \(U\) over which the section module is defined.
If the basis specified by the given symbol already exists, it is simply returned. If no argument is provided the module’s default basis is returned.
INPUT:
symbol– (default:None) either a string, to be used as a common base for the symbols of the elements of the basis, or a tuple of strings, representing the individual symbols of the elements of the basislatex_symbol– (default:None) either a string, to be used as a common base for the LaTeX symbols of the elements of the basis, or a tuple of strings, representing the individual LaTeX symbols of the elements of the basis; ifNone,symbolis used in place oflatex_symbolindices– (default:None; used only ifsymbolis a single string) tuple of strings representing the indices labelling the elements of the basis; ifNone, the indices will be generated as integers within the range declared onselflatex_indices– (default:None) tuple of strings representing the indices for the LaTeX symbols of the elements of the basis; ifNone,indicesis used insteadsymbol_dual– (default:None) same assymbolbut for the dual basis; ifNone,symbolmust be a string and is used for the common base of the symbols of the elements of the dual basislatex_symbol_dual– (default:None) same aslatex_symbolbut for the dual basis
OUTPUT:
a
LocalFramerepresenting a basis onself
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: C0 = E.section_module(force_free=True) sage: e = C0.basis('e'); e Local frame (E|_M, (e_0,e_1))
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> E = M.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module(force_free=True) >>> e = C0.basis('e'); e Local frame (E|_M, (e_0,e_1))
M = Manifold(2, 'M', structure='top') E = M.vector_bundle(2, 'E') C0 = E.section_module(force_free=True) e = C0.basis('e'); eSee
LocalFramefor more examples and documentation.
- domain()[source]¶
Return the domain of the section module.
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: U = M.open_subset('U') sage: E = M.vector_bundle(2, 'E') sage: C0_U = E.section_module(domain=U, force_free=True); C0_U Free module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: C0_U.domain() Open subset U of the 3-dimensional topological manifold M
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> U = M.open_subset('U') >>> E = M.vector_bundle(Integer(2), 'E') >>> C0_U = E.section_module(domain=U, force_free=True); C0_U Free module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> C0_U.domain() Open subset U of the 3-dimensional topological manifold M
M = Manifold(3, 'M', structure='top') U = M.open_subset('U') E = M.vector_bundle(2, 'E') C0_U = E.section_module(domain=U, force_free=True); C0_U C0_U.domain()
- vector_bundle()[source]¶
Return the overlying vector bundle on which the section module is defined.
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: C0 = E.section_module(force_free=True); C0 Free module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: C0.vector_bundle() Topological real vector bundle E -> M of rank 2 over the base space 3-dimensional topological manifold M sage: E is C0.vector_bundle() True
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> E = M.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module(force_free=True); C0 Free module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> C0.vector_bundle() Topological real vector bundle E -> M of rank 2 over the base space 3-dimensional topological manifold M >>> E is C0.vector_bundle() True
M = Manifold(3, 'M', structure='top') E = M.vector_bundle(2, 'E') C0 = E.section_module(force_free=True); C0 C0.vector_bundle() E is C0.vector_bundle()
- class sage.manifolds.section_module.SectionModule(vbundle, domain)[source]¶
Bases:
UniqueRepresentation,ParentModule of sections over a vector bundle \(E \to M\) of class \(C^k\) on a domain \(U \in M\).
The section module \(C^k(U;E)\) is the set of all \(C^k\)-maps, called sections, of type
\[s: U \longrightarrow E\]such that
\[\forall p \in U,\ s(p) \in E_p,\]where \(E_p\) is the vector bundle fiber of \(E\) at the point \(p\).
\(C^k(U;E)\) is a module over \(C^k(U)\), the algebra of \(C^k\) scalar fields on \(U\).
INPUT:
vbundle– vector bundle \(E\) on which the sections takes its valuesdomain– (default:None) subdomain \(U\) of the base space on which the sections are defined
EXAMPLES:
Module of sections on the Möbius bundle:
sage: M = Manifold(1, 'RP^1', structure='top', start_index=1) sage: U = M.open_subset('U') # the complement of one point sage: c_u.<u> = U.chart() # [1:u] in homogeneous coord. sage: V = M.open_subset('V') # the complement of the point u=0 sage: M.declare_union(U,V) # [v:1] in homogeneous coord. sage: c_v.<v> = V.chart() sage: u_to_v = c_u.transition_map(c_v, (1/u), ....: intersection_name='W', ....: restrictions1 = u!=0, ....: restrictions2 = v!=0) sage: v_to_u = u_to_v.inverse() sage: W = U.intersection(V) sage: E = M.vector_bundle(1, 'E') sage: phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ....: domain=U) sage: phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ....: domain=V) sage: transf = phi_U.transition_map(phi_V, [[u]]) sage: C0 = E.section_module(); C0 Module C^0(RP^1;E) of sections on the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1
>>> from sage.all import * >>> M = Manifold(Integer(1), 'RP^1', structure='top', start_index=Integer(1)) >>> U = M.open_subset('U') # the complement of one point >>> c_u = U.chart(names=('u',)); (u,) = c_u._first_ngens(1)# [1:u] in homogeneous coord. >>> V = M.open_subset('V') # the complement of the point u=0 >>> M.declare_union(U,V) # [v:1] in homogeneous coord. >>> c_v = V.chart(names=('v',)); (v,) = c_v._first_ngens(1) >>> u_to_v = c_u.transition_map(c_v, (Integer(1)/u), ... intersection_name='W', ... restrictions1 = u!=Integer(0), ... restrictions2 = v!=Integer(0)) >>> v_to_u = u_to_v.inverse() >>> W = U.intersection(V) >>> E = M.vector_bundle(Integer(1), 'E') >>> phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ... domain=U) >>> phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ... domain=V) >>> transf = phi_U.transition_map(phi_V, [[u]]) >>> C0 = E.section_module(); C0 Module C^0(RP^1;E) of sections on the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1
M = Manifold(1, 'RP^1', structure='top', start_index=1) U = M.open_subset('U') # the complement of one point c_u.<u> = U.chart() # [1:u] in homogeneous coord. V = M.open_subset('V') # the complement of the point u=0 M.declare_union(U,V) # [v:1] in homogeneous coord. c_v.<v> = V.chart() u_to_v = c_u.transition_map(c_v, (1/u), intersection_name='W', restrictions1 = u!=0, restrictions2 = v!=0) v_to_u = u_to_v.inverse() W = U.intersection(V) E = M.vector_bundle(1, 'E') phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', domain=U) phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', domain=V) transf = phi_U.transition_map(phi_V, [[u]]) C0 = E.section_module(); C0\(C^0(\RR P^1;E)\) is a module over the algebra \(C^0(\RR P^1)\):
sage: C0.category() Category of modules over Algebra of scalar fields on the 1-dimensional topological manifold RP^1 sage: C0.base_ring() is M.scalar_field_algebra() True
>>> from sage.all import * >>> C0.category() Category of modules over Algebra of scalar fields on the 1-dimensional topological manifold RP^1 >>> C0.base_ring() is M.scalar_field_algebra() True
C0.category() C0.base_ring() is M.scalar_field_algebra()
However, \(C^0(\RR P^1;E)\) is not a free module:
sage: isinstance(C0, FiniteRankFreeModule) False
>>> from sage.all import * >>> isinstance(C0, FiniteRankFreeModule) False
isinstance(C0, FiniteRankFreeModule)
since the Möbius bundle is not trivial:
sage: E.is_manifestly_trivial() False
>>> from sage.all import * >>> E.is_manifestly_trivial() False
E.is_manifestly_trivial()
The section module over \(U\), on the other hand, is a free module since \(E|_U\) admits a trivialization and therefore has a local frame:
sage: C0_U = E.section_module(domain=U) sage: isinstance(C0_U, FiniteRankFreeModule) True
>>> from sage.all import * >>> C0_U = E.section_module(domain=U) >>> isinstance(C0_U, FiniteRankFreeModule) True
C0_U = E.section_module(domain=U) isinstance(C0_U, FiniteRankFreeModule)
The zero element of the module:
sage: z = C0.zero() ; z Section zero on the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1 sage: z.display(phi_U.frame()) zero = 0 sage: z.display(phi_V.frame()) zero = 0
>>> from sage.all import * >>> z = C0.zero() ; z Section zero on the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1 >>> z.display(phi_U.frame()) zero = 0 >>> z.display(phi_V.frame()) zero = 0
z = C0.zero() ; z z.display(phi_U.frame()) z.display(phi_V.frame())
The module \(C^0(M;E)\) coerces to any module of sections defined on a subdomain of \(M\), for instance \(C^0(U;E)\):
sage: C0_U.has_coerce_map_from(C0) True sage: C0_U.coerce_map_from(C0) Coercion map: From: Module C^0(RP^1;E) of sections on the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1 To: Free module C^0(U;E) of sections on the Open subset U of the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1
>>> from sage.all import * >>> C0_U.has_coerce_map_from(C0) True >>> C0_U.coerce_map_from(C0) Coercion map: From: Module C^0(RP^1;E) of sections on the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1 To: Free module C^0(U;E) of sections on the Open subset U of the 1-dimensional topological manifold RP^1 with values in the real vector bundle E of rank 1
C0_U.has_coerce_map_from(C0) C0_U.coerce_map_from(C0)
The conversion map is actually the restriction of sections defined on \(M\) to \(U\).
- base_space()[source]¶
Return the base space of the sections in this module.
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: U = M.open_subset('U') sage: E = U.vector_bundle(2, 'E') sage: C0 = E.section_module(); C0 Module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: C0.base_space() Open subset U of the 3-dimensional topological manifold M
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> U = M.open_subset('U') >>> E = U.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module(); C0 Module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> C0.base_space() Open subset U of the 3-dimensional topological manifold M
M = Manifold(3, 'M', structure='top') U = M.open_subset('U') E = U.vector_bundle(2, 'E') C0 = E.section_module(); C0 C0.base_space()
- default_frame()[source]¶
Return the default frame defined on
self.EXAMPLES:
Get the default local frame of a non-trivial section module:
sage: M = Manifold(3, 'M', structure='top') sage: U = M.open_subset('U') sage: V = M.open_subset('V') sage: M.declare_union(U, V) sage: E = M.vector_bundle(2, 'E') sage: C0 = E.section_module() sage: e = E.local_frame('e', domain=U) sage: C0.default_frame() Local frame (E|_U, (e_0,e_1))
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> U = M.open_subset('U') >>> V = M.open_subset('V') >>> M.declare_union(U, V) >>> E = M.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module() >>> e = E.local_frame('e', domain=U) >>> C0.default_frame() Local frame (E|_U, (e_0,e_1))
M = Manifold(3, 'M', structure='top') U = M.open_subset('U') V = M.open_subset('V') M.declare_union(U, V) E = M.vector_bundle(2, 'E') C0 = E.section_module() e = E.local_frame('e', domain=U) C0.default_frame()The local frame is indeed the same, and not a copy:
sage: e is C0.default_frame() True
>>> from sage.all import * >>> e is C0.default_frame() True
e is C0.default_frame()
- domain()[source]¶
Return the domain of the section module.
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: U = M.open_subset('U') sage: E = M.vector_bundle(2, 'E') sage: C0_U = E.section_module(domain=U); C0_U Module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: C0_U.domain() Open subset U of the 3-dimensional topological manifold M
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> U = M.open_subset('U') >>> E = M.vector_bundle(Integer(2), 'E') >>> C0_U = E.section_module(domain=U); C0_U Module C^0(U;E) of sections on the Open subset U of the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> C0_U.domain() Open subset U of the 3-dimensional topological manifold M
M = Manifold(3, 'M', structure='top') U = M.open_subset('U') E = M.vector_bundle(2, 'E') C0_U = E.section_module(domain=U); C0_U C0_U.domain()
- set_default_frame(basis)[source]¶
Set the default local frame on
self.EXAMPLES:
Set a default frame of a non-trivial section module:
sage: M = Manifold(3, 'M', structure='top') sage: U = M.open_subset('U') sage: V = M.open_subset('V') sage: M.declare_union(U, V) sage: E = M.vector_bundle(2, 'E') sage: C0 = E.section_module(); C0 Module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: e = E.local_frame('e', domain=U) sage: C0.set_default_frame(e) sage: C0.default_frame() Local frame (E|_U, (e_0,e_1))
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> U = M.open_subset('U') >>> V = M.open_subset('V') >>> M.declare_union(U, V) >>> E = M.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module(); C0 Module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> e = E.local_frame('e', domain=U) >>> C0.set_default_frame(e) >>> C0.default_frame() Local frame (E|_U, (e_0,e_1))
M = Manifold(3, 'M', structure='top') U = M.open_subset('U') V = M.open_subset('V') M.declare_union(U, V) E = M.vector_bundle(2, 'E') C0 = E.section_module(); C0 e = E.local_frame('e', domain=U) C0.set_default_frame(e) C0.default_frame()The local frame is indeed the same, and not a copy:
sage: e is C0.default_frame() True
>>> from sage.all import * >>> e is C0.default_frame() True
e is C0.default_frame()
Notice, that the local frame is defined on a subset and is not part of the section module \(C^k(M;E)\):
sage: C0.default_frame().domain() Open subset U of the 3-dimensional topological manifold M
>>> from sage.all import * >>> C0.default_frame().domain() Open subset U of the 3-dimensional topological manifold M
C0.default_frame().domain()
- vector_bundle()[source]¶
Return the overlying vector bundle on which the section module is defined.
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: C0 = E.section_module(); C0 Module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: C0.vector_bundle() Topological real vector bundle E -> M of rank 2 over the base space 3-dimensional topological manifold M sage: E is C0.vector_bundle() True
>>> from sage.all import * >>> M = Manifold(Integer(3), 'M', structure='top') >>> E = M.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module(); C0 Module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> C0.vector_bundle() Topological real vector bundle E -> M of rank 2 over the base space 3-dimensional topological manifold M >>> E is C0.vector_bundle() True
M = Manifold(3, 'M', structure='top') E = M.vector_bundle(2, 'E') C0 = E.section_module(); C0 C0.vector_bundle() E is C0.vector_bundle()
- zero()[source]¶
Return the zero of
self.EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: X.<x,y> = M.chart() sage: E = M.vector_bundle(2, 'E') sage: C0 = E.section_module() sage: z = C0.zero(); z Section zero on the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: z == 0 True
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> E = M.vector_bundle(Integer(2), 'E') >>> C0 = E.section_module() >>> z = C0.zero(); z Section zero on the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2 >>> z == Integer(0) True
M = Manifold(2, 'M', structure='top') X.<x,y> = M.chart() E = M.vector_bundle(2, 'E') C0 = E.section_module() z = C0.zero(); z z == 0