{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 19. Lie derivative\n",
"\n",
"This notebook is part of the [Introduction to manifolds in SageMath](https://sagemanifolds.obspm.fr/intro_to_manifolds.html) by Andrzej Chrzeszczyk (Jan Kochanowski University of Kielce, Poland)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'SageMath version 9.6, Release Date: 2022-05-15'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"version()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Lie derivative of functions\n",
"\n",
"
\n",
"\n",
"If $ϕ$ is a one-parameter group of transformations on $M$ ([notebook 17](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/17Manifold_One_Parameter.ipynb)), then the map $ϕ_t : M →\n",
"M$, defined by $ϕ_t (x) = ϕ(x, t)$, is smooth and therefore for \n",
"$f ∈ C^∞ (M),\\ \\ $\n",
"$ϕ_t^*f = f\\circ \\phi_t\\ $\n",
" also belongs to $C^∞ (M)$. \n",
" \n",
"If $X$ is the infinitesimal generator of $ϕ$ ([notebook 17](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/17Manifold_One_Parameter.ipynb)), \n",
"then the **Lie derivative of $f$ with respect to $X$** is defined by\n",
"\n",
"\\begin{equation}\n",
"\\mathcal{L}_Xf=\\lim_{t\\to 0}\\frac{\\phi_t^*f-f}{t}\n",
"=\\frac{d}{dt}(\\phi_t^*f)\\Big|_{t=0}.\n",
"\\tag{19.1}\n",
"\\end{equation}\n",
"\n",
"\n",
"
\n",
"\n",
"**Example 19.1**\n",
"\n",
"Compute $\\ \\ \\mathcal{L}_Xf\\ \\ $ for $ f(x)=x^2\\cos y \\ \\ $ and \n",
"$\\ \\ X=-y\\frac{\\partial}{\\partial x}+x\\frac{\\partial}{\\partial y},$ using SageMath Manifolds."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle -x^{3} \\sin\\left(y\\right) - 2 \\, x y \\cos\\left(y\\right)\\)"
],
"text/latex": [
"$\\displaystyle -x^{3} \\sin\\left(y\\right) - 2 \\, x y \\cos\\left(y\\right)$"
],
"text/plain": [
"-x^3*sin(y) - 2*x*y*cos(y)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"M = Manifold(2, 'M') # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"f = M.scalar_field(x^2*cos(y)) # scalar function f on M\n",
"X = M.vector_field(name='X') # vector field X on M\n",
"X[:] = (-y, x) # components of X\n",
"f.lie_derivative(X).expr() # Lie derivative L_X(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Lie derivative of $f$ with respect to $X$ is the value of $\\ Xf$\n",
"\n",
"
\n",
"\n",
"Since the curve $ϕ_x$ given by $ϕ_x (t) = ϕ(x, t)$ is\n",
"the integral curve of $X$ that starts at $x$ we have\n",
"\n",
"$$\\lim_{t\\to 0}\\frac{\\phi_t^*f-f}{t}(x)=\n",
"\\lim_{t\\to 0}\\frac{f(\\phi_t(x))-f(x)}{t}\n",
"=\\lim_{t\\to 0}\\frac{f(\\phi(x,t))-f(x)}{t}$$\n",
"\n",
"$$=\\lim_{t\\to 0}\\frac{f(\\phi_x(t))-f(\\phi_x(0))}{t}\\\\\n",
"=(ϕ_x)'_0 ( f ) = X_x ( f )=(Xf)(x).\n",
"$$\n",
"We have checked that\n",
"\\begin{equation}\n",
"\\mathcal{L}_Xf=Xf.\n",
"\\tag{19.2}\n",
"\\end{equation}\n",
"\n",
"Thus **we can compute $\\ \\ \\mathcal{L}_Xf\\ \\ $ without any knowledge on the integral curves of $X$**.\n",
"\n",
"\n",
"
\n",
"\n",
"**Example 19.2**\n",
"\n",
"Check the result of the previous example using (19.2).\n",
"\n",
"
\n",
"\n",
"We have\n",
"\n",
"$$\\ \\ X(f)=(-y\\frac{\\partial}{\\partial x}+x\\frac{\\partial}{\\partial y})(x^2\\cos y )\\ \\ \n",
"=-y(2x)\\cos y +x(x^2)(-\\sin y)\\\\=-x^3\\sin y-2xy\\cos y.$$\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle -x^{3} \\sin\\left(y\\right) - 2 \\, x y \\cos\\left(y\\right)\\)"
],
"text/latex": [
"$\\displaystyle -x^{3} \\sin\\left(y\\right) - 2 \\, x y \\cos\\left(y\\right)$"
],
"text/plain": [
"-x^3*sin(y) - 2*x*y*cos(y)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# continuation\n",
"X(f).expr() # value of the vector field X on f"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.3**\n",
"\n",
"Check that SageMath `lie_derivative` method applied to functions coincides with application of (19.2)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle X = X^0\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{0}} } + X^1\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{1}} }\\)"
],
"text/latex": [
"$\\displaystyle X = X^0\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{0}} } + X^1\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{1}} }$"
],
"text/plain": [
"X = X0(x0, x1) ∂/∂x0 + X1(x0, x1) ∂/∂x1"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"N = 2 # dimension of manifold M\n",
"M = Manifold(N, 'M') # manifold M \n",
"c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M\n",
"x0, x1 = c_x[:] # coordinates x^0, x^1 of chart c_x as the Python variables x0, x1\n",
"X = M.vector_field(name='X') # vector field X\n",
"Xf=[M.scalar_field(function('X'+str(i), # list of components\n",
" latex_name='X'+'^'+str(i))(x0, x1))\n",
" for i in range(N)]\n",
"X[:] = Xf # define all components of X\n",
"X.disp()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{0}}, {x^{1}}\\right) & \\longmapsto & f\\left({x^{0}}, {x^{1}}\\right) \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{0}}, {x^{1}}\\right) & \\longmapsto & f\\left({x^{0}}, {x^{1}}\\right) \\end{array}$"
],
"text/plain": [
"M → ℝ\n",
"(x0, x1) ↦ f(x0, x1)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f = M.scalar_field(function('f')(x0, x1)) # scalar function on M\n",
"f.disp()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle X^0\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{0}}}f\\left({x^{0}}, {x^{1}}\\right) + X^1\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{1}}}f\\left({x^{0}}, {x^{1}}\\right)\\)"
],
"text/latex": [
"$\\displaystyle X^0\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{0}}}f\\left({x^{0}}, {x^{1}}\\right) + X^1\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{1}}}f\\left({x^{0}}, {x^{1}}\\right)$"
],
"text/plain": [
"X0(x0, x1)*diff(f(x0, x1), x0) + X1(x0, x1)*diff(f(x0, x1), x1)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f.lie_derivative(X).expr() # Lie derivative of f w.r.t. X"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Commutator of Lie derivatives of functions\n",
"\n",
"
\n",
"\n",
"From (19.2) it follows\n",
"$$\\mathcal{L}_X (\\mathcal{L}_Y f ) − \\mathcal{L}_Y (\\mathcal{L}_X f ) = XY f − YX f = [X, Y] f = \\mathcal{L}_{[X,Y]} f,\n",
"$$\n",
"i.e.\n",
"\\begin{equation}\n",
"\\mathcal{L}_X (\\mathcal{L}_Y f ) − \\mathcal{L}_Y (\\mathcal{L}_X f )=\n",
"\\mathcal{L}_{[X,Y]} f.\n",
"\\tag{19.3}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.4**\n",
"\n",
"Check in SageMath Manifolds that (19.3) holds for 2-dimensional manifolds."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\mathrm{True}\\)"
],
"text/latex": [
"$\\displaystyle \\mathrm{True}$"
],
"text/plain": [
"True"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# continuation\n",
"Y = M.vector_field(name='Y') # vector field Y\n",
"Yf = [M.scalar_field(function('Y'+str(i), # list of components\n",
" latex_name='Y'+'^'+str(i))(x0, x1)) \n",
" for i in range(N)]\n",
"Y[:] = Yf # define all components\n",
"L_XL_Yf = (f.lie_derivative(Y)).lie_derivative(X) # L_X(L_Y(f))\n",
"L_YL_Xf = (f.lie_derivative(X)).lie_derivative(Y) # L_Y(L_X(f))\n",
"L_bracket_f = f.lie_derivative(X.bracket(Y)) # L_{lie_brack(X,Y)}(f)\n",
"L_XL_Yf - L_YL_Xf == L_bracket_f # check (19.3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### $\\psi$-related vector fields\n",
"\n",
"
\n",
"\n",
"Let $ψ : M → N$ be a smooth map between two smooth manifolds. If\n",
"$X ∈ \\mathfrak{X}(M)$ and $Y ∈ \\mathfrak{X}(N ).$ \n",
"\n",
"$X$ and $Y$ are $ψ$-**related** if\n",
"\\begin{equation}\n",
"Y_{ψ(p)} = dψ_pX_p ,\n",
"\\tag{19.4}\n",
"\\end{equation}\n",
"for $p ∈ M.$\n",
" \n",
"If $f ∈ C^∞ (N )$, then from (19.4) and (8.8) it follows\n",
"\n",
"$$\n",
"(Y f ) (ψ( p)) = Y_{ψ( p)} ( f ) = dψ_p X_p ( f ) = X_p ( f ◦ ψ)\n",
"= (X( f ◦ ψ) )( p),$$\n",
"for $p ∈ M,$ i.e.,\n",
"\\begin{equation}\n",
"(Y f ) ◦ ψ = X( f ◦ ψ),\n",
"\\tag{19.5}\n",
"\\end{equation}
\n",
"for $f ∈ C^∞ (N).$\n",
"An equivalent formulation is\n",
"\n",
"\\begin{equation}\n",
"\\psi^*(Y f ) = X( \\psi^*f),\n",
"\\tag{19.6}\n",
"\\end{equation}\n",
"for $f ∈ C^∞ (N).$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Pullback of a vector field and its properties\n",
"\n",
"
\n",
"\n",
"\n",
"Let $M$ and $N$ be smooth manifolds, $ψ : M → N$ be a **diffeomorphism** and $X$ be a vector field on $N$. The **pullback of $X$ under** $\\psi$ is the vector field on $M$ defined by\n",
"\n",
"\\begin{equation}\n",
"(\\psi^∗ X)_x = d(ψ^{-1 })_{ψ(x)} X_{ ψ(x)}.\n",
"\\tag{19.7}\n",
"\\end{equation}\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"Note that (19.7) implies that \n",
"\n",
"\\begin{equation}\n",
"X_{\\psi(x)}=d\\psi_x(\\psi^*X)_x,\n",
"\\tag{19.7'}\n",
"\\end{equation}\n",
"\n",
"which means that \n",
"$ψ^∗ X$ and $X$ are $ψ$-related. If we replace in\n",
"(19.6) $Y$ by $X$ and $X$ by $\\psi^*X$ we obtain\n",
"\n",
"\\begin{equation}\n",
"\\psi^*(X f ) = (\\psi^*X)( \\psi^*f),\n",
"\\tag{19.8}\n",
"\\end{equation}\n",
"for $f ∈ C^∞ (N ).$\n",
"\n",
"We have also\n",
"$$ψ^∗ ( f X) = (ψ^∗ f )(ψ^∗ X),$$\n",
"\n",
"$$ψ^∗ (aX + bY) = aψ^∗X + bψ^∗ Y,$$ \n",
"\n",
"for $X, Y ∈ \\mathfrak{X}(N ), f ∈ C^∞ (N ),$ and $a, b ∈ R.$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In fact by (19.7)\n",
"\n",
"$$ [ψ^∗( f X)]_x = d(ψ^{−1} )_{ψ(x)} ( f X)_{ψ(x)} \n",
"= d(ψ^{−1} )_{ψ(x)} (f (ψ(x)) X_{ψ(x)})\\\\\n",
"= f (ψ(x)) d(ψ^{−1} )_{ψ(x)} X_{ψ(x)} = (ψ^∗ f )(x) (ψ^∗ X)_x =\n",
"[(ψ^∗ f )(ψ^∗ X)]_x,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and\n",
"\n",
"$$\n",
"[ψ^∗ (aX + bY)]_x = d(ψ^{−1})_{ψ(x)} (aX + bY)_{ψ(x)} \n",
"= d(ψ^{−1} )_{ψ(x)} (aX_{ψ(x)} + bY_{ψ(x)} )\n",
"= ad(ψ^{ −1} )_{ψ(x)} X_{ψ(x)} + bd(ψ^{−1} )_{ψ(x)} Y_{ψ(x)}\n",
"= [aψ^∗ X + bψ^∗ Y]_x.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"If $ψ : M → N$ is a **diffeomorphism** of smooth manifolds $M$, $N$ and $χ$ is a one-parameter group of transformations on $N$ whose infinitesimal generator is $Y$,\n",
"then $ϕ_t = ψ^{−1} ◦ χ_t ◦ ψ$ **is a one-parameter group of transformations on $M$ whose\n",
"infinitesimal generator is** $ψ^∗ Y$.\n",
"\n",
"This relation follows from\n",
"\n",
"$$ϕ_s ◦ϕ_t = (ψ^{−1} ◦ χ_s ◦ ψ) ◦ (ψ^{−1} ◦ χ_t ◦ ψ) \\\\\n",
"= ψ^{−1} ◦ χ_s ◦ χ_t ◦ ψ =\n",
"ψ^{−1} ◦ χ_{s+t} ◦ ψ = ϕ_{s+t} .$$\n",
"\n",
"\n",
"
\n",
"\n",
"If $ψ_1 : M_1 → M_2$ and $ψ_2 : M_2 → M_3$ are diffeomorphisms, then $$(ψ_2 ◦ ψ_1 )^∗ X = (ψ_1^∗ ◦ ψ_2^∗ )X,$$ for $X ∈ \\mathfrak{X}(M_3 )$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The last equality is true, since\n",
"\n",
"$$\n",
"[(ψ_2 ◦ ψ_1 )^∗ X]_x = d((ψ_2 ◦ ψ_1 )^{−1})\n",
"_{ (ψ_2 ◦ψ_1 )(x)}X_{( ψ_2 \\circ ψ_1 )(x)}\\\\\n",
"= (d(ψ_1^{−1})_{ψ_1 (x)}\\circ d(ψ_2^{-1})_{\\psi_2(\\psi_1(x))})\n",
"X_{\\psi_2(ψ_1 (x))}\\\\\n",
"=d(\\psi_1^{-1})_{\\psi_1(x)}(\\psi_2^*X)_{\\psi_1(x)}\n",
"= [ψ_1^∗ (ψ_2^∗ X)]_x .\n",
"$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Lie derivative of a vector field\n",
"\n",
"
\n",
"\n",
"If $ϕ$ is a one-parameter group of transformations on a manifold $M$ and $X$ its infinitesimal generator, then for any vector field $Y$ on $M$, the Lie derivative of $Y$ with respect to $X$ is defined by \n",
"\\begin{equation}\n",
"(\\mathcal{L}_XY)_x=\\lim_{t→0}\\frac{(\\phi^*_tY)_x-Y_x}{t}\n",
"=\\frac{d}{dt}(\\phi_t^*Y)_x\\Big|_{t=0}.\n",
"\\tag{9.11}\n",
"\\end{equation}\n",
"\n",
"\n",
"
\n",
"\n",
"### Lie derivatives of vector fields are equal to Lie brackets \n",
"\n",
"
\n",
"\n",
"If $X, Y ∈ \\mathfrak{X}(M)$, then \n",
"\\begin{equation}\n",
"\\mathcal{L}_XY=[X,Y].\n",
"\\tag{19.12}\n",
"\\end{equation}\n",
"\n",
"To prove this formula, we will check first a form of Leibniz rule.\n",
"If $ \\phi$ is a one-parameter group of transformations on $M$ whose infinitesimal generator is $X$, then\n",
"\n",
"$$\\mathcal{L}_X(Yf)\n",
"=\\lim_{t→0}\\frac{\\phi^*_t(Yf)-Yf}{t}\n",
"=\\lim_{t→0}\\frac{(\\phi^*_tY)(\\phi_t^*f)-Yf}{t}$$\n",
"$$=\\lim_{t→0}\\Big[(\\phi^*_tY)\\frac{\\phi^*_tf-f}{t}\n",
"+\\frac{\\phi^*_tY-Y}{t}f\\Big]=Y(\\mathcal{L}_Xf)+(\\mathcal{L}_XY)f.\n",
"$$\n",
"\n",
"Notice that $(\\phi^*_tY)_x=d(\\phi_t^{-1})_{\\phi_t(x)}Y_{\\phi_t(x)}=\n",
"d(\\phi_{-t})_{\\phi_t(x)}Y_{\\phi_t(x)}$. We have also\n",
"$\\phi_t(x)\\to x, \\ \\phi_{-t}(x)\\to x$ as $t\\to 0$ and in local coordinates the components of the matrix of the differential \n",
"$d(ϕ_{−t} )_{\\phi_t(x)} : T_{ϕ_t(x)} M → T_x M$\n",
"are $\\displaystyle \\frac{∂ϕ^i(−t, ϕ(t, x))}{∂x^j}.$\n",
"Smoothness of $X$ implies smoothness of $\\phi$, which implies that \n",
"\n",
"$$\\displaystyle \\frac{∂ϕ^i(−t, ϕ(t, x))}{∂x^j}\\to \\frac{\\partial\\phi^i(0,x)}{\\partial x^j}=\\frac{\\partial x^i}{\\partial x^j}=\\delta^i_j\\quad\\text {as}\\ t\\to 0.$$\n",
"Consequently, if $Y = Y^j \\frac{\\partial}{∂ x^j}$, then\n",
"$$d(ϕ_{−t} )_{\\phi_t(x)}Y_{ϕ_t (x)} =\n",
"\\frac{∂ϕ^i (−t, ϕ(t, x))}{ ∂ x^j}Y^j(ϕ(t, x))\\frac{∂}{∂x^i}\\Big|_{x}\\to Y_x\\quad \\mbox{as } t\\to 0.\n",
"$$\n",
"\n",
"Since by (19.2) $\\mathcal{L}_Xf=Xf,\\ $ we have\n",
"\n",
"$$X(Yf)=\\mathcal{L}_X(Yf)=Y(Xf)+(\\mathcal{L}_XY)f,$$\n",
"so\n",
"$$\\mathcal{L}_X(Yf)= X(Yf)-Y(Xf)=[X,Y]f,$$\n",
"i.e., (19.12) holds true.\n",
"\n",
"Thus **we can compute $\\ \\ \\mathcal{L}_XY\\ \\ $ without any knowledge on the integral curves of $X$**.\n",
"\n",
"\n",
"
\n",
"\n",
"**Example 19.5**\n",
"\n",
"Compute $\\ \\ \\mathcal{L}_XY\\ \\ $ for $\\ \\ X=-y\\frac{\\partial}{\\partial x}+x\\frac{\\partial}{\\partial y}\\ \\ $\n",
"and\n",
"$\\ \\ Y=(1-x)\\frac{\\partial}{\\partial x}+(x-y)\\frac{\\partial}{\\partial y}.$"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"%display latex\n",
"M = Manifold(2, 'M') # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"X = M.vector_field(-y, x, name='X') # vector field X\n",
"Y = M.vector_field(1-x, x-y, name='Y') # vector field Y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we use the `lie_derivative` method:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle x \\frac{\\partial}{\\partial x } + \\left( -y - 1 \\right) \\frac{\\partial}{\\partial y }\\)"
],
"text/latex": [
"$\\displaystyle x \\frac{\\partial}{\\partial x } + \\left( -y - 1 \\right) \\frac{\\partial}{\\partial y }$"
],
"text/plain": [
"x ∂/∂x + (-y - 1) ∂/∂y"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y_X = Y.lie_derivative(X) # Lie derivative L_X(Y)\n",
"Y_X.disp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and next the Lie bracket for comparison:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[X,Y\\right] = x \\frac{\\partial}{\\partial x } + \\left( -y - 1 \\right) \\frac{\\partial}{\\partial y }\\)"
],
"text/latex": [
"$\\displaystyle \\left[X,Y\\right] = x \\frac{\\partial}{\\partial x } + \\left( -y - 1 \\right) \\frac{\\partial}{\\partial y }$"
],
"text/plain": [
"[X,Y] = x ∂/∂x + (-y - 1) ∂/∂y"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.bracket(Y).disp() # [X,Y]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.6**\n",
"\n",
"Use SageMath to check that (19.12) holds for 2-dimensional manifolds."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\mathrm{True}\\)"
],
"text/latex": [
"$\\displaystyle \\mathrm{True}$"
],
"text/plain": [
"True"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"\n",
"N = 2 # dimension of manifold M\n",
"M = Manifold(N, 'M') # manifold M \n",
"c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M\n",
"x0, x1 = c_x[:] # coordinates x^0, x^1 of chart c_x as the Python variables x0, x1\n",
"X = M.vector_field(name='X') # vector field X\n",
"Xf = [M.scalar_field(function('X'+str(i), # list of components\n",
" latex_name='X'+'^'+str(i))(x0,x1)) \n",
" for i in range(N)]\n",
"X[:] = Xf # define all components of X\n",
"Y = M.vector_field(name='Y') # vector field Y\n",
"Yf = [M.scalar_field(function('Y'+str(i), # list of components\n",
" latex_name='Y'+'^'+str(i))(x0,x1)) \n",
" for i in range(N)]\n",
"Y[:] = Yf # define all components of Y\n",
"Y.lie_derivative(X) == X.bracket(Y) # check (19.12)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Basic properties of Lie derivative of vector fields\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using properties of the Lie bracket from [notebook 12](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/12Manifold_VectorFields_cont.ipynb), one can check that if $X, Y ∈ \\mathfrak{X}(M)$ and $f ∈ C^∞ (M),$ then\n",
"\n",
"$$\\mathcal{L}_X(fY)=[X, f Y] = f [X, Y] + (X f )Y = f \\mathcal{L}_X Y + (\\mathcal{L}_X f )Y,$$\n",
"and\n",
"$$\\mathcal{L}_X (Y + Z) = [X, Y + Z] = [X, Y] + [X, Z] = \\mathcal{L}_X Y + \\mathcal{L}_X Z.$$\n",
"\n",
"If $X, Y, Z \\in \\mathfrak{X}(M)$, then using Jacobi identity ([notebook 12](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/12Manifold_VectorFields_cont.ipynb)) we obtain\n",
"\n",
"$$\\mathcal{L}_X (\\mathcal{L}_Y Z) − \\mathcal{L}_Y (\\mathcal{L}_X Z) = [X, [Y, Z]] − [Y, [X, Z]] = \n",
"[X, [Y, Z]] + [Y, [Z, X]]\\\\\n",
"= −[Z, [X, Y]]= [[X, Y], Z] =\\mathcal{L}_{[X,Y]} Z.$$\n",
"\n",
"
\n",
"\n",
"**Example 19.7**\n",
"\n",
"For $\\ X,Y$ from example 19.5 and \n",
"$\\ Z=y\\frac{\\partial}{\\partial x}+x\\frac{\\partial}{\\partial y}\\ \\ $ compute \n",
"$\\mathcal{L}_X (\\mathcal{L}_Y Z) − \\mathcal{L}_Y (\\mathcal{L}_X Z)\\ \\ $ and $ \\mathcal{L}_{[X,Y]} Z.$"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( -2 \\, y - 1 \\right) \\frac{\\partial}{\\partial x } + 2 \\, x \\frac{\\partial}{\\partial y }\\)"
],
"text/latex": [
"$\\displaystyle \\left( -2 \\, y - 1 \\right) \\frac{\\partial}{\\partial x } + 2 \\, x \\frac{\\partial}{\\partial y }$"
],
"text/plain": [
"(-2*y - 1) ∂/∂x + 2*x ∂/∂y"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"M = Manifold(2, 'M') # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"X = M.vector_field(-y, x, name='X') # vector field X\n",
"Y = M.vector_field(1-x, x-y, name='Y') # vector field Y\n",
"Z = M.vector_field(y, x, name='Z') # vector field Z\n",
"Z_YX = (Z.lie_derivative(Y)).lie_derivative(X) # L_X(L_Y(Z))\n",
"Z_XY = (Z.lie_derivative(X)).lie_derivative(Y) # L_Y(L_X(Z))\n",
"(Z_YX - Z_XY).disp() # L_X(L_Y(Z)) - L_Y(L_X(Z))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( -2 \\, y - 1 \\right) \\frac{\\partial}{\\partial x } + 2 \\, x \\frac{\\partial}{\\partial y }\\)"
],
"text/latex": [
"$\\displaystyle \\left( -2 \\, y - 1 \\right) \\frac{\\partial}{\\partial x } + 2 \\, x \\frac{\\partial}{\\partial y }$"
],
"text/plain": [
"(-2*y - 1) ∂/∂x + 2*x ∂/∂y"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Z_brXY = Z.lie_derivative(X.bracket(Y)) # L_[X,Y](Z)\n",
"Z_brXY.disp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Some properties of pullback of covariant tensor fields\n",
"\n",
"
\n",
"\n",
"Let us recall (from [notebook 15](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/15Manifold_Pullback.ipynb)) that if $M$ and $N$ are smooth manifolds and $ψ : M → N$ is a smooth map then the pullback $\\ \\psi^*t\\ $of a smooth tensor field $t\\in T^{(0,k)}N$ is defined by\n",
"\n",
"\\begin{equation}\n",
"(ψ^∗ t)_p (X_{1p} , . . . , X_{kp} ) = t_{ψ( p)} (dψ_p X_{1p} , . . . , dψ_p X_{kp} ),\n",
"\\tag{19.13}\n",
"\\end{equation}\n",
"\n",
"for $X_{1p},\\ldots,X_{kp}\\in T_pM$ and $p\\in M$.\n",
"\n",
"\n",
"In (15.2) we have proved that for $f ∈ C^∞ (N )$\n",
"\\begin{equation}\n",
"ψ^∗ d f=d(\\psi^*f),\n",
"\\tag{9.14}\n",
"\\end{equation}\n",
"\n",
"and in (15.3)-(15.5) we justified the relations (for covariant tensor fields $t,s$ and $f\\in C^\\infty(M),\\ a,b\\in R$)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\\begin{equation}\n",
"\\begin{matrix}\n",
"ψ^∗ (at + bs) = aψ^∗ t + bψ^∗ s,\\\\\n",
"ψ^∗ ( f t) = (ψ^* f )(ψ^* t),\n",
"\\end{matrix}\n",
"\\tag{19.15}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\\begin{equation}\n",
"ψ^∗ (t ⊗ s) = (ψ^∗ t) ⊗ (ψ^∗ s).\n",
"\\tag{19.16}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In [notebook 15](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/15Manifold_Pullback.ipynb) we also have checked that if $M_1,M_2,M_3\\ $ are smooth manifolds and $ψ_1 : M_1 → M_2$ and $ψ_2 : M_2 → M_3$ are smooth maps, then\n",
"\\begin{equation}\n",
"(ψ_2 ◦ ψ_1 )^∗ t = (ψ_1^∗ ◦ ψ_2^∗ )\\,t.\n",
"\\tag{19.17}\n",
"\\end{equation}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Lie derivative of covariant tensor fields\n",
"\n",
"
\n",
"\n",
"If $ϕ$ is a one-parameter group of transformations on $M$ and $X$ its infinitesimal generator, then for any tensor field $t\\in T^{(0,k)}M$ the Lie derivative of $t$ with respect to $X$ is defined by \n",
"\\begin{equation}\n",
"(\\mathcal{L}_Xt)_x=\\lim_{h→0}\\frac{(\\phi^*_ht)_x-t_x}{h}\n",
"=\\frac{d}{dt}(\\phi_t^*t)_x\\Big|_{t=0}.\n",
"\\tag{9.18}\n",
"\\end{equation}\n",
"\n",
"
\n",
"\n",
"For $t\\in T^{(0,k)}M,\\ s\\in T^{(0,m)}M$ we have\n",
"\n",
"\\begin{equation}\n",
"\\begin{matrix}\n",
"\\displaystyle\n",
"\\mathcal{L}_X(t\\otimes s)\n",
"=\\lim_{h→0}\\frac{\\phi^*_h(t\\otimes s)-t\\otimes s}{h}\n",
"=\\lim_{h→0}\\frac{(\\phi^*_ht)\\otimes (\\phi_h^*s)-t\\otimes s}{h}\\\\\n",
"\\displaystyle\n",
"=\\lim_{h→0}\\Big[(\\phi^*_ht)\\otimes\\frac{\\phi^*_hs-s}{h}\n",
"+\\frac{\\phi^*_ht-t}{h}\\otimes s\\Big]\\\\\n",
"\\displaystyle\n",
"=t\\otimes(\\mathcal{L}_X s)+(\\mathcal{L}_Xt)\\otimes s.\n",
"\\end{matrix}\n",
"\\tag{19.19}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For $t,s\\in T^{(0,k)}M$ and $a,b\\in R$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\\begin{equation}\n",
"\\begin{matrix}\n",
"\\displaystyle\n",
"\\mathcal{L}_X(at+bs)\n",
"=\\lim_{h→0}\\frac{\\phi^*_h(at+bs)-(at+bs)}{h}\\\\\n",
"\\displaystyle\n",
"=\\lim_{h→0}\\frac{a\\phi^*_ht+b\\phi^*_hs-at-bs}{h}\n",
"=a\\mathcal{L}_Xt +b\\mathcal{L}_Xs.\n",
"\\end{matrix}\n",
"\\tag{19.20}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For $f ∈ C^∞ (M)$ and $t\\in T^{(0,k)}M$\n",
"\n",
"\\begin{equation}\n",
"\\begin{matrix}\n",
"\\displaystyle\n",
"\\mathcal{L}_X(ft)\n",
"=\\lim_{h→0}\\frac{\\phi^*_h(ft)-ft}{h}\n",
"=\\lim_{h→0}\\frac{(\\phi^*_hf)(\\phi_h^*t)-ft}{h}\\\\\n",
"\\displaystyle\n",
"=\\lim_{h→0}\\Big[\\phi^*_hf\\frac{\\phi^*_ht-t}{h}\n",
"+\\frac{\\phi^*_hf-f}{h}t\\Big]\n",
"=f(\\mathcal{L}_X t)+(\\mathcal{L}_Xf)t.\n",
"\\end{matrix}\n",
"\\tag{19.21}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\\begin{equation}\n",
"\\begin{matrix}\n",
"\\displaystyle\n",
"\\mathcal{L}_Xdf\n",
"=\\lim_{h→0}\\frac{\\phi^*_hdf-df}{h}\n",
"=\\lim_{h→0}\\frac{d(\\phi^*_hf)-df}{h}\n",
"=d(\\mathcal{L}_Xf). \n",
"\\end{matrix}\n",
"\\tag{19.22}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Lie derivative of covariant tensor fields in local components\n",
"\n",
"
\n",
"\n",
"If $t\\in T^{(0,k)}M$ is given locally by $t = t_{i_1... i_k} dx^{i_1} ⊗· · · ⊗ dx^{i_k}$, then\n",
"\n",
"$$\n",
"\\mathcal{L}_X t = \n",
"\\mathcal{L}_X (t_{i_1... i_k} dx^{i_1} ⊗ · · · ⊗ dx^{i_k} )\\\\\n",
"= (\\mathcal{L}_X t_{i_1... i_k})dx^{i_1} ⊗ · · · ⊗ dx^{i_k} \\\\ \n",
"+ t_{i_1... i_k}\\big( \\mathcal{L}_X dx^{i_1} ⊗ · · · ⊗ dx^{i_k} + · · · +\n",
"dx^{i_1} ⊗ · · · ⊗ \\mathcal{L}_Xdx^{i_k}\\big)\\\\\n",
"=(Xt_{i_1... i_k})dx^{i_1} ⊗ · · · ⊗ dx^{i_k}\\\\\n",
"+ t_{i_1... i_k}\\big[d (\\mathcal{L}_X x^{i_1}) ⊗ · · · ⊗ dx^{i_k} + · · · +\n",
"dx^{i_1} ⊗ · · · ⊗ d(\\mathcal{L}_Xx^{i_k})\\big].\\\\\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If $X = X^m \\frac{∂}{∂ x^m}$, then\n",
"\n",
"$$\n",
"\\mathcal{L}_Xx^i=Xx^i=\\big(X^m \\frac{∂}{∂ x^m}\\big)x^i=X^i,\n",
"$$\n",
"\n",
"consequently\n",
"\n",
"\\begin{equation}\n",
"d(\\mathcal{L}_Xx^i)=dX^i=\\frac{∂X^i}{∂ x^m}dx^m,\n",
"\\tag{19.22'}\n",
"\\end{equation}\n",
"\n",
"and\n",
"\\begin{eqnarray*}\n",
"&\\mathcal{L}_X t = (Xt_{i_1... i_k} ) dx^{i_1} ⊗ · · · ⊗ dx^{i_k}\\\\\n",
"&+t_{i_1... i_k} \\big(\\frac{∂X^{i_1}}{∂ x^m}dx^m\\otimes\\ldots\\otimes dx^{i_k}+\\ldots+dx^{i_1}\\otimes\\ldots\\otimes\\frac{∂X^{i_k}}{∂ x^m}dx^m\\Big)\\\\\n",
"&=\\big(X^m\\frac{\\partial t_{i_1... i_k}}{∂ x^m}+\n",
"t_{i_m... i_k}\\frac{∂X^{i_m}}{∂ x^{i_1}}+\\ldots\n",
"+t_{i_1... i_m}\\frac{∂X^{i_m}}{∂ x^{i_k}}\\Big)dx^{i_1} ⊗ · · · ⊗ dx^{i_k}.\n",
"\\tag{19.23}\n",
"\\end{eqnarray*}\n",
"\n",
"
\n",
"\n",
"**Example 19.8**\n",
"\n",
"Compute $\\ \\mathcal{L}_Xt\\ \\ $ for $\\ X=(1-x)\\frac{\\partial}{\\partial x}+(x-y)\\frac{\\partial}{\\partial y}\\ \\ $ and $\\ \\ t=xdx⊗dx+dx⊗d𝑦+𝑦d𝑦⊗dx.$\n",
"\n",
"
\n",
"\n",
"First define the tensor field and vector field:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle t = x \\mathrm{d} x\\otimes \\mathrm{d} x +\\mathrm{d} x\\otimes \\mathrm{d} y + y \\mathrm{d} y\\otimes \\mathrm{d} x\\)"
],
"text/latex": [
"$\\displaystyle t = x \\mathrm{d} x\\otimes \\mathrm{d} x +\\mathrm{d} x\\otimes \\mathrm{d} y + y \\mathrm{d} y\\otimes \\mathrm{d} x$"
],
"text/plain": [
"t = x dx⊗dx + dx⊗dy + y dy⊗dx"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"M = Manifold(2, 'M') # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"e_xy = c_xy.frame() # local basis of vector fields\n",
"t = M.tensor_field(0, 2, {e_xy: [[x, 1], [y, 0]]}, name='t') \n",
"t.disp() # tensor field t of (0,2)-type "
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left(M, \\left(\\frac{\\partial}{\\partial x },\\frac{\\partial}{\\partial y }\\right)\\right)\\)"
],
"text/latex": [
"$\\displaystyle \\left(M, \\left(\\frac{\\partial}{\\partial x },\\frac{\\partial}{\\partial y }\\right)\\right)$"
],
"text/plain": [
"Coordinate frame (M, (∂/∂x,∂/∂y))"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e_xy # show the local basis"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle X = \\left( -x + 1 \\right) \\frac{\\partial}{\\partial x } + \\left( x - y \\right) \\frac{\\partial}{\\partial y }\\)"
],
"text/latex": [
"$\\displaystyle X = \\left( -x + 1 \\right) \\frac{\\partial}{\\partial x } + \\left( x - y \\right) \\frac{\\partial}{\\partial y }$"
],
"text/plain": [
"X = (-x + 1) ∂/∂x + (x - y) ∂/∂y"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = M.vector_field({e_xy: [1-x, x-y]}, name='X')\n",
"X.disp() # vector field X"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can compute $\\ \\mathcal{L}_Xt:\\ \\ $ "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( -3 \\, x + y + 2 \\right) \\mathrm{d} x\\otimes \\mathrm{d} x -2 \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( x - 3 \\, y \\right) \\mathrm{d} y\\otimes \\mathrm{d} x\\)"
],
"text/latex": [
"$\\displaystyle \\left( -3 \\, x + y + 2 \\right) \\mathrm{d} x\\otimes \\mathrm{d} x -2 \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( x - 3 \\, y \\right) \\mathrm{d} y\\otimes \\mathrm{d} x$"
],
"text/plain": [
"(-3*x + y + 2) dx⊗dx - 2 dx⊗dy + (x - 3*y) dy⊗dx"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lt = t.lie_derivative(X) # Lie derivative L_X(t)\n",
"lt.display(e_xy)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.9**\n",
"\n",
"For a deeper understanding of the formula (19.23) let us take a more general example.\n",
"\n",
"Let $\\ \\ t=𝑡_{00}d𝑥^0⊗d𝑥^0+𝑡_{01}d𝑥^0⊗d𝑥^1+𝑡_{10}d𝑥^1⊗d𝑥^0+𝑡_{11}d𝑥^1⊗d𝑥^1.\\ \\ $"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle t = t_{00} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}\\)"
],
"text/latex": [
"$\\displaystyle t = t_{00} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}$"
],
"text/plain": [
"t = t00 dx0⊗dx0 + t01 dx0⊗dx1 + t10 dx1⊗dx0 + t11 dx1⊗dx1"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N=2 # dimension of manifold M\n",
"M = Manifold(N, 'M') # manifold M \n",
"c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M\n",
"x0, x1 = c_x[:] # coordinates x^0, x^1 of chart c_x as the Python variables x0, x1\n",
"t = M.tensor_field(0,2, name='t') # tensor field t of type (0,2) \n",
"def f2(i,j): return 't'+str(i)+str(j) # names of components\n",
" # component functions:\n",
"f1 = [[M.scalar_field(function(f2(j,k))(x0,x1), name=f2(j,k)) \n",
" for k in range(N)] for j in range(N)]\n",
"t[:] = f1 # define all components of t\n",
"%display latex\n",
"Manifold.options.omit_function_arguments=True \n",
"t.disp() # show tensor field t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and $\\ \\ X=X^0\\frac{\\partial}{\\partial x^0}+X^1\\frac{\\partial}{\\partial x^1}$"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle X = X^0 \\frac{\\partial}{\\partial {x^{0}} } + X^1 \\frac{\\partial}{\\partial {x^{1}} }\\)"
],
"text/latex": [
"$\\displaystyle X = X^0 \\frac{\\partial}{\\partial {x^{0}} } + X^1 \\frac{\\partial}{\\partial {x^{1}} }$"
],
"text/plain": [
"X = X0 ∂/∂x0 + X1 ∂/∂x1"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# continuation\n",
"X = M.vector_field(name='X') # vector field X\n",
"Xf=[M.scalar_field(function('X'+str(i), # list of components\n",
" latex_name='X'+'^'+str(i))(x0,x1))\n",
" for i in range(N)]\n",
"X[:] = Xf # define all comp. of X\n",
"X.disp() # show vect.field X"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Compute the Lie derivative$\\ \\mathcal{L}_Xt:\\ \\ $ "
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( 2 \\, t_{00} \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + {\\left(t_{01} + t_{10}\\right)} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t_{00}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{00}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + \\left( t_{01} \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + t_{00} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t_{11} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + t_{01} \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t_{01}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{01}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + \\left( t_{10} \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + t_{00} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t_{11} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + t_{10} \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t_{10}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{10}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + \\left( {\\left(t_{01} + t_{10}\\right)} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + 2 \\, t_{11} \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t_{11}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{11}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}\\)"
],
"text/latex": [
"$\\displaystyle \\left( 2 \\, t_{00} \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + {\\left(t_{01} + t_{10}\\right)} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t_{00}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{00}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + \\left( t_{01} \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + t_{00} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t_{11} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + t_{01} \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t_{01}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{01}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + \\left( t_{10} \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + t_{00} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t_{11} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + t_{10} \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t_{10}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{10}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + \\left( {\\left(t_{01} + t_{10}\\right)} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + 2 \\, t_{11} \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t_{11}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{11}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}$"
],
"text/plain": [
"(2*t00*d(X0)/dx0 + (t01 + t10)*d(X1)/dx0 + X0*d(t00)/dx0 + X1*d(t00)/dx1) dx0⊗dx0 + (t01*d(X0)/dx0 + t00*d(X0)/dx1 + t11*d(X1)/dx0 + t01*d(X1)/dx1 + X0*d(t01)/dx0 + X1*d(t01)/dx1) dx0⊗dx1 + (t10*d(X0)/dx0 + t00*d(X0)/dx1 + t11*d(X1)/dx0 + t10*d(X1)/dx1 + X0*d(t10)/dx0 + X1*d(t10)/dx1) dx1⊗dx0 + ((t01 + t10)*d(X0)/dx1 + 2*t11*d(X1)/dx1 + X0*d(t11)/dx0 + X1*d(t11)/dx1) dx1⊗dx1"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lt = t.lie_derivative(X)\n",
"lt.disp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For comparison, using (19.23) without simplifications we obtain \n",
"\n",
"$$\n",
"\\begin{matrix}\n",
"\\Big(X^m\\frac{\\partial t_{i_1... i_k}}{∂ x^m} &\n",
"+t_{i_m... i_k}\\frac{∂X^{i_m}}{∂ x^{i_1}}+ &\n",
"...+t_{i_1... i_m}\\frac{∂X^{i_m}}{∂ x^{i_k}}\\Big) &\n",
"dx^{i_1} ⊗ · · · ⊗ dx^{i_k}\\\\\n",
"=\\Big(X^0\\frac{\\partial t_{00}}{\\partial x^0}+X^1 \\frac{\\partial t_{00}}{\\partial x^1} &\n",
"+t_{00}\\frac{\\partial X^0}{\\partial x^0}+t_{10}\\frac{\\partial X^1}{\\partial x^0} &\n",
"+t_{00}\\frac{\\partial X^0}{\\partial x^0}+t_{01}\\frac{\\partial X^1}{\\partial x^0} \\Big)&\n",
"dx^0\\otimes dx^0\\\\\n",
"+\\Big(X^0\\frac{\\partial t_{01}}{\\partial x^0}+X^1 \\frac{\\partial t_{01}}{\\partial x^1} &\n",
"+t_{01}\\frac{\\partial X^0}{\\partial x^0}+t_{11}\\frac{\\partial X^1}{\\partial x^0} &\n",
"+t_{00}\\frac{\\partial X^0}{\\partial x^1}+t_{01}\\frac{\\partial X^1}{\\partial x^1} \\Big)&\n",
"dx^0\\otimes dx^1\\\\\n",
"+\\Big(X^0\\frac{\\partial t_{10}}{\\partial x^0}+X^1 \\frac{\\partial t_{10}}{\\partial x^1} &\n",
"+t_{00}\\frac{\\partial X^0}{\\partial x^1}+t_{10}\\frac{\\partial X^1}{\\partial x^1} &\n",
"+t_{10}\\frac{\\partial X^0}{\\partial x^0}+t_{11}\\frac{\\partial X^1}{\\partial x^0} \\Big)&\n",
"dx^1\\otimes dx^0\\\\\n",
"+\\Big(X^0\\frac{\\partial t_{11}}{\\partial x^0}+X^1 \\frac{\\partial t_{11}}{\\partial x^1} &\n",
"+t_{01}\\frac{\\partial X^0}{\\partial x^1}+t_{11}\\frac{\\partial X^1}{\\partial x^1} &\n",
"+t_{10}\\frac{\\partial X^0}{\\partial x^1}+t_{11}\\frac{\\partial X^1}{\\partial x^1} \\Big)&\n",
"dx^1\\otimes dx^1,\n",
"\\end{matrix}\n",
"$$\n",
"\n",
"which of course gives the same result."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"⌟ 」 」\n"
]
}
],
"source": [
"# 3 ways how to obtain contraction sign\n",
"print(u'\\u231F',u'\\u300D',u'\\uFF63')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Contraction with a vector field (interior product)\n",
"\n",
"
\n",
"\n",
"If $t\\in T^{(0,k)}M,\\ X\\in \\mathfrak{X}(M)$, then the **contraction**\n",
"of $t$ with $X$, denoted by $\\ X\\mathbin{」}t\\ $ is a tensor field from \n",
"$T^{(0,k-1)}M$ defined by\n",
"\n",
"\\begin{equation}\n",
"(X\\mathbin{」}t)_p(X_{2p},\\ldots,X_{kp})=t_p(X_p,X_{2p},\\ldots,X_{kp}).\n",
"\\tag{19.24}\n",
"\\end{equation}\n",
"\n",
"\n",
"
\n",
"\n",
"**Example 19.10**\n",
"\n",
"Let us compute $\\ \\ X\\mathbin{」}t\\ \\ $ for $\\ \\ X=X^1\\frac{\\partial}{\\partial x^1}+\n",
"X^2\\frac{\\partial}{\\partial x^2}\\ \\ $ and $\\ \\ 𝑔=d𝑥^1⊗d𝑥^1+d𝑥^2⊗d𝑥^2.$\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle g = \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}+\\mathrm{d} {x^{2}}\\otimes \\mathrm{d} {x^{2}}\\)"
],
"text/latex": [
"$\\displaystyle g = \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}+\\mathrm{d} {x^{2}}\\otimes \\mathrm{d} {x^{2}}$"
],
"text/plain": [
"g = dx1⊗dx1 + dx2⊗dx2"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex \n",
"N = 2 # dimension of manifold M\n",
"M = Manifold(2, 'M',start_index=1) # manifold M\n",
"c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(1, N+1)])) # chart on M\n",
"x1, x2 = c_x[:] # coordinates x^1, x^2 of chart c_x as the Python variables x1, x2\n",
"g = M.tensor_field(0, 2, name='g'); # tensor field of type (0,2)\n",
"g[1,1] = 1; g[2,2] = 1 # set nonzero components\n",
"g.display() # show g"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle X^1 \\frac{\\partial}{\\partial {x^{1}} } + X^2 \\frac{\\partial}{\\partial {x^{2}} }\\)"
],
"text/latex": [
"$\\displaystyle X^1 \\frac{\\partial}{\\partial {x^{1}} } + X^2 \\frac{\\partial}{\\partial {x^{2}} }$"
],
"text/plain": [
"X1 ∂/∂x1 + X2 ∂/∂x2"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = M.vector_field() # vector field X\n",
"X[:] = (function('X1', latex_name='X^1')(x1,x2), # define components of X\n",
" function('X2', latex_name='X^2')(x1,x2)) \n",
"Manifold.options.omit_function_arguments=True \n",
"X.display() # show X"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle X^1 \\mathrm{d} {x^{1}} + X^2 \\mathrm{d} {x^{2}}\\)"
],
"text/latex": [
"$\\displaystyle X^1 \\mathrm{d} {x^{1}} + X^2 \\mathrm{d} {x^{2}}$"
],
"text/plain": [
"X1 dx1 + X2 dx2"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.contract(g).display() # X 」g"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.11**\n",
"\n",
"Compute $\\ \\ X\\mathbin{」} a\\ \\ $ for $\\ \\ X=X^1\\frac{\\partial}{\\partial x^1}+\n",
"X^2\\frac{\\partial}{\\partial x^2}\\ \\ $ and $\\ \\ a= 𝑎_1d𝑥^1+𝑎_2d𝑥^2.$"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle a_{1} \\mathrm{d} {x^{1}} + a_{2} \\mathrm{d} {x^{2}}\\)"
],
"text/latex": [
"$\\displaystyle a_{1} \\mathrm{d} {x^{1}} + a_{2} \\mathrm{d} {x^{2}}$"
],
"text/plain": [
"a1 dx1 + a2 dx2"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# continuation\n",
"a = M.one_form() # one-form a\n",
" # define components of a\n",
"a[:] = (function('a1')(x1,x2), function('a2')(x1,x2))\n",
"a.disp() # show a"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}$"
],
"text/plain": [
"M → ℝ\n",
"(x1, x2) ↦ X1*a1 + X2*a2"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(X.contract(a)).disp() # X 」 a"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}$"
],
"text/plain": [
"M → ℝ\n",
"(x1, x2) ↦ X1*a1 + X2*a2"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.interior_product(a).disp() # interior product\n",
" # gives the same results for k-forms"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}$"
],
"text/plain": [
"M → ℝ\n",
"(x1, x2) ↦ X1*a1 + X2*a2"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a(X).disp() # value of a on X"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{R} \\\\ & \\left({x^{1}}, {x^{2}}\\right) & \\longmapsto & X^1 a_{1} + X^2 a_{2} \\end{array}$"
],
"text/plain": [
"M → ℝ\n",
"(x1, x2) ↦ X1*a1 + X2*a2"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X(a).disp() # value of X on a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.12**\n",
"\n",
"Compute $\\ \\ X\\mathbin{」}t\\ \\ $ for $\\ \\ X=X^0\\frac{\\partial}{\\partial x^0}+\n",
"X^1\\frac{\\partial}{\\partial x^1}\\ \\ $ and $\\ \\ 𝑡=𝑡_{00}d𝑥^0⊗d𝑥^0+𝑡_{01}d𝑥^0⊗d𝑥^1+𝑡_{10}d𝑥^1⊗d𝑥^0+𝑡_{11}d𝑥^1⊗d𝑥^1.$"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle t = t_{00} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}\\)"
],
"text/latex": [
"$\\displaystyle t = t_{00} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}$"
],
"text/plain": [
"t = t00 dx0⊗dx0 + t01 dx0⊗dx1 + t10 dx1⊗dx0 + t11 dx1⊗dx1"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N = 2 # dimension of manifold M\n",
"M = Manifold(N, 'M') # manifold M\n",
"c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M\n",
"x0, x1 = c_x[:] # coordinates x^0, x^1 of chart c_x as the Python variables x0, x1\n",
"t = M.tensor_field(0,2, name='t') # tensor field t of type (0,2)\n",
"def f2(i,j): return 't'+str(i)+str(j) # names of components\n",
" # list of components:\n",
"f = [[M.scalar_field(function(f2(j,k))(x0,x1), name=f2(j,k)) \n",
" for k in range(2)] for j in range(2)]\n",
"t[:] = f # all components of t\n",
"%display latex\n",
"Manifold.options.omit_function_arguments=True \n",
"t.disp() # show t"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"X = M.vector_field() # vector field X\n",
"X[:] = (function('X0',latex_name='X^0')(x0,x1), # list of comp.\n",
" function('X1',latex_name='X^1')(x0,x1)) "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( X^0 t_{00} + X^1 t_{10} \\right) \\mathrm{d} {x^{0}} + \\left( X^0 t_{01} + X^1 t_{11} \\right) \\mathrm{d} {x^{1}}\\)"
],
"text/latex": [
"$\\displaystyle \\left( X^0 t_{00} + X^1 t_{10} \\right) \\mathrm{d} {x^{0}} + \\left( X^0 t_{01} + X^1 t_{11} \\right) \\mathrm{d} {x^{1}}$"
],
"text/plain": [
"(X0*t00 + X1*t10) dx0 + (X0*t01 + X1*t11) dx1"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.contract(t).display() # X 」 t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Pullback of contraction\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let $ψ:M → N$ be a diffeomorphisms, $\\ t\\in T^{(0,k)}N\\ $ and $\\ X\\in \\mathfrak{X}(N)$. Recall that since $ψ^∗ X$ and $X$ are $ψ$-related, then $X_{\\psi(p)}=d\\psi_p(\\psi^*X)_p\\ $ (cf. (19.7')) and \n",
"$(ψ^∗ X)(ψ^∗ f ) = ψ^∗ (X f )\\ $ (cf. (19.8)), therefore\n",
"\n",
"$$[(ψ^∗ X)\\mathbin{」}(ψ^∗ t)]_p (X_{2p} , . . . , X_{kp} )\n",
"=(ψ^∗ t)_p ((ψ^∗ X)_p , X_{2p} , . . . , X_{kp})\\\\\n",
"= t_{ψ( p)} (dψ_p (ψ^∗ X)_p , dψ_p X_{2p} , . . . , dψ_p X_{kp})\\\\\n",
"= t_{ψ( p)} (X_{ψ( p)} ,dψ_p X_{2p} , . . . , dψ_p X_{kp} )\\\\\n",
"=(X\\mathbin{」} t)_{ψ( p)} (dψ_p X_{2p} , . . . , dψ_p X_{kp} )\n",
"= [ψ^∗ (X\\mathbin{」} t)]_p (X_{2p} , . . . , X_{kp} ),\n",
"$$\n",
"\n",
"for $X_{2p},\\ldots,X_{kp}\\in T_pN.$ We have proved\n",
"\n",
"\\begin{equation}\n",
"ψ^∗ (X\\mathbin{」} t)=(ψ^∗ X)\\mathbin{」}(ψ^∗ t).\n",
"\\tag{19.25}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Lie derivative of contraction\n",
"\n",
"
\n",
"\n",
"In a consequence, if $\\phi_t$ is a one-parameter group of transformations on 𝑀, $X$ its infinitesimal generator and $Y\\in\\mathfrak{X}(M)$, then for $t\\in T^{(0,k)}M$\n",
"$$\\mathcal{L}_X (Y\\mathbin{」}t)=\n",
"\\lim_{h\\to 0}\\frac{\\phi_h^*(Y\\mathbin{」}t)-Y\\mathbin{」}t}{h}\n",
"=\\lim_{h\\to 0}\\frac{\\phi_h^*(Y)\\mathbin{」}(\\phi^*_ht)-Y\\mathbin{」}t}{h}\\\\\n",
"=\\lim_{h\\to 0}\\frac{\\phi_h^*(Y)\\mathbin{」}(\\phi^*_ht)-\n",
"\\phi_h^*(Y)\\mathbin{」}t+\\phi_h^*(Y)\\mathbin{」}t-Y\\mathbin{」}t}{h}\\\\\n",
"=\\lim_{h\\to 0}\\Big[\\phi_h^*Y\\mathbin{」}\\frac{\\phi_h^*t-t}{h}+\n",
"\\frac{\\phi_h^*Y-Y}{h}\\mathbin{」}t\\Big].\n",
"$$\n",
"\n",
"Thus\n",
"\\begin{equation}\n",
"\\mathcal{L}_X (Y\\mathbin{」}t)=(\\mathcal{L}_XY)\\mathbin{」}t\n",
"+Y\\mathbin{」}\\mathcal{L}_Xt.\n",
"\\tag{19.26}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.13**\n",
"\n",
"Compute both sides of (19.26) for \n",
"$\\ X=-y\\frac{\\partial}{\\partial x}+x\\frac{\\partial}{\\partial y},$\n",
"$\\ \\ Y=(1-x)\\frac{\\partial}{\\partial x}+(x-y)\\frac{\\partial}{\\partial y}\\ \\ $ and $g=ydx⊗dx+xd𝑦⊗dy.$\n",
"\n",
"First we define $g,\\ X,\\ Y$:\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"%display latex\n",
"M = Manifold(2, 'M') # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"g = M.tensor_field(0,2, name='g'); # tensor field of type (0,2)\n",
"g[0,0] = y; g[1,1] = x # set nonzero components\n",
"X = M.vector_field(-y, x, name='X') # vector field X\n",
"Y = M.vector_field(1-x, x-y, name='Y') # vector field Y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Left hand side of (19.26) in SageMath:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( -x y + y^{2} + x \\right) \\mathrm{d} x + \\left( -x^{2} - {\\left(x + 1\\right)} y + y^{2} \\right) \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\left( -x y + y^{2} + x \\right) \\mathrm{d} x + \\left( -x^{2} - {\\left(x + 1\\right)} y + y^{2} \\right) \\mathrm{d} y$"
],
"text/plain": [
"(-x*y + y^2 + x) dx + (-x^2 - (x + 1)*y + y^2) dy"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(Y.contract(g)).lie_derivative(X).disp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Right hand side of (19.26):"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( -x y + y^{2} + x \\right) \\mathrm{d} x + \\left( -x^{2} - {\\left(x + 1\\right)} y + y^{2} \\right) \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\left( -x y + y^{2} + x \\right) \\mathrm{d} x + \\left( -x^{2} - {\\left(x + 1\\right)} y + y^{2} \\right) \\mathrm{d} y$"
],
"text/plain": [
"(-x*y + y^2 + x) dx + (-x^2 - (x + 1)*y + y^2) dy"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r1 = (Y.lie_derivative(X)).contract(g)\n",
"r2 = Y.contract(g.lie_derivative(X))\n",
"(r1 + r2).disp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Computing the Lie derivative of covariant tensor fields with the help of Lie brackets\n",
"\n",
"
\n",
"\n",
"\n",
"From (19.24) it follows\n",
"\\begin{equation}\n",
"t_p(X_p,X_{2p},\\ldots,X_{kp})=(X\\mathbin{」}t)_p(X_{2p},\\ldots,X_{kp}),\\quad \\text{for}\\ t\\in T^{(0,k)}M,\n",
"\\end{equation}\n",
"\n",
"and $X_i\\in\\mathfrak{X}(M)$.\n",
"\n",
"As a consequence we obtain\n",
"\n",
"$$\n",
"t_p(Y_{1p},Y_{2p},\\ldots,Y_{kp})=(Y_{1p}\\mathbin{」}t)_p(Y_{2p},\\ldots,Y_{kp})\\\\\n",
"=(Y_{2p}\\mathbin{」}(Y_{1p}\\mathbin{」}t))_p(Y_{3p},\\ldots,Y_{kp})=\\ldots\\\\\n",
"=(Y_{kp}\\mathbin{」}Y_{(k-1)p}\\mathbin{」}\\ldots\\mathbin{」}Y_{1p}\\mathbin{」}t),\n",
"$$\n",
"\n",
"i.e., for $\\ t\\in T^{(0,k)}M$ and $Y_i\\in\\mathfrak{X}(M)$\n",
"\n",
"\\begin{equation}\n",
"t(Y_1,Y_2,\\ldots,Y_k)=Y_k\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}t.\n",
"\\tag{19.27}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We know from (19.2) that\n",
"$Xf=\\mathcal{L}_Xf$, so\n",
"\n",
"$$X( t (Y_1 , . . . , Y_k ))\n",
"= \\mathcal{L}_X (t (Y_1 , . . . , Y_k ))=\n",
"\\mathcal{L}_X(Y_k\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}t)\\\\\n",
"=[(\\mathcal{L}_XY_k)\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}t\\\\\n",
"+Y_k\\mathbin{」}(\\mathcal{L}_XY_{k-1})\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}t\\\\\n",
"............................\\\\\n",
"+Y_k\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}(\\mathcal{L}_XY_1)\\mathbin{」}t\\\\\n",
"+Y_k\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}(\\mathcal{L}_Xt)]\n",
"$$\n",
"\n",
"According to (19.27) we have\n",
"\n",
"$$ t(Y_1,\\ldots,Y_{k-1},\\mathcal{L}_XY_k)=\n",
"(\\mathcal{L}_XY_k)\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}t,\\\\\n",
"t(Y_1,\\ldots,\\mathcal{L}_XY_{k-1},Y_k)=\n",
"Y_k\\mathbin{」}(\\mathcal{L}_XY_{k-1})\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}t,\\\\\n",
"......................................\\\\\n",
"t(\\mathcal{L}_XY_1,\\ldots,Y_{k-1},Y_k)=\n",
"Y_k\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}(\\mathcal{L}_XY_1)\\mathbin{」}t,\\\\\n",
"(\\mathcal{L}_Xt)(Y_1,\\ldots,Y_{k-1},Y_k)=\n",
"Y_k\\mathbin{」}Y_{k-1}\\mathbin{」}\\ldots\\mathbin{」}Y_1\\mathbin{」}(\\mathcal{L}_Xt).\n",
"$$\n",
"\n",
"Therefore \n",
"\n",
"$$X( t (Y_1 , . . . , Y_k ))\n",
"=t (Y_1 , Y_2 , . . . , \\mathcal{L}_X Y_k ) + t (Y_1 , Y_2 , . . . , \\mathcal{L}_X Y_{k−1} , Y_k ) + · · ·\\\\\n",
"+ t (\\mathcal{L}_X Y_1 , Y_2 , . . . , Y_k ) + (\\mathcal{L}_X t)(Y_1 , . . . , Y_k )\\\\\n",
"= (\\mathcal{L}_X t)(Y_1 , . . . , Y_k )+\n",
"\\sum_{i=1}^k t (Y_1 , . . . , \\mathcal{L}_X Y_i , . . . , Y_k).\n",
"$$\n",
"We have proved\n",
"\n",
"\\begin{equation}\n",
"(\\mathcal{L}_X t)(Y_1 ,.., Y_k ) = X (t (Y_1 ,.., Y_k ))\n",
"-\\sum_{i=1}^kt (Y_1 ,.., [X, Y_i ],.., Y_k ).\n",
"\\tag{19.28}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.14**\n",
"\n",
"Compute both sides of (19.28) for \n",
"$\\ X=-y\\frac{\\partial}{\\partial x}+x\\frac{\\partial}{\\partial y},$\n",
"$\\ \\ Y_1=(1-x)\\frac{\\partial}{\\partial x}+(x-y)\\frac{\\partial}{\\partial y},\\ \\ Y_2=(y+1)\\frac{\\partial}{\\partial x}+(x-2)\\frac{\\partial}{\\partial y},\\ $ and $t=ydx⊗dx+xd𝑦⊗dy.$\n",
"\n",
"
\n",
"\n",
"First we define $\\ t,\\ X,\\ Y_1,Y_2$:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"%display latex\n",
"M = Manifold(2, 'M') # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"t = M.tensor_field(0,2, name='t') # tensor field of type (0,2)\n",
"t[0,0] = y; t[1,1] = x # set nonzero components \n",
"X = M.vector_field(-y, x, name='X') # vector field X\n",
"Y1 = M.vector_field(1-x, x-y, name='Y1') # vector field Y1\n",
"Y2 = M.vector_field(y+1, x-2, name='Y2') # vector field Y2"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle -x^{3} - {\\left(x + 1\\right)} y^{2} + y^{3} + 3 \\, x^{2} - 2 \\, {\\left(x - 1\\right)} y - x\\)"
],
"text/latex": [
"$\\displaystyle -x^{3} - {\\left(x + 1\\right)} y^{2} + y^{3} + 3 \\, x^{2} - 2 \\, {\\left(x - 1\\right)} y - x$"
],
"text/plain": [
"-x^3 - (x + 1)*y^2 + y^3 + 3*x^2 - 2*(x - 1)*y - x"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"L = t.lie_derivative(X)(Y1,Y2) # left hand side of (19.28)\n",
"L.expr() # value of L"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle X\\left(t\\left(Y1,Y2\\right)\\right)-t\\left(\\left[X,Y1\\right],Y2\\right)-t\\left(Y1,\\left[X,Y2\\right]\\right)\\)"
],
"text/latex": [
"$\\displaystyle X\\left(t\\left(Y1,Y2\\right)\\right)-t\\left(\\left[X,Y1\\right],Y2\\right)-t\\left(Y1,\\left[X,Y2\\right]\\right)$"
],
"text/plain": [
"Scalar field X(t(Y1,Y2))-t([X,Y1],Y2)-t(Y1,[X,Y2]) on the 2-dimensional differentiable manifold M"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"R = X(t(Y1,Y2)) - t(X.bracket(Y1),Y2) - t(Y1,X.bracket(Y2))\n",
"R # right hand side of (19.28)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle -x^{3} - {\\left(x + 1\\right)} y^{2} + y^{3} + 3 \\, x^{2} - 2 \\, {\\left(x - 1\\right)} y - x\\)"
],
"text/latex": [
"$\\displaystyle -x^{3} - {\\left(x + 1\\right)} y^{2} + y^{3} + 3 \\, x^{2} - 2 \\, {\\left(x - 1\\right)} y - x$"
],
"text/plain": [
"-x^3 - (x + 1)*y^2 + y^3 + 3*x^2 - 2*(x - 1)*y - x"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"R.expr() # value of R"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Commutator of Lie derivatives of covariant tensor fields\n",
"\n",
"
\n",
"\n",
"Repeating the use of (19.28) we obtain\n",
"\n",
"$$(\\mathcal{L}_X (\\mathcal{L}_Y t)) (Z_1 , . . . , Z_k )\\\\\n",
"=X ((\\mathcal{L}_Y t)(Z_1 , . . . , Z_k ))-\\sum_{i=1}^k (\\mathcal{L}_Y t)(Z_1 , . . . , [X, Z_i ], . . . , Z_k )\\\\\n",
"= X \\Big\\{Y (t (Z_1 , . . . , Z_k )) -\\sum_{i=1}^k t (Z_1 , . . . , [Y, Z_j ], . . . , Z_k )\\\n",
"\\Big\\}\\\\\n",
"-\\sum_{i=1}^k \n",
"\\Big\\{Y (t (Z_1 , . . . , [X, Z_i ], . . . , Z_k )\n",
"− t (Z_1 , . . . , [Y, [X, Z_i ]], . . . , Z_k )\\\\\n",
"-\\sum_{j=1,ji}^kt (Z_1 , . . . , [X, Z_i ], . . . , [Y, Z_j ], . . . , Z_k )\n",
"\\Big\\}\\\\\n",
"= XY( t (Z_1 , . . . , Z_k ))-\\sum_{j=1}^k\n",
"X (t (Z_1 , . . . , [Y, Z_j ], . . . , Z_k ))\\\\\n",
"-\\sum_{i=1}^k\n",
"\\Big\\{Y (t (Z_1 , . . . , [X, Z_i ], . . . , Z_k ) )\n",
"− t (Z_1 , . . . , [Y, [X, Z_i ]], . . . , Z_k )\\\\\n",
"-\\sum_{j=1,ji}^k\n",
"t (Z_1 , . . . , [X, Z_i ], . . . , [Y, Z_j ], . . . , Z_k )\n",
"\\Big\\},\n",
"$$\n",
"\n",
"and analogously\n",
"\n",
"$$\n",
"(\\mathcal{L}_Y (\\mathcal{L}_X t)) (Z_1 , . . . , Z_k )\\\\\n",
"=YX( t (Z_1 , . . . , Z_k ))\n",
"-\\sum_{i=1}^kY (t (Z_1 , . . . , [Y, Z_i ], . . . , Z_k ))\\\\\n",
"-\\sum_{i=1}^k\n",
"\\Big\\{X (t (Z_1 , . . . , [Y, Z_i ], . . . , Z_k ) )\n",
"− t (Z_1 , . . . , [X, [Y, Z_i ]], . . . , Z_k )\\\\\n",
"-\\sum_{j=1,ji}^k\n",
"t (Z_1 , . . . , [Y, Z_i ], . . . , [X, Z_j ], . . . , Z_k )\n",
"\\Big\\}.\n",
"$$\n",
"\n",
"The Jacobi identity \n",
"$\\ \\ -[Y,[Z_i,X]]-[X,[Y,Z_i]]-[Z_i,[X,Y]]=0,\\ $\n",
"implies \n",
"\n",
"$$[Y,[X,Z_i]]-[X,[Y,Z_i]]=-[[X,Y],Z_i],$$\n",
"\n",
"so\n",
"\n",
"$$\n",
"(\\mathcal{L}_X (\\mathcal{L}_Y t) )(Z_1 , . . . , Z_k ) − \\mathcal{L}_Y (\\mathcal{L}_X t) )(Z_1 , . . . , Z_k )\\\\\n",
"= [X, Y] (t (Z_1 , . . . , Z_k ))\n",
"-\\sum_{i=1}^k t (Z_1 , . . . , [[X, Y], Z_i ], . . . , Z_k ).\n",
"$$\n",
"Thus \n",
"\\begin{equation}\n",
"\\mathcal{L}_X (\\mathcal{L}_Y t) − \\mathcal{L}_Y (\\mathcal{L}_X t) = \\mathcal{L}_{[X,Y]} t.\n",
"\\tag{19.29}\n",
"\\end{equation}\n",
"\n",
"Using the fact that $\\mathcal{L}_X X = [X, X] = 0$, we obtain:\n",
"\n",
"$$\\mathcal{L}_X (X \\mathbin{」}t) = (\\mathcal{L}_X X)\\mathbin{」} t + X\\mathbin{」} (\\mathcal{L}_X t) = X\\mathbin{」} (\\mathcal{L}_X t).$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.15**\n",
"\n",
"Check (19.29) for a 2-dimensional manifold and tensor $t$ of type (0,2)."
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle t = t_{00} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}\\)"
],
"text/latex": [
"$\\displaystyle t = t_{00} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01} \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11} \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}$"
],
"text/plain": [
"t = t00 dx0⊗dx0 + t01 dx0⊗dx1 + t10 dx1⊗dx0 + t11 dx1⊗dx1"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"N = 2 # dimension of manifold M\n",
"M = Manifold(N, 'M') # manifold M \n",
"c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M\n",
"x0, x1 = c_x[:] # coordinates x^0, x^1 of chart c_x as the Python variables x0, x1\n",
"X = M.vector_field(name='X') # vector field X\n",
"Xf = [M.scalar_field(function('X'+str(i), # list of components\n",
" latex_name='X'+'^'+str(i))(x0,x1))\n",
" for i in range(N)]\n",
"X[:] = Xf \n",
"Y = M.vector_field(name='Y') # vector field Y\n",
"Yf = [M.scalar_field(function('Y'+str(i), # list of components\n",
" latex_name='Y'+'^'+str(i))(x0,x1)) \n",
" for i in range(N)]\n",
"Y[:] = Yf \n",
"\n",
"t = M.tensor_field(0,2, name='t') # tensor field t of type (0,2)\n",
"def f2(i,j): return 't'+str(i)+str(j) # names of components\n",
" # list of components:\n",
"f = [[M.scalar_field(function(f2(j,k))(x0,x1), name=f2(j,k)) \n",
" for k in range(2)] for j in range(2)]\n",
"t[:] = f\n",
"t.disp() # show t"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[X = X^0 \\frac{\\partial}{\\partial {x^{0}} } + X^1 \\frac{\\partial}{\\partial {x^{1}} }, Y = Y^0 \\frac{\\partial}{\\partial {x^{0}} } + Y^1 \\frac{\\partial}{\\partial {x^{1}} }\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[X = X^0 \\frac{\\partial}{\\partial {x^{0}} } + X^1 \\frac{\\partial}{\\partial {x^{1}} }, Y = Y^0 \\frac{\\partial}{\\partial {x^{0}} } + Y^1 \\frac{\\partial}{\\partial {x^{1}} }\\right]$"
],
"text/plain": [
"[X = X0 ∂/∂x0 + X1 ∂/∂x1, Y = Y0 ∂/∂x0 + Y1 ∂/∂x1]"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[X.disp(), Y.disp()] # show X,Y"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\mathrm{True}\\)"
],
"text/latex": [
"$\\displaystyle \\mathrm{True}$"
],
"text/plain": [
"True"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"L_XL_Yt = (t.lie_derivative(Y)).lie_derivative(X) # L_XL_Y(t)\n",
"L_YL_Xt = (t.lie_derivative(X)).lie_derivative(Y) # L_YL_X(t)\n",
"L = L_XL_Yt-L_YL_Xt # Left hand side of (19.29) \n",
"R = t.lie_derivative(X.bracket(Y)) # Right hand side of (19.29)\n",
"L == R # check (19.29)\n",
"# slow"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Lie derivative for general tensor fields\n",
"\n",
"
\n",
"\n",
"For a general tensor field $t\\in T^{(k,m)}M$ the lie derivative is defined by\n",
"\n",
"\\begin{equation}\n",
"\\begin{matrix}\n",
"(£_X t)(α_1 , . . . , α_k , Y_1 , . . . , Y_m ) = X (t (α_1 , . . . , α_k , Y_1 , . . . , Y_m ))\\\\\n",
"-\\sum_{i=1}^k t (α_1 , . . . , £_X α_i , . . . , α_k , Y_1 , . . . , Y_m )\\\\\n",
"-\\sum_{i=1}^m t (α_1 , . . . , α_k , Y_1 , . . . , £_X Y_i , . . . , Y_m ),\n",
"\\end{matrix}\n",
"\\tag{19.30}\n",
"\\end{equation}\n",
"\n",
"for $\\ α_1 , . . . , α_k ∈ \\Omega^1(M)\\ $ and $\\ Y_1 , . . . , Y_m ∈ \\mathfrak{X}(M)$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Lie derivative for general tensor fields in components\n",
"\n",
"
\n",
"\n",
"If in coordinates $\\ (x^1,\\ldots,x^n)\\ $ the tensor field $t\\in T^{(k,m)}M$ has components\n",
"$t^{i_1\\ldots i_k}_{j_1\\ldots j_m}$, then the Lie derivative $\\ \\mathcal{L}_Xt\\ \\ $ has components\n",
"\n",
"\\begin{equation}\n",
"\\begin{matrix}\n",
"\\displaystyle\n",
"(\\mathcal{L}_Xt)^{i_1\\ldots i_k}_{j_1\\ldots j_m}\n",
"=X^p\\frac{\\partial t^{i_1\\ldots i_k}_{j_1\\ldots j_m}}{\\partial x^p}\n",
"-t^{p\\,i_2\\ldots i_k}_{j_1\\ldots j_m}\\frac{\\partial X^{i_1}}{\\partial x^p}\n",
"\\ldots -t^{i_1\\ldots i_{k-1}p}_{j_1\\ldots j_m}\\frac{\\partial X^{i_k}}{\\partial x^p}\\\\\n",
"\\displaystyle\n",
"+t^{i_1\\ldots i_k}_{p\\,j_2\\ldots j_m}\\frac{\\partial X^p}{\\partial x^{j_1}}\n",
"+\\ldots +t^{i_1\\ldots i_k}_{j_1\\ldots j_{m-1}\\,p}\\frac{\\partial X^p}{\\partial x^{j_m}}.\n",
"\\end{matrix}\n",
"\\tag{19.31}\n",
"\\end{equation}\n",
"\n",
"\n",
"
\n",
"\n",
"The formula follows from (19.30). In fact, computing $\\mathcal{L}_X$ for scalars $\\ f\\ $ we have by (19.2) $\\ \\mathcal{L}_Xf=Xf,\\ $ so $\\ \\mathcal{L}_X(t^{i_1\\ldots i_k}_{j_1\\ldots j_m})=X^p\\frac{\\partial t^{i_1\\ldots i_k}_{j_1\\ldots j_m}}{\\partial x^p}$, computing $\\mathcal{L}_X$ for $\\ dx^i\\ $ we have by (19.22), (19.22') $\\ \\ \\mathcal{L}_Xdx^i=\\frac{\\partial X^i}{\\partial x^p}dx^p,\\ $ and computing $\\mathcal{L}_X$ for for $\\frac{\\partial}{\\partial x^k}$ we can use Lie brackets:\n",
"$$\\mathcal{L}_X \\frac{\\partial}{\\partial x^k}\n",
"=[X,\\frac{\\partial}{\\partial x^k}]=[X^p\\frac{\\partial}{\\partial x^p},\n",
"\\delta^i_k\\frac{\\partial}{\\partial x^i}]=(X\\delta^i_k-\\frac{\\partial}{\\partial x^k}X^p)\\frac{\\partial}{\\partial x^p}\n",
"=-\\frac{\\partial X^p}{\\partial x^k}\n",
"\\frac{\\partial}{\\partial x^p},\n",
"$$\n",
"\n",
"(cf. also (19.23)).\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 19.16**\n",
"\n",
"Compute the Lie derivative $\\ \\mathcal{L}_Xt\\ \\ $ \n",
"for $\\ \\ X=X^0\\frac{\\partial}{\\partial x^0}+\n",
"X^1\\frac{\\partial}{\\partial x^1}\\ \\ $ \n",
"and\n",
"$𝑡=𝑡^0_0\\frac{∂}{∂𝑥^0}⊗d𝑥^0+𝑡^0_1\\frac{∂}{∂𝑥^0}⊗d𝑥^1+𝑡^1_0\\frac{∂}{∂𝑥^1}⊗d𝑥^0+𝑡^1_1\\frac{∂}{∂𝑥^1}⊗d𝑥^1.$"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"%display latex \n",
"N = 2 # dimension of manifold M\n",
"M = Manifold(N, 'M') # manifold M\n",
"c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle t = t^0_0 \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{0}} + t^0_1 \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{1}} + t^1_0 \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{0}} + t^1_1 \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{1}}\\)"
],
"text/latex": [
"$\\displaystyle t = t^0_0 \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{0}} + t^0_1 \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{1}} + t^1_0 \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{0}} + t^1_1 \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{1}}$"
],
"text/plain": [
"t = t00 ∂/∂x0⊗dx0 + t01 ∂/∂x0⊗dx1 + t10 ∂/∂x1⊗dx0 + t11 ∂/∂x1⊗dx1"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def fn(i,j): return 't'+str(i)+str(j) # names of components\n",
"def fl(i,j): return 't'+'^'+str(i)+'_'+str(j) # latex names of comp.\n",
" # list of components of t:\n",
"ff = [[M.scalar_field(function(fn(i,j), latex_name=fl(i,j))(*c_x)) \n",
" for j in range(N)] for i in range(N)]\n",
"t = M.tensor_field(1,1, name='t') # tensor field t\n",
"t[:] = ff # define all components of t\n",
"Manifold.options.omit_function_arguments=True \n",
"t.disp() # show t"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( -t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^0_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_0}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{0}} + \\left( -t^0_1 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^0_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_1}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{1}} + \\left( t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} - {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} - t^1_0 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^1_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_0}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{0}} + \\left( t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} - t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^1_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_1}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{1}}\\)"
],
"text/latex": [
"$\\displaystyle \\left( -t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^0_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_0}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{0}} + \\left( -t^0_1 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^0_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_1}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{0}} }\\otimes \\mathrm{d} {x^{1}} + \\left( t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} - {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} - t^1_0 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^1_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_0}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{0}} + \\left( t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} - t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^1_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_1}{\\partial {x^{1}}} \\right) \\frac{\\partial}{\\partial {x^{1}} }\\otimes \\mathrm{d} {x^{1}}$"
],
"text/plain": [
"(-t10*d(X0)/dx1 + t01*d(X1)/dx0 + X0*d(t00)/dx0 + X1*d(t00)/dx1) ∂/∂x0⊗dx0 + (-t01*d(X0)/dx0 + (t00 - t11)*d(X0)/dx1 + t01*d(X1)/dx1 + X0*d(t01)/dx0 + X1*d(t01)/dx1) ∂/∂x0⊗dx1 + (t10*d(X0)/dx0 - (t00 - t11)*d(X1)/dx0 - t10*d(X1)/dx1 + X0*d(t10)/dx0 + X1*d(t10)/dx1) ∂/∂x1⊗dx0 + (t10*d(X0)/dx1 - t01*d(X1)/dx0 + X0*d(t11)/dx0 + X1*d(t11)/dx1) ∂/∂x1⊗dx1"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = M.vector_field() # vector field X\n",
"X[:] = (function('X0', latex_name='X^0')(*c_x),\n",
" function('X1', latex_name='X^1')(*c_x)) # comp. of X\n",
"LtX = t.lie_derivative(X) # Lie derivative L_X(t)\n",
"LtX.disp() # show Lie derivative"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For comparison, using (19.31) without simplifications we obtain the following components of\n",
" $\\ \\mathcal{L}_Xt\\ \\ $ (in the first row we repeat the general formula)\n",
" \n",
"$$\n",
"\\begin{matrix}\n",
"X^p\\frac{\\partial t^{i_1\\ldots i_k}_{j_1\\ldots j_m}}{\\partial x^p}\n",
"&\n",
"-t^{p\\,i_2\\ldots i_k}_{j_1\\ldots j_m}\\frac{\\partial X^{i_1}}{\\partial x^p}\n",
"\\ldots -t^{i_1\\ldots i_{k-1}p}_{j_1\\ldots j_m}\\frac{\\partial X^{i_k}}{\\partial x^p}\n",
"&\n",
"+t^{i_1\\ldots i_k}_{p\\,j_2\\ldots j_m}\\frac{\\partial X^p}{\\partial x^{j_1}}\n",
"+\\ldots +t^{i_1\\ldots i_k}_{j_1\\ldots j_{m-1}\\,p}\\frac{\\partial X^p}{\\partial x^{j_m}}\\\\\n",
"X^0\\frac{\\partial t^0_0}{\\partial x^0}+X^1\\frac{\\partial t^0_0}{\\partial x^1}\n",
"&\n",
"-t^0_0\\frac{\\partial X^0}{\\partial x^0}-t^1_0\\frac{\\partial X^0}{\\partial x^1}\n",
"&\n",
"+t^0_0\\frac{\\partial X^0}{\\partial x^0}+t^0_1\\frac{\\partial X^1}{\\partial x^0}\\\\\n",
"X^0\\frac{\\partial t^0_1}{\\partial x^0}+X^1\\frac{\\partial t^0_1}{\\partial x^1}\n",
"&\n",
"-t^0_1\\frac{\\partial X^0}{\\partial x^0}-t^1_1\\frac{\\partial X^0}{\\partial x^1}\n",
"&\n",
"+t^0_0\\frac{\\partial X^0}{\\partial x^1}+t^0_1\\frac{\\partial X^1}{\\partial x^1}\\\\\n",
"X^0\\frac{\\partial t^1_0}{\\partial x^0}+X^1\\frac{\\partial t^1_0}{\\partial x^1}\n",
"&\n",
"-t^0_0\\frac{\\partial X^1}{\\partial x^0}-t^1_0\\frac{\\partial X^1}{\\partial x^1}\n",
"&\n",
"+t^1_0\\frac{\\partial X^0}{\\partial x^0}+t^1_1\\frac{\\partial X^1}{\\partial x^0}\\\\\n",
"X^0\\frac{\\partial t^1_1}{\\partial x^0}+X^1\\frac{\\partial t^1_1}{\\partial x^1}\n",
"&\n",
"-t^0_1\\frac{\\partial X^1}{\\partial x^0}-t^1_1\\frac{\\partial X^1}{\\partial x^1}\n",
"&\n",
"+t^1_0\\frac{\\partial X^0}{\\partial x^1}+t^1_1\\frac{\\partial X^1}{\\partial x^1}\n",
"\\end{matrix}\n",
"$$\n",
"\n",
"which of course gives the same result.\n",
"\n",
"Bellow we list the components of the Lie derivative using `display_comp` method:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{lcl} X_{\\phantom{\\, 0}\\,0}^{\\,0\\phantom{\\, 0}} & = & -t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^0_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_0}{\\partial {x^{1}}} \\\\ X_{\\phantom{\\, 0}\\,1}^{\\,0\\phantom{\\, 1}} & = & -t^0_1 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^0_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_1}{\\partial {x^{1}}} \\\\ X_{\\phantom{\\, 1}\\,0}^{\\,1\\phantom{\\, 0}} & = & t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} - {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} - t^1_0 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^1_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_0}{\\partial {x^{1}}} \\\\ X_{\\phantom{\\, 1}\\,1}^{\\,1\\phantom{\\, 1}} & = & t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} - t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^1_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_1}{\\partial {x^{1}}} \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{lcl} X_{\\phantom{\\, 0}\\,0}^{\\,0\\phantom{\\, 0}} & = & -t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^0_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_0}{\\partial {x^{1}}} \\\\ X_{\\phantom{\\, 0}\\,1}^{\\,0\\phantom{\\, 1}} & = & -t^0_1 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} + {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^0}{\\partial {x^{1}}} + t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^0_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^0_1}{\\partial {x^{1}}} \\\\ X_{\\phantom{\\, 1}\\,0}^{\\,1\\phantom{\\, 0}} & = & t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{0}}} - {\\left(t^0_0 - t^1_1\\right)} \\frac{\\partial\\,X^1}{\\partial {x^{0}}} - t^1_0 \\frac{\\partial\\,X^1}{\\partial {x^{1}}} + X^0 \\frac{\\partial\\,t^1_0}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_0}{\\partial {x^{1}}} \\\\ X_{\\phantom{\\, 1}\\,1}^{\\,1\\phantom{\\, 1}} & = & t^1_0 \\frac{\\partial\\,X^0}{\\partial {x^{1}}} - t^0_1 \\frac{\\partial\\,X^1}{\\partial {x^{0}}} + X^0 \\frac{\\partial\\,t^1_1}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t^1_1}{\\partial {x^{1}}} \\end{array}$"
],
"text/plain": [
"X^0_0 = -t10*d(X0)/dx1 + t01*d(X1)/dx0 + X0*d(t00)/dx0 + X1*d(t00)/dx1 \n",
"X^0_1 = -t01*d(X0)/dx0 + (t00 - t11)*d(X0)/dx1 + t01*d(X1)/dx1 + X0*d(t01)/dx0 + X1*d(t01)/dx1 \n",
"X^1_0 = t10*d(X0)/dx0 - (t00 - t11)*d(X1)/dx0 - t10*d(X1)/dx1 + X0*d(t10)/dx0 + X1*d(t10)/dx1 \n",
"X^1_1 = t10*d(X0)/dx1 - t01*d(X1)/dx0 + X0*d(t11)/dx0 + X1*d(t11)/dx1 "
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"LtX.display_comp(coordinate_labels=False)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"#LtX.comp()[:] # matrix of components"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## What's next?\n",
"\n",
"Take a look at the notebook [Integration of differential forms on singular $k$-cubes](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/20Manifold_Stokes.ipynb)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "SageMath 9.6",
"language": "sage",
"name": "sagemath"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}