# 15. Pulback of tensor fields¶

This notebook is part of the Introduction to manifolds in SageMath by Andrzej Chrzeszczyk (Jan Kochanowski University of Kielce, Poland).

In [1]:
version()

Out[1]:
'SageMath version 9.6, Release Date: 2022-05-15'

Recall from notebook 7, that every smooth map between two smooth manifolds $\psi : M → N$ defines a pullback map $\psi^* : C^∞ (N ) → C^∞ (M )$ by

$$\psi^∗ f = f ◦ \psi\quad \mbox{ for any } f ∈ C^∞ (N ).$$

Example 15.1

If we denote by $\psi$ the coordinate change defined by $x=r\cos(\phi),\; y=r\sin(\phi)$ on the open set $U=\{(r,\phi): r>0, 0<\phi <2\pi \},$ then for a scalar function $f$ of variables $x,y,$ the pullback $\psi^*f$ is the function $(r,\phi)\to f(r\cos(\phi),r\sin(\phi))$, defined on $U$.

In the special case $f(x,y)=\sqrt{x^2+y^2}$, the pullback $\psi^*f$ is the function on $U$: $(r,\phi)\to r.$

In [2]:
%display latex
M = Manifold(2, 'R^2p')   # manifold R^2
U = M.open_subset('U')    # open subset of R2,
# polar coord. on U:
c_rphi.<r,phi>=U.chart(r'r:(0,oo) phi:(0,2*pi):\phi')
N = Manifold(2, 'R^2c')   # second copy of R^2
c_xy.<x,y> = N.chart()    # Cartesian coordinates:
# psi: M --> N : polar to Cart.:
psi = U.diff_map(N, (r*cos(phi), r*sin(phi)),name=r'\psi')
# f -scalar function on N
f=N.scalar_field(sqrt(x^2+y^2),name='f')

fplb=psi.pullback(f)      # psi^*f -scalar func. on M
fplb.disp()               # show pullback psi^*f

Out[2]:
$\displaystyle \begin{array}{llcl} {\psi}^*f:& U & \longrightarrow & \mathbb{R} \\ & \left(r, {\phi}\right) & \longmapsto & r \end{array}$

### Pullback of covariant tensor fields¶

If $\psi: M\to N$ is a smooth map between smooth manifolds, one can extend the pullback operation to a map $\psi^∗ : T^{(0,k)}N → T^{(0,k)}M$ by

$$(ψ^∗ t)_p (u_{1p} , . . . , u_{kp} ) = t_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} ), \label{}\tag{15.1}$$

for $u_{1p} , . . . , u_{kp} ∈ T_p M,\ \ p ∈ M.$ From the linearity of $d\psi_p$ it follows the multilinearity of $(\psi^*t)_p$.

If $f ∈ C^∞ (N )$, then the differential $d f$ of $f$ is a tensor field of type $(0,1)$, consequently from (15.1) it follows

$$(ψ^∗ d f )_p (v_p ) = d f_{ψ( p)} (dψ_p v_p ),$$

for $v_p ∈ T_p M.$
From the definitions of $df$ and $d\psi$ we have

$$d f_{ ψ( p)} (dψ_p v_p ) = dψ_p v_p ( f ) = v_p (ψ^∗ f ) = d(ψ^*f )_p (v_p ).$$

We have checked that for a smooth map $\ \psi : M → N\$ and $\ f\in C^∞ (N )$

$$ψ^∗ d f = d(ψ^∗ f ). \label{}\tag{15.2}$$

Example 15.2

Compute the pullback of differential of the scalar function from Example 15.1.

First we compute the left hand side of (15.2):

In [3]:
# continuation
df=f.differential()          # differential of f
dfplb=psi.pullback(df)       # pullback psi^*df
dfplb.disp(basis=c_rphi)     # display in polar coordinates

Out[3]:
$\displaystyle {\psi}^*\mathrm{d}f = \mathrm{d} r$

Here is the right hand side of (15.2):

In [4]:
fplb.differential().disp()  # d(psi^*f)

Out[4]:
$\displaystyle \mathrm{d}{\psi}^*f = \mathrm{d} r$

Example 15.3

Compute pullback of a scalar function and its differential for general mapping between two-dimensional manifolds $M$ and $N$

$$\psi: M \to N,\quad \psi(u,v)= (\psi_1(u,v),\psi_2(u,v)).$$
In [5]:
%display latex
M = Manifold(2, r'R^2_{uv}')  # manifold M
c_uv.<u,v>=M.chart()          # coordinates u,v
N = Manifold(2, r'R^2_{xy}')  # manifold N
c_xy.<x,y> = N.chart()        # coordinates x,y
# first component of psi
psi1=M.scalar_field(function('psi1')(u,v),name=r'\psi1')
# second component of psi
psi2=M.scalar_field(function('psi2')(u,v),name=r'\psi2')
# define psi
psi = M.diff_map(N,(psi1.expr(),psi2.expr()) ,name=r'\psi')
# scalar function f
f=N.scalar_field(function('f')(x,y),name='f')
fplb=psi.pullback(f)          # pullback psi^*f
fplb.disp()                   # show pullback psi^*f

Out[5]:
$\displaystyle \begin{array}{llcl} {\psi}^*f:& R^2_{uv} & \longrightarrow & \mathbb{R} \\ & \left(u, v\right) & \longmapsto & f\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \end{array}$
In [6]:
fplb.differential().disp()   # d(psi^*f)

Out[6]:
$\displaystyle \mathrm{d}{\psi}^*f = \left( \frac{\partial\,f}{\partial \left( \psi_{1}\left(u, v\right) \right)} \frac{\partial\,\psi_{1}}{\partial u} + \frac{\partial\,f}{\partial \left( \psi_{2}\left(u, v\right) \right)} \frac{\partial\,\psi_{2}}{\partial u} \right) \mathrm{d} u + \left( \frac{\partial\,f}{\partial \left( \psi_{1}\left(u, v\right) \right)} \frac{\partial\,\psi_{1}}{\partial v} + \frac{\partial\,f}{\partial \left( \psi_{2}\left(u, v\right) \right)} \frac{\partial\,\psi_{2}}{\partial v} \right) \mathrm{d} v$
In [7]:
df=f.differential()          # df
dfplb=psi.pullback(df)       # psi^*(df)
dfplb.disp()                 # show pullback of df

Out[7]:
$\displaystyle {\psi}^*\mathrm{d}f = \left( \frac{\partial\,f}{\partial \left( \psi_{1}\left(u, v\right) \right)} \frac{\partial\,\psi_{1}}{\partial u} + \frac{\partial\,f}{\partial \left( \psi_{2}\left(u, v\right) \right)} \frac{\partial\,\psi_{2}}{\partial u} \right) \mathrm{d} u + \left( \frac{\partial\,f}{\partial \left( \psi_{1}\left(u, v\right) \right)} \frac{\partial\,\psi_{1}}{\partial v} + \frac{\partial\,f}{\partial \left( \psi_{2}\left(u, v\right) \right)} \frac{\partial\,\psi_{2}}{\partial v} \right) \mathrm{d} v$

Example 15.4

Compute the pullback of 1-form $\ \ 𝛼=𝑎_0(𝑥,𝑦)d𝑥+𝑎_1(𝑥,𝑦)d𝑦\$ under the map $\psi$ from the previous example.

In [8]:
%display latex
M = Manifold(2, r'R^2_{uv}')  # manifold M
c_uv.<u,v>=M.chart()          # coordinates u,v
N = Manifold(2, r'R^2_{xy}')  # manifold N
c_xy.<x,y> = N.chart()        # coordinates x,y
# first component of psi
psi1=M.scalar_field(function('psi1')(u,v),name=r'\psi1')
# second component of psi
psi2=M.scalar_field(function('psi2')(u,v),name=r'\psi2')
# define psi
psi = M.diff_map(N,(psi1.expr(),psi2.expr()) ,name=r'\psi')
# scalar function f
f=N.scalar_field(function('f')(x,y),name='f')

al=N.diff_form(1,name=r'\alpha')       # 1-form al
astr=['a'+str(i) for i in range(2)]    # list of comp. names
af=[N.scalar_field(function(astr[i])(x,y),name=astr[i])
for i in range(2)]            # list of components
al[:]=af                               # define all components
al.disp()                              # show al

Out[8]:
$\displaystyle \alpha = a_{0}\left(x, y\right) \mathrm{d} x + a_{1}\left(x, y\right) \mathrm{d} y$
In [9]:
Manifold.options.omit_function_arguments=False
alplb=psi.pullback(al)                 # pullback psi^*al
alplb.disp()                           # show pullback of al

Out[9]:
$\displaystyle {\psi}^*\alpha = \left( a_{0}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{1}}{\partial u} + a_{1}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{2}}{\partial u} \right) \mathrm{d} u + \left( a_{0}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{1}}{\partial v} + a_{1}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{2}}{\partial v} \right) \mathrm{d} v$

Shorter result can be obtained omitting functions arguments.

In [10]:
Manifold.options.omit_function_arguments=True
alplb.disp()

Out[10]:
$\displaystyle {\psi}^*\alpha = \left( a_{0}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial u} + a_{1}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{2}}{\partial u} \right) \mathrm{d} u + \left( a_{0}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial v} + a_{1}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{2}}{\partial v} \right) \mathrm{d} v$

Example 15.5

Compute the pullback of a tensor field of (0,2)-type
$f_{00}(𝑥,𝑦)d𝑥⊗d𝑥+𝑓_{01}(𝑥,𝑦)d𝑥⊗d𝑦+𝑓_{10}(𝑥,𝑦)d𝑦⊗d𝑥+𝑓_{11}(𝑥,𝑦)d𝑦⊗d𝑦\ \$ on a two dimensional manifold under $\psi$ from Example 15.3.

In [11]:
# continuation
t = N.tensor_field(0,2, name='t')  # tensor field t of type (0,2)
# list of component names:
def fn(i,j): return 'f'+str(i)+str(j)
# list of component functions:
f=[[N.scalar_field(function(fn(j,k))(x,y),name=fn(j,k))
for k in range(2)] for j in range(2)]
t[:]=f                             # define all components of t
t.disp()                           # show t

Out[11]:
$\displaystyle t = f_{00} \mathrm{d} x\otimes \mathrm{d} x + f_{01} \mathrm{d} x\otimes \mathrm{d} y + f_{10} \mathrm{d} y\otimes \mathrm{d} x + f_{11} \mathrm{d} y\otimes \mathrm{d} y$
In [12]:
Manifold.options.omit_function_arguments=True
tplb=psi.pullback(t)               # pullback psi^*t
tplb.display_comp()                # show pullback components

Out[12]:
$\displaystyle \begin{array}{lcl} {\psi}^*t_{ \, u \, u }^{ \phantom{\, u}\phantom{\, u} } & = & f_{00}\left(\psi_{1}, \psi_{2}\right) \left(\frac{\partial\,\psi_{1}}{\partial u}\right)^{2} + f_{11}\left(\psi_{1}, \psi_{2}\right) \left(\frac{\partial\,\psi_{2}}{\partial u}\right)^{2} + {\left(f_{01}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial u} + f_{10}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial u}\right)} \frac{\partial\,\psi_{2}}{\partial u} \\ {\psi}^*t_{ \, u \, v }^{ \phantom{\, u}\phantom{\, v} } & = & f_{00}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial u} \frac{\partial\,\psi_{1}}{\partial v} + f_{10}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial v} \frac{\partial\,\psi_{2}}{\partial u} + {\left(f_{01}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial u} + f_{11}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{2}}{\partial u}\right)} \frac{\partial\,\psi_{2}}{\partial v} \\ {\psi}^*t_{ \, v \, u }^{ \phantom{\, v}\phantom{\, u} } & = & f_{00}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial u} \frac{\partial\,\psi_{1}}{\partial v} + f_{01}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial v} \frac{\partial\,\psi_{2}}{\partial u} + {\left(f_{10}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{1}}{\partial u} + f_{11}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{2}}{\partial u}\right)} \frac{\partial\,\psi_{2}}{\partial v} \\ {\psi}^*t_{ \, v \, v }^{ \phantom{\, v}\phantom{\, v} } & = & f_{00}\left(\psi_{1}, \psi_{2}\right) \left(\frac{\partial\,\psi_{1}}{\partial v}\right)^{2} + {\left(f_{01}\left(\psi_{1}, \psi_{2}\right) + f_{10}\left(\psi_{1}, \psi_{2}\right)\right)} \frac{\partial\,\psi_{1}}{\partial v} \frac{\partial\,\psi_{2}}{\partial v} + f_{11}\left(\psi_{1}, \psi_{2}\right) \frac{\partial\,\psi_{2}}{\partial v}^{2} \end{array}$

### Basic properties of pullback¶

For a smooth map $\psi: M \to N,\$ tensor fields $t$ and $s$ on $N$ of type $( 0,k)$ and constants $a,b\in R\$ we have

$$(ψ^*(at + bs))_p (u_{1p} , . . . , u_{kp} ) = (at + bs)_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\ = (at_{ψ( p)} + bs_{ψ( p)} )(dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\ = at_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} ) + bs_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\ = a(ψ^∗ t)_p (u_{1p} , . . . , u_{kp} ) + b(ψ^∗ s)_p (u_{1p} , . . . , u_{kp} )\\ = (aψ^∗ t + bψ^∗ s)_p (u_p , . . . , w_p ),$$

for $u_{1p} , . . . , u_{kp} ∈ T_p M$. Therefore we have the following linearity result.

Let $ψ : M → N$ be a smooth map. If $t$ and $s$ are tensor fields of type $( 0,k)$ on $N$ and $a, b ∈ R$, then

$$ψ^∗ (at + bs) = aψ^∗ t + bψ^∗ s. \label{}\tag{15.3}$$

For $\psi\$ as before, $f\in C^\infty(N)\$ and $t\in T^{(0.k)}N$, we have

$$(ψ^∗ ( f t)_p (u_{1p} , . . . , u_{kp} ) = ( f t)_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\ = f( ψ( p)) t_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} ) = (ψ^∗ f )( p) (ψ^∗ t)_p (u_{1p} , . . . , u_{kp} ) =((ψ^∗ f )(ψ^∗ t))_p (u_{1p} , . . . , u_{kp} ).$$

Thus $$ψ^∗ ( f t) = (ψ^∗ f )(ψ^∗ t). \label{}\tag{15.4}$$

If $\psi:M\to N\$ is smooth, $t$ and $s$ are tensor fields on $N$ of types $(0,k)$ and $(0,l)$ respectively, we have

$$ψ^*(t ⊗ s)_p(u_{1p},...,u_{(k+l)p}) = (t ⊗ s)_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{(k+l)p} )\\ = t_{ψ( p)} (dψ_p u_{1p} , . . .,dψ_p u_{kp}) s_{ψ( p)} (dψ_p u_{(k+1)p},. . . , dψ_p u_{(k+l)p} )\\ = (ψ^∗ t)_p (u_{1p} , . . .,u_{kp})(ψ^∗ s)_p (u_{(k+1)p},. . . , u_{(k+l)p} ) = ((ψ^∗ t) ⊗ (ψ^∗ s))_p (u_{1p} , . . . , u_{(k+l)p} ),$$

so

$$ψ^∗ (t ⊗ s) = (ψ^∗ t) ⊗ (ψ^∗ s). \label{}\tag{15.5}$$

If $M_1, M_2, M_3$ are smooth manifolds, $ψ_1 : M_1 → M_2$ and $ψ_2 : M_2 → M_3$ are smooth maps, then

$$(ψ_2 ◦ ψ_1 )^∗ t = (ψ_1^∗ ◦ ψ_2^∗ )\;t,\quad \mbox{for } t ∈ T^{(0,k)} M_3.$$

To prove this relation let us note that $$((ψ_2 ◦ ψ_1 )^∗ t)_p (u_{1p} , . . . , u_{kp} )\\ = t_{(ψ_2 ◦ψ_1 )( p)} (d(ψ_2 ◦ ψ_1 )_p u_{1p} , . . . , d(ψ_2 ◦ ψ_1 )_p u_{kp})\\ = t_{ψ_2(ψ_1(p))} (dψ_{2ψ_1( p)} (dψ_{1p} u_{1p} ), . . . , dψ_{2ψ_1( p)} (dψ_{1p} u_{kp} ))\\ = (ψ_2^∗ t)_{ψ 1 ( p)} (dψ_{1 p} u_{1p} , . . . , dψ_{1p} u_{kp} ) = (ψ_1^∗ (ψ_2^∗ t))_p (u_{1p} , . . . , u_{kp} ).$$

### Pullback of covariant tensor fields in components¶

If $t$ is a tensor field of type $(0,k)$ on $N$, given locally by $t = t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗dy^{i_k}$, then the pullback of $t$ under $ψ$ is given by

$$ψ^∗ t = ψ^∗ (t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗ dy^{i_k} )\\ = (ψ^∗ t_{i_1... i_k} )(ψ^∗ dy^{i_1} ) ⊗ · · · ⊗ (ψ^∗ dy^{i_k} )\\ = (ψ^∗ t_{i_1... i_k} ) d(ψ^∗ y^{i_1} ) ⊗ · · · ⊗ d(ψ^∗ y^{i_k} ).$$

Since $d(ψ^∗ y^i ) = (∂(ψ^∗ y^i )/∂ x^m) dx^m$, where $(x^1 , . . . , x^n )$ are coordinates on $M$, we have

$$ψ^∗ t = (ψ^∗ t_{i_1... i_k} )\frac{\partial(\psi^*y^{i_1})}{ \partial x^{m_1}}\ldots \frac{\partial(\psi^*y^{i_k})}{\partial x^{m_k}}dx^{m_1}⊗ · · · ⊗ dx^{m_k}. \tag{15.6}$$

The same formula can be written: $$ψ^∗ (t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗dy^{i_k} )= (t_{i_1... i_k}\circ\psi )\frac{\partial(y^{i_1}\circ\psi)}{ \partial x^{m_1}}\ldots \frac{\partial(y^{i_k}\circ\psi)}{\partial x^{m_k}}dx^{m_1}⊗ · · · ⊗ dx^{m_k}.$$
So to obtain $\psi^*t$, just replace in $t=t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗dy^{i_k}$
$t_{i_1... i_k}\to t_{i_1... i_k}\circ \psi\quad$ and $dy^i\to \frac{\partial(y^{i}\circ\psi)}{\partial x^{m}}dx^{m}.$

Example 15.6

Consider the covariant tensor field $\ g=dx\otimes dx+ dy\otimes dy+ dz\otimes dz$ in $R^3$ and its pullback under the embedding $\psi: S^2\to R^3$ defined by

$$\psi(\theta,\phi)=(\sin \theta \cos \phi, \sin \theta\sin \phi,\cos\theta).$$
In [13]:
%display latex
S2=manifolds.Sphere(2)     # manifolds.Sphere module contains the def.
Phi=S2.embedding()                      # of the embedding S^2 -> E^3
sph.<th,ph>=S2.spherical_coordinates()  # spherical coordinates
E=S2.ambient()                          # 3-dim Euclidean space
c_cart.<x,y,z> = E.cartesian_coordinates()  # Cartesian coord. in E^3
Phi.disp()                              # show Phi

Out[13]:
$\displaystyle \begin{array}{llcl} \iota:& \mathbb{S}^{2} & \longrightarrow & \mathbb{E}^{3} \\ \mbox{on}\ A : & \left(\theta, {\phi}\right) & \longmapsto & \left(x, y, z\right) = \left(\cos\left({\phi}\right) \sin\left(\theta\right), \sin\left({\phi}\right) \sin\left(\theta\right), \cos\left(\theta\right)\right) \end{array}$

metric is a predefined covariant tensor field of type (0,2) in $E^3$

In [14]:
g=E.metric()              # g is predefined tensor field of type (0,2)
g.disp()                  # show g

Out[14]:
$\displaystyle g = \mathrm{d} x\otimes \mathrm{d} x+\mathrm{d} y\otimes \mathrm{d} y+\mathrm{d} z\otimes \mathrm{d} z$

The pullback of g:

In [15]:
Phi.pullback(g).disp()                 # pullback of g

Out[15]:
$\displaystyle {\iota}^*g = \mathrm{d} \theta\otimes \mathrm{d} \theta + \sin\left(\theta\right)^{2} \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

Example 15.7

We can repeat the previous example in higher dimensions. For example we can compute the pullback of $\ g=dx_1\otimes dx_1+ dx_2\otimes dx_2+ dx_3\otimes dx_3+dx_4\otimes dx_4$ under the embedding $S^3\to E^4.$

In [16]:
%display latex
S3=manifolds.Sphere(3)          # manifolds.Sphere module contains the def.
Phi=S3.embedding()                             # of the embedding S^3 -> E^4
sph.<chi,theta,phi>=S3.spherical_coordinates() # and spherical coordinates
E=S3.ambient()                                 # Euclidean space E^4
c_cart.<x1,x2,x3,x4> = E.cartesian_coordinates() # Cartesian coord. in E^4
fun=Phi.coord_functions()[:];fun   # functions defining the emb. S^3 -> E^4

Out[16]:
$\displaystyle \left(\cos\left({\phi}\right) \sin\left(\chi\right) \sin\left(\theta\right), \sin\left(\chi\right) \sin\left({\phi}\right) \sin\left(\theta\right), \cos\left(\theta\right) \sin\left(\chi\right), \cos\left(\chi\right)\right)$

metric is a predefined covariant tensor field of type (0,2) in $E^4.$

In [17]:
g=E.metric()                   # g is a predefined (0,2) type tensor field
g.disp()                       # show g

Out[17]:
$\displaystyle g = \mathrm{d} {x_{1}}\otimes \mathrm{d} {x_{1}}+\mathrm{d} {x_{2}}\otimes \mathrm{d} {x_{2}}+\mathrm{d} {x_{3}}\otimes \mathrm{d} {x_{3}}+\mathrm{d} {x_{4}}\otimes \mathrm{d} {x_{4}}$

Pullback of g:

In [18]:
Phi.pullback(g).disp()        # pullback Psi^*g

Out[18]:
$\displaystyle {\iota}^*g = \mathrm{d} \chi\otimes \mathrm{d} \chi + \sin\left(\chi\right)^{2} \mathrm{d} \theta\otimes \mathrm{d} \theta + \sin\left(\chi\right)^{2} \sin\left(\theta\right)^{2} \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

Since the differential k-forms are special cases of covariant tensor fields, the pullback operation can be applied to such forms.

Example 15.8

Consider the same embedding $\psi: S^2\to R^3$ as in Example 15.6, defined by $$\psi(\theta,\phi)=(\sin \theta \cos \phi, \sin \theta\sin \phi,\cos\theta),$$ and compute the pullbacks $\psi^*(dx\wedge dy),\ \psi^*(dy\wedge dz),\ \psi^*(dx\wedge dz).$

In [19]:
%display latex
M = Manifold(3, 'R^3')            # manifold M=R^3
c_xyz.<x,y,z> = M.chart()         # Cartesian coordinates
N = Manifold(2, 'N')              # manifold N=S^2
c_sph.<theta,phi>=N.chart()       # spherical coordinates
# embedding S^2->R^3
psi = N.diff_map(M, (sin(theta)*cos(phi), sin(theta)*sin(phi),cos(theta)),
name='psi',latex_name=r'\psi')
E=c_xyz.coframe()                 # coframe (dx,dy,dz)
dx,dy,dz=E[:]                     # define dx,dy,dz
omega1=dx.wedge(dy)               # wedge prod. dx/\dy
omega2=dy.wedge(dz)               # wedge prod. dy/\dz
omega3=dx.wedge(dz)               # wedge prod. dx/\dz
plb=psi.pullback(omega1)          # pullback psi^*omega1
plb.disp()

Out[19]:
$\displaystyle {\psi}^* \mathrm{d} x \wedge \mathrm{d} y = \cos\left(\theta\right) \sin\left(\theta\right) \mathrm{d} \theta\wedge \mathrm{d} {\phi}$
In [20]:
plb=psi.pullback(omega2)          # pullback psi^*omega2
plb.disp()

Out[20]:
$\displaystyle {\psi}^* \mathrm{d} y \wedge \mathrm{d} z = \cos\left({\phi}\right) \sin\left(\theta\right)^{2} \mathrm{d} \theta\wedge \mathrm{d} {\phi}$
In [21]:
plb=psi.pullback(omega3)          # pullback psi^*omega3
plb.disp()

Out[21]:
$\displaystyle {\psi}^* \mathrm{d} x \wedge \mathrm{d} z = -\sin\left({\phi}\right) \sin\left(\theta\right)^{2} \mathrm{d} \theta\wedge \mathrm{d} {\phi}$

More examples of pullbacks of k-forms can be found in the next notebook.

## What's next?¶

Take a look at the notebook Exterior derivative.