{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 25. Torsion and curvature forms\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": [
"To describe connections one can use bases not necessarily\n",
"induced by coordinate systems. We can use sets $\\{e_1 , . . . , e_n \\}$ of smooth vector\n",
"fields defined on some open subset $U$ of the manifold $M$ such that, at each point $p ∈ U $, the tangent vectors $e_i$ at $p$ form a basis of $T_p M$. Let the set of 1-forms $\\{e^1 , . . . , e^n \\}$ be its dual basis (i.e. $e^i (e_j ) = δ_{ij} $). If there exists a coordinate system $(x_1 , . . . , x_n )$ such\n",
"that $e_i = \\frac{∂}{∂ x^i}$ or, equivalently, $e^i = dx^i$ , we will say that the basis ${e_1 , . . . , e_n }$ is\n",
"**holonomic**. In the present notebook the set $\\{e_1,\\ldots e_n\\}$ will denote **not necessarily holonomic basis**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Connection forms\n",
"\n",
"
\n",
"\n",
"If $∇$ is a connection on a manifold $ M$, the **connection forms**, $\\omega^i_j$ , with\n",
"respect to the basis $\\{e_1 , . . . , e_n \\}$, are the 1-forms defined by\n",
"\n",
"\\begin{eqnarray}\n",
"\\omega_j^i(X)=e^i(\\nabla_Xe_j),\\quad \\text{for} X\\in \\mathfrak{X}(M),\n",
"\\tag{25.1}\n",
"\\end{eqnarray}\n",
"or equivalently\n",
"\\begin{eqnarray}\n",
"\\nabla_Xe_j=\\omega_j^i(X)e_i,\\quad \\text{for} X\\in \\mathfrak{X}(M).\n",
"\\tag{25.1'}\n",
"\\end{eqnarray}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 25.1**\n",
"\n",
"On the two-dimensional manifold we have four connection forms $\\omega^i_j$:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\omega^1_{\\ \\, 1}, \\omega^1_{\\ \\, 2}, \\omega^2_{\\ \\, 1}, \\omega^2_{\\ \\, 2}\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\omega^1_{\\ \\, 1}, \\omega^1_{\\ \\, 2}, \\omega^2_{\\ \\, 1}, \\omega^2_{\\ \\, 2}\\right]$"
],
"text/plain": [
"[1-form nabla connection 1-form (1,1) on the 2-dimensional differentiable manifold M,\n",
" 1-form nabla connection 1-form (1,2) on the 2-dimensional differentiable manifold M,\n",
" 1-form nabla connection 1-form (2,1) on the 2-dimensional differentiable manifold M,\n",
" 1-form nabla connection 1-form (2,2) on the 2-dimensional differentiable manifold M]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"M = Manifold(2, 'M', start_index=1) # 2-dim. manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"nab = M.affine_connection('nabla', r'\\nabla') # affine connection\n",
"nab[1,1,1] = 0 # all con. coeff. zero\n",
"[nab.connection_form(i,j) for i in [1,2] for j in [1,2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"If we define\n",
"\n",
"\\begin{eqnarray}\n",
"\\Gamma ^i_{jk}=\\omega^i_j(e_k),\n",
"\\tag{25.2}\n",
"\\end{eqnarray}\n",
"\n",
"then for $X\\in \\mathfrak{X}(M)$, we have $X=e^k(X)e_k$ and\n",
"\n",
"$$\n",
"\\omega^i_j(X)=\\omega^i_j(e^k(X)e_k)=e^k(X)\\omega^i_j(e_k)=\\Gamma^i_{jk}e^k(X),$$\n",
"\n",
"i.e.,\n",
"\\begin{eqnarray}\n",
"\\omega_j^i=\\Gamma^i_{jk}e^k,\n",
"\\tag{25.3}\n",
"\\end{eqnarray}\n",
"and according to (25.1')\n",
"\n",
"\\begin{eqnarray}\n",
"\\nabla_{e_i}e_j=\\omega_j^k(e_i)e_k=\\Gamma^k_{ji}e_k,\n",
"\\tag{25.4}\n",
"\\end{eqnarray}\n",
"\n",
"which is analogous to (21.5) but holds also for non-holonomic bases."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Torsion forms\n",
"\n",
"
\n",
"\n",
"If $T (X, Y) = ∇ X Y − ∇ Y X − [X, Y],\\ \\ X, Y ∈ \\mathfrak{X}(M)\\ \\ $ is the torsion, then the **torsion 2-forms** $\\theta^i$ with respect to $\\{e_1,\\ldots,e_n\\}$ are defined by\n",
"\n",
"\\begin{eqnarray}\n",
"\\theta^i(X,Y)=e^i(T(X,Y)),\\quad \\text{for}\\ X,Y\\in \\mathfrak{X}(M),\n",
"\\tag{25.5}\n",
"\\end{eqnarray}\n",
"or equivalently\n",
"\n",
"\\begin{eqnarray}\n",
"T(X,Y)=\\theta^i(X,Y)e_i,\\quad \\text{for}\\ X,Y\\in \\mathfrak{X}(M).\n",
"\\tag{25.6}\n",
"\\end{eqnarray}\n",
"\n",
"Since $T$ is antisymmetric, each $\\theta^i$ is 2-form.\n",
"\n",
"
\n",
"\n",
"**Example 25.2**\n",
"\n",
"On the two-dimensional manifold we have two torsion 2-forms:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\theta^1, \\theta^2\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\theta^1, \\theta^2\\right]$"
],
"text/plain": [
"[2-form torsion (1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) on the 2-dimensional differentiable manifold M,\n",
" 2-form torsion (2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) on the 2-dimensional differentiable manifold M]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"M = Manifold(2, 'M', start_index=1) # 2-dim. manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"nab = M.affine_connection('nabla', r'\\nabla') # affine connection\n",
"nab[1,1,1] = 0 # all con. coeff. zero\n",
"[nab.torsion_form(i) for i in [1,2]] # torsion 2-forms on M"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### First Cartan structure equation\n",
"\n",
"
\n",
"\n",
"Assume we have vector fields $\\ X\\ $ and $\\ Y=Y^ie_i=e^i(Y)e_i.\\ $ From (21.14) it follows \n",
"\n",
"\\begin{equation}\n",
"\\nabla_Xt(Y)=X(t(Y))-t(\\nabla_XY),\n",
"\\tag{*}\n",
"\\end{equation}\n",
"\n",
"for 1-forms $t$ on $M$, so\n",
"\n",
"$$\\nabla_Xe^i(Y)=X(e^i(Y))-e^i(\\nabla_XY)\n",
"=X(Y^i)-e^i(\\nabla_X(Y^je_j))\\\\\n",
"=X(Y^i)-e^i(Y^j\\nabla_Xe_j+(XY^j)e_j)\\\\\n",
"=X(Y^i)-Y^je^i(\\nabla_Xe_j)-e^i((XY^j)e_j)\\\\\n",
"=X(Y^i)-Y^je^i(\\nabla_Xe_j)-X(Y^i)\\\\\n",
"=-Y^j\\omega^i_j(X)=-\\omega^i_j(X)e^j(Y),\n",
"$$\n",
"so\n",
"\\begin{eqnarray}\n",
"\\nabla_Xe^i=-\\omega^i_j(X)e^j.\n",
"\\tag{25.7}\n",
"\\end{eqnarray}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using (*) once again we obtain\n",
"\n",
"$$\n",
"e^i(\\nabla_XY)=X(e^i(Y))-(\\nabla_Xe^i)(Y),\\\\\n",
"e^i(\\nabla_YX)=Y(e^i(X))-(\\nabla_Ye^i)(X).\n",
"$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From (16.6) we know that\n",
"\n",
"$$\n",
"(d\\omega)(X,Y)=X\\omega(Y)-Y\\omega(X)-\\omega([X,Y]),\n",
"$$\n",
"\n",
"and from the definition of the exterior product\n",
"\n",
"$$\n",
"t\\wedge s=t\\otimes s-s\\otimes t.\n",
"$$\n",
"\n",
"From those facts \n",
"and (25.7) we obtain\n",
"\n",
"$$\\theta^i(X,Y)=e^i(T(X,Y))=e^i(\\nabla_XY-\\nabla_YX-[X,Y])\\\\\n",
"=X(e^i(Y))-(\\nabla_Xe^i)(Y)-Y(e^i(X))+(\\nabla_Ye^i)(X)-e^i([X,Y])\\\\\n",
"=X(e^i(Y))-Y(e^i(X)-e^i([X,Y])-(\\nabla_Xe^i)(Y)+(\\nabla_Ye^i)(X)\\\\\n",
"=de^i(X,Y)+\\omega^i_j(X)e^j(Y)-\\omega^i_j(Y)e^j(X)\\\\\n",
"=(de^i+\\omega^i_j\\wedge e^j)(X,Y).\n",
"$$\n",
"\n",
"We have proved **the first Cartan structural equation**\n",
"\n",
"\\begin{eqnarray}\n",
"\\theta^i=de^i+\\omega^i_j\\wedge e^j.\n",
"\\tag{25.8}\n",
"\\end{eqnarray}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Curvature forms\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If $\\ \\ R(X, Y)= ∇_X ∇_Y − ∇_Y ∇_X − ∇_{[X,Y]},\\ \\\n",
" X, Y ∈ \\mathfrak{X}(M)\\ \\ $ is the curvature, then the **curvature forms** $\\Omega^i_j(X,Y)$ with respect to the basis $\\{e_1 , e_2 , . . . , e_n \\}$, are defined by\n",
" \n",
"\\begin{equation}\n",
"\\Omega^i_j(X,Y)=e^i(R(X,Y)e_j),\\quad X, Y ∈ \\mathfrak{X}(M),\n",
"\\tag{25.9}\n",
"\\end{equation}\n",
"\n",
"or equivalently\n",
"\n",
"\\begin{equation}\n",
"R(X,Y)e_j=\\Omega^i_j(X,Y)e_i,\\quad X, Y ∈ \\mathfrak{X}(M).\n",
"\\tag{25.9'}\n",
"\\end{equation}\n",
"\n",
"
\n",
"\n",
"**Example 25.3**\n",
"\n",
"On the two-dimensional manifold we have four curvature forms:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\Omega^1_{\\ \\, 1}, \\Omega^1_{\\ \\, 2}, \\Omega^2_{\\ \\, 1}, \\Omega^2_{\\ \\, 2}\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\Omega^1_{\\ \\, 1}, \\Omega^1_{\\ \\, 2}, \\Omega^2_{\\ \\, 1}, \\Omega^2_{\\ \\, 2}\\right]$"
],
"text/plain": [
"[2-form curvature (1,1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) on the 2-dimensional differentiable manifold M,\n",
" 2-form curvature (1,2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) on the 2-dimensional differentiable manifold M,\n",
" 2-form curvature (2,1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) on the 2-dimensional differentiable manifold M,\n",
" 2-form curvature (2,2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) on the 2-dimensional differentiable manifold M]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"M = Manifold(2,'M',start_index=1) # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"nab = M.affine_connection('nabla', r'\\nabla') # connection\n",
"nab[1,1,1] = 0 # all coefficients zero\n",
"[nab.curvature_form(i,j) for i in [1,2] for j in [1,2]]\n",
" # curvature forms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"### Second Cartan structural equations \n",
"\n",
"
\n",
"\n",
"If we use the formulas\n",
"$$ R(X, Y)= ∇_X ∇_Y − ∇_Y ∇_X − ∇_{[X,Y]},\\\\\n",
"\\nabla_Xe_j=\\omega^i_j(X)e_i,\\quad \\omega^i_j(X)=e^i(\\nabla_Xe_j),\\\\\n",
"\\nabla_X(\\omega^k_j(Y)e_k)=X(\\omega^k_j(Y))e_k+\\omega^k_j(Y)\\nabla_Xe_k,\\\\\n",
"(d\\omega)(X,Y)=X\\omega(Y)-Y\\omega(X)-\\omega([X,Y]),\\\\\n",
"t\\wedge s=t\\otimes s-s\\otimes t,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"then we can check that\n",
"$$\\Omega^i_j(X,Y)=e^i(∇_X ∇_Y e_j − ∇_Y ∇_X e_j− ∇_{[X,Y]}e_j)\\\\\n",
"=e^i(\\nabla_X(\\omega^k_j(Y)e_k)-\\nabla_Y(\\omega^k_j(X)e_k))-\\omega^i_j([X,Y])\\\\\n",
"=e^i(X(\\omega^k_j(Y))e_k+\\omega^k_j(Y)\\nabla_Xe_k-Y(\\omega^k_j(X))e_k-\\omega^k_j(X)\\nabla_Ye_k)-\\omega^i_j([X,Y])\\\\\n",
"=(X(\\omega^k_j(Y))e^i(e_k)+\\omega_j^k(Y)e^i(\\nabla_Xe_k)\\\\\n",
"-Y(\\omega^k_j(X))e^i(e_k)-\\omega^k_j(X)e^i(\\nabla_Ye_k))-\n",
"\\omega^i_j([X,Y])\\\\\n",
"=X(\\omega^i_j(Y))+\\omega_j^k(Y)\\omega^i_k(X)-Y(\\omega^i_j(X))-\\omega^k_j(X)\\omega^i_k(Y)-\\omega^i_j([X,Y])\\\\\n",
"=X(\\omega^i_j(Y))-Y(\\omega^i_j(X))-\\omega^i_j([X,Y])+\\omega_k^i(X)\\omega^k_j(Y)-\\omega^i_k(Y)\\omega_j^k(X)\\\\\n",
"=d\\omega^i_j(X,Y)+(\\omega^i_k\\wedge \\omega^k_j)(X,Y).\n",
"$$\n",
"\n",
"We have proved **the second Cartan structural equation**\n",
"\n",
"\\begin{equation}\n",
"\\Omega^i_j=d\\omega^i_j+\\omega^i_k\\wedge \\omega^k_j.\n",
"\\tag{25.10}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Observation:** $\\hskip0.5cm$ If $A_{kl}$ is an antisymmetric matrix, then for 1-forms $e^i$ on $M$ and $X,Y\\in\\mathfrak{X}(M)$\n",
"$$(A_{kl}e^k\\wedge e^l)(X,Y)=A_{kl}(e^k\\otimes e^l-e^l\\otimes e^k)(X,Y)\\\\\n",
"=A_{kl}(e^k(X) e^l(Y)-e^l(X) e^k(Y)\n",
"=A_{kl}X^kY^l-A_{kl}X^lY^k\\\\\n",
"=A_{kl}X^kY^l+A_{lk}X^lY^k\n",
"=2A_{kl}X^kY^l.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"If the components of the torsion and the curvature tensors with respect to the basis $\\{e_1 , . . . , e_n \\}$ are defined by \n",
"$$T (e_i , e_j ) = T^k_{i j} e_k,\\quad R(e_i , e_j )e_k = R^l_{ki j}e_l,\n",
"$$\n",
"then\n",
"\\begin{equation}\n",
"\\begin{matrix}\n",
"\\theta^i=\\frac{1}{2}T^i_{jk}e^j\\wedge e^k,\\\\\n",
"\\Omega^i_j=\\frac{1}{2}R^i_{jkl}e^k\\wedge e^l.\n",
"\\end{matrix}\n",
"\\tag{25.11}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In fact\n",
"$$\\theta^i(X,Y)=e^i(T(X,Y))=e^i(T(X^ke_k,Y^le_l))\\\\\n",
"=e^i(X^kY^lT^m(e_k,e_l)e_m)=e^i(X^kY^lT^m_{kl}e_m)\\\\\n",
"=X^kY^lT^m_{kl}e^l(e_m)=X^kY^lT^m_{kl}\\delta^i_m=X^kY^lT^i_{kl}\\\\\n",
"=\\frac{1}{2}(T^i_{kl}e^k\\wedge e^l)(X,Y),\n",
"$$\n",
"and\n",
"$$\n",
"\\Omega^i_j(X,Y)=e^i(R(X,Y)e_j)=e^i(R(X^ke_k,Y^le_l)e_j)\\\\\n",
"=X^kY^lR^m_{jkl}e^i(e_m)=X^kY^lR^m_{jkl}\\delta^i_m\\\\\n",
"=X^kY^lR^i_{jkl}=\\frac{1}{2}(R^i_{jkl}e^k\\wedge e^l)(X,Y).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"
\n",
"\n",
"**Example 25.4** \n",
"\n",
"Consider the half-plane $y>0$ with the connection coefficients with respect to the bases $\\ \\ e_1=\\frac{\\partial}{\\partial x},\\ \\ e_2=\\frac{\\partial}{\\partial y},\\ \\ e^1=dx,\\ \\ e^2=dy\\ \\ $ equal to\n",
"$$\\Gamma^1_{12}=\\Gamma^1_{21}=\\Gamma^2_{22}=-\\frac{1}{y}, \\quad\\Gamma^2_{11}=\\frac{1}{y},$$\n",
"and all other coefficients equal to zero."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\end{array}$"
],
"text/plain": [
"Gam^1_12 = -1/y \n",
"Gam^1_21 = -1/y \n",
"Gam^2_11 = 1/y \n",
"Gam^2_22 = -1/y "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex\n",
"M = Manifold(2, 'M', start_index=1) # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"nab = M.affine_connection('nabla', r'\\nabla') # connection on M\n",
" # con. coefficients\n",
"nab[1,1,2], nab[1,2,1], nab[2,2,2], nab[2,1,1] = -1/y, -1/y, -1/y, 1/y\n",
"nab.display(coordinate_labels=False) # show conn. coeff.\n",
" # (only nonzero)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Connection forms $\\omega^i_j$ can be computed using the formula\n",
"(25.3), $\\ \\ \\omega_j^i=\\Gamma^i_{jk}e^k$:\n",
"$$\\omega^1_1=\\Gamma^1_{11}e^1+\\Gamma^1_{12}e^2=-\\frac{1}{y}dy,\\\\\n",
"\\omega^1_2=\\Gamma^1_{21}e^1+\\Gamma^1_{22}e^2=-\\frac{1}{y}dx,\\\\\n",
"\\omega^2_1=\\Gamma^2_{11}e^1+\\Gamma^2_{12}e^2=\\frac{1}{y}dx,\\\\\n",
"\\omega^2_2=\\Gamma^2_{21}e^1+\\Gamma^2_{22}e^2=-\\frac{1}{y}dy.\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\omega^1_{\\ \\, 1} = -\\frac{1}{y} \\mathrm{d} y, \\omega^1_{\\ \\, 2} = -\\frac{1}{y} \\mathrm{d} x, \\omega^2_{\\ \\, 1} = \\frac{1}{y} \\mathrm{d} x, \\omega^2_{\\ \\, 2} = -\\frac{1}{y} \\mathrm{d} y\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\omega^1_{\\ \\, 1} = -\\frac{1}{y} \\mathrm{d} y, \\omega^1_{\\ \\, 2} = -\\frac{1}{y} \\mathrm{d} x, \\omega^2_{\\ \\, 1} = \\frac{1}{y} \\mathrm{d} x, \\omega^2_{\\ \\, 2} = -\\frac{1}{y} \\mathrm{d} y\\right]$"
],
"text/plain": [
"[nabla connection 1-form (1,1) = -1/y dy,\n",
" nabla connection 1-form (1,2) = -1/y dx,\n",
" nabla connection 1-form (2,1) = 1/y dx,\n",
" nabla connection 1-form (2,2) = -1/y dy]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[nab.connection_form(i,j).display() # connection forms\n",
" for i in [1,2] for j in [1,2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"Torsion forms can be computed from the first Cartan structure equation (25.8), $\\ \\ \\theta^i=de^i+\\omega^i_j\\wedge e^j$:\n",
"\n",
"$$\\theta^1=de^1+\\omega^1_1\\wedge e^1+\\omega^1_2\\wedge e^2\n",
"=d(dx)-\\frac{1}{y}dy\\wedge dx-\\frac{1}{y}dx\\wedge dy=0,\\\\\n",
"\\theta^2=de^2+\\omega^2_1\\wedge e^1+\\omega^2_2\\wedge e^2\n",
"=d(dy)+\\frac{1}{y}dx\\wedge dx-\\frac{1}{y}dy\\wedge dy=0.\\\\\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\theta^1 = 0, \\theta^2 = 0\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\theta^1 = 0, \\theta^2 = 0\\right]$"
],
"text/plain": [
"[torsion (1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = 0,\n",
" torsion (2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = 0]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[nab.torsion_form(i).disp() for i in [1,2]] # torsion forms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The second Cartan structure equation (25.10):\n",
"$\\ \\Omega^i_j=d\\omega^i_j+\\omega^i_k\\wedge \\omega^k_j$ \n",
"can be used in calculation of curvature forms:\n",
"\n",
"$$\n",
"\\Omega_1^1=d\\omega^1_1+\\omega^1_1\\wedge \\omega^1_1+\\omega^1_2\\wedge \\omega^2_1\\\\=d\\Big(-\\frac{1}{y}dy\\Big)-\\Big(\\frac{1}{y}dx\\Big)\\wedge \\Big(\\frac{1}{y}dx\\Big)\\\\\n",
"=\\frac{1}{y^2}dy\\wedge dy=0,$$\n",
"
\n",
"\n",
"\n",
"$$\n",
"\\Omega^1_2=d\\omega^1_2+\\omega^1_1\\wedge \\omega^1_2+\\omega^1_2\\wedge \\omega^2_2\\\\\n",
"=d\\Big(-\\frac{1}{y}dx\\Big)\n",
"+\\Big(-\\frac{1}{y}dy\\Big)\\wedge \\Big(-\\frac{1}{y}dx\\Big)\n",
"+\\Big(-\\frac{1}{y}dx\\Big)\\wedge \\Big(-\\frac{1}{y}dy\\Big)\\\\\n",
"=\\frac{1}{y^2}dy\\wedge dx+\\frac{1}{y^2}dy\\wedge dx+\\frac{1}{y^2}dx\\wedge dy=-\\frac{1}{y^2}dx\\wedge dy,$$\n",
"
\n",
"\n",
"$$\n",
"\\Omega^2_1=d\\omega^2_1+\\omega^2_1\\wedge \\omega^1_1+\\omega^2_2\\wedge \\omega^2_1\\\\\n",
"=d\\Big(-\\frac{1}{y}dx\\Big)\n",
"+\\Big(\\frac{1}{y}dx\\Big)\\wedge \\Big(-\\frac{1}{y}dy\\Big)\n",
"+\\Big(-\\frac{1}{y}dy\\Big)\\wedge \\Big(\\frac{1}{y}dx\\Big)\\\\\n",
"=\\frac{1}{y^2}dy\\wedge dx-\\frac{1}{y^2}dx\\wedge dy-\\frac{1}{y^2}dy\\wedge dx=\\frac{1}{y^2}dx\\wedge dy,\n",
"$$\n",
"
\n",
"\n",
"$$\n",
"\\Omega^2_2=d\\omega^2_2+\\omega^2_1\\wedge \\omega^1_2+\\omega^2_2\\wedge \\omega^2_2\\\\\n",
"=d\\Big(-\\frac{1}{y}dy\\Big)+\n",
"\\Big(\\frac{1}{y}dx\\Big)\\wedge \\Big(-\\frac{1}{y}dx\\Big)\\\\\n",
"=\\frac{1}{y^2}dy\\wedge dy-\\frac{1}{y^2}dx\\wedge dx=0.\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\Omega^1_{\\ \\, 1} = 0, \\Omega^1_{\\ \\, 2} = -\\frac{1}{y^{2}} \\mathrm{d} x\\wedge \\mathrm{d} y, \\Omega^2_{\\ \\, 1} = \\frac{1}{y^{2}} \\mathrm{d} x\\wedge \\mathrm{d} y, \\Omega^2_{\\ \\, 2} = 0\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\Omega^1_{\\ \\, 1} = 0, \\Omega^1_{\\ \\, 2} = -\\frac{1}{y^{2}} \\mathrm{d} x\\wedge \\mathrm{d} y, \\Omega^2_{\\ \\, 1} = \\frac{1}{y^{2}} \\mathrm{d} x\\wedge \\mathrm{d} y, \\Omega^2_{\\ \\, 2} = 0\\right]$"
],
"text/plain": [
"[curvature (1,1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = 0,\n",
" curvature (1,2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = -1/y^2 dx∧dy,\n",
" curvature (2,1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = y^(-2) dx∧dy,\n",
" curvature (2,2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = 0]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[nab.curvature_form(i,j).display() # curvature forms\n",
" for i in [1,2] for j in [1,2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"Since by (25.11) $\\quad \\Omega^i_j=\\frac{1}{2}R^i_{jkl}e^k\\wedge e^l$, and $R^i_{jkl}$ is antisymmetric in $k,l$, then\n",
"$$\\Omega_2^1=\\frac{1}{2}R^1_{2kl}e^k\\wedge e^l=\n",
"\\frac{1}{2}(R^1_{212}dx\\wedge dy+R^1_{221}dy\\wedge dx)\\\\\n",
"=\\frac{1}{2}(R^1_{212}dx\\wedge dy+R^1_{212}dx\\wedge dy)=R^1_{212}dx\\wedge dy=-\\frac{1}{y^2}dx\\wedge dy,\n",
"$$\n",
"\n",
"Using an analogous calculation for $\\Omega^2_1$, we see that the different from zero components \n",
"of the curvature tensor are equal to:\n",
"\n",
"$R^1_{212} =-\\frac{1}{y^2},\\ \\ \n",
"R^1_{221} =\\frac{1}{y^2},\\ \\ R^2_{112}=\\frac{1}{y^2},\\ \\ R^2_{121}=-\\frac{1}{y^2}$."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\begin{array}{lcl} R_{\\phantom{\\, 1}\\,2\\,1\\,2}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y^{2}} \\\\ R_{\\phantom{\\, 1}\\,2\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 2}\\phantom{\\, 1}} & = & \\frac{1}{y^{2}} \\\\ R_{\\phantom{\\, 2}\\,1\\,1\\,2}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}\\phantom{\\, 2}} & = & \\frac{1}{y^{2}} \\\\ R_{\\phantom{\\, 2}\\,1\\,2\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y^{2}} \\end{array}\\)"
],
"text/latex": [
"$\\displaystyle \\begin{array}{lcl} R_{\\phantom{\\, 1}\\,2\\,1\\,2}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y^{2}} \\\\ R_{\\phantom{\\, 1}\\,2\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 2}\\phantom{\\, 1}} & = & \\frac{1}{y^{2}} \\\\ R_{\\phantom{\\, 2}\\,1\\,1\\,2}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}\\phantom{\\, 2}} & = & \\frac{1}{y^{2}} \\\\ R_{\\phantom{\\, 2}\\,1\\,2\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y^{2}} \\end{array}$"
],
"text/plain": [
"R^1_212 = -1/y^2 \n",
"R^1_221 = y^(-2) \n",
"R^2_112 = y^(-2) \n",
"R^2_121 = -1/y^2 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"R = M.tensor_field(1,3,'R') # tensor field of (1,3)-type\n",
"R[:] = nab.riemann()[:] # R <- curv. (1,3) tensor f.\n",
"R.display_comp(coordinate_labels=False) # show R\n",
"#nab.riemann().display_comp(coordinate_labels=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"**Example 25.5** \n",
"\n",
"Consider the plane $R^2$ with Christoffel symbols\n",
"$$Γ^1_{11}= Γ^1_{22}=\\frac{4u}{1+u^2+4v^2},\\\\\n",
"Γ^2_{11}= Γ^2_{22}=\\frac{4v}{1+u^2+4v^2},\n",
"$$\n",
"and the remaining symbols equal to 0."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"%display latex\n",
"N = Manifold(2,name='R2',start_index=1) # manifold N\n",
"c_uv. = N.chart() # chart on N\n",
"nab = N.affine_connection('nab1') # connection coefficients\n",
"nab[:] = [[[4*u/(4*u^2 + 4*v^2 + 1), 0], # define all coefficients\n",
" [0, 4*u/(4*u^2 + 4*v^2 + 1)]], \n",
" [[4*v/(4*u^2 + 4*v^2 + 1), 0], \n",
" [0, 4*v/(4*u^2 + 4*v^2 + 1)]]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Compute connection forms:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\omega^1_{\\ \\, 1} = \\left( \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} u, \\omega^1_{\\ \\, 2} = \\left( \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} v, \\omega^2_{\\ \\, 1} = \\left( \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} u, \\omega^2_{\\ \\, 2} = \\left( \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} v\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\omega^1_{\\ \\, 1} = \\left( \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} u, \\omega^1_{\\ \\, 2} = \\left( \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} v, \\omega^2_{\\ \\, 1} = \\left( \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} u, \\omega^2_{\\ \\, 2} = \\left( \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\right) \\mathrm{d} v\\right]$"
],
"text/plain": [
"[nab1 connection 1-form (1,1) = 4*u/(4*u^2 + 4*v^2 + 1) du,\n",
" nab1 connection 1-form (1,2) = 4*u/(4*u^2 + 4*v^2 + 1) dv,\n",
" nab1 connection 1-form (2,1) = 4*v/(4*u^2 + 4*v^2 + 1) du,\n",
" nab1 connection 1-form (2,2) = 4*v/(4*u^2 + 4*v^2 + 1) dv]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[nab.connection_form(i,j).display() # connection forms\n",
" for i in [1,2] for j in [1,2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and torsion forms:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\theta^1 = 0, \\theta^2 = 0\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\theta^1 = 0, \\theta^2 = 0\\right]$"
],
"text/plain": [
"[torsion (1) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) = 0,\n",
" torsion (2) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) = 0]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[nab.torsion_form(i).disp() # torsion forms\n",
" for i in [1,2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let us try to compute curvature forms."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\Omega^1_{\\ \\, 1}, \\Omega^1_{\\ \\, 2}, \\Omega^2_{\\ \\, 1}, \\Omega^2_{\\ \\, 2}\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\Omega^1_{\\ \\, 1}, \\Omega^1_{\\ \\, 2}, \\Omega^2_{\\ \\, 1}, \\Omega^2_{\\ \\, 2}\\right]$"
],
"text/plain": [
"[2-form curvature (1,1) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) on the 2-dimensional differentiable manifold R2,\n",
" 2-form curvature (1,2) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) on the 2-dimensional differentiable manifold R2,\n",
" 2-form curvature (2,1) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) on the 2-dimensional differentiable manifold R2,\n",
" 2-form curvature (2,2) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) on the 2-dimensional differentiable manifold R2]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[nab.curvature_form(i,j) # curvature forms -symbols\n",
" for i in [1,2] for j in [1,2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before we show the results, we have to do some simplifications."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"for i in [1,2]: # factor curvature forms\n",
" for j in [1,2]:\n",
" nab.curvature_form(i,j).comp()[:].apply_map(factor)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^1_{\\ \\, 1} = \\frac{16 \\, u v}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^1_{\\ \\, 1} = \\frac{16 \\, u v}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v$"
],
"text/plain": [
"curvature (1,1) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) = 16*u*v/(4*u^2 + 4*v^2 + 1)^2 du∧dv"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^1_{\\ \\, 2} = \\frac{4 \\, {\\left(4 \\, v^{2} + 1\\right)}}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^1_{\\ \\, 2} = \\frac{4 \\, {\\left(4 \\, v^{2} + 1\\right)}}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v$"
],
"text/plain": [
"curvature (1,2) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) = 4*(4*v^2 + 1)/(4*u^2 + 4*v^2 + 1)^2 du∧dv"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^2_{\\ \\, 1} = -\\frac{4 \\, {\\left(4 \\, u^{2} + 1\\right)}}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^2_{\\ \\, 1} = -\\frac{4 \\, {\\left(4 \\, u^{2} + 1\\right)}}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v$"
],
"text/plain": [
"curvature (2,1) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) = -4*(4*u^2 + 1)/(4*u^2 + 4*v^2 + 1)^2 du∧dv"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^2_{\\ \\, 2} = -\\frac{16 \\, u v}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^2_{\\ \\, 2} = -\\frac{16 \\, u v}{{\\left(4 \\, u^{2} + 4 \\, v^{2} + 1\\right)}^{2}} \\mathrm{d} u\\wedge \\mathrm{d} v$"
],
"text/plain": [
"curvature (2,2) of connection nab1 w.r.t. Coordinate frame (R2, (∂/∂u,∂/∂v)) = -16*u*v/(4*u^2 + 4*v^2 + 1)^2 du∧dv"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i in [1,2]: # show curvature forms\n",
" for j in [1,2]:\n",
" show(nab.curvature_form(i,j).disp())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###
\n",
"\n",
"**Example 25.6**\n",
"\n",
"In previous examples, the torsion forms were equal to zero.\n",
"\n",
"Let us consider a 2-dimensional manifold with \"random\" connection coefficients."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"M = Manifold(2, 'M', start_index=1) # manifold M\n",
"c_xy. = M.chart() # chart on M\n",
"nab = M.affine_connection('nabla', r'\\nabla') # connection on M\n",
"nab[1,1,1], nab[1,1,2] = x*y, x^2\n",
"nab[1,2,1], nab[1,2,2] = -x^3, y^2\n",
"nab[2,1,1], nab[2,1,2] = y^2, x*y\n",
"nab[2,2,1], nab[2,2,2] = x^2+y^2+y^2, y^2-x^2\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\left[\\left[x y, x^{2}\\right], \\left[-x^{3}, y^{2}\\right]\\right], \\left[\\left[y^{2}, x y\\right], \\left[x^{2} + 2 \\, y^{2}, -x^{2} + y^{2}\\right]\\right]\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\left[\\left[x y, x^{2}\\right], \\left[-x^{3}, y^{2}\\right]\\right], \\left[\\left[y^{2}, x y\\right], \\left[x^{2} + 2 \\, y^{2}, -x^{2} + y^{2}\\right]\\right]\\right]$"
],
"text/plain": [
"[[[x*y, x^2], [-x^3, y^2]], [[y^2, x*y], [x^2 + 2*y^2, -x^2 + y^2]]]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%display latex # show connection\n",
"nab[:] # coefficients"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Compute the connection forms:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\left[\\left[\\omega^1_{\\ \\, 1} = x y \\mathrm{d} x + x^{2} \\mathrm{d} y, \\omega^1_{\\ \\, 2} = -x^{3} \\mathrm{d} x + y^{2} \\mathrm{d} y\\right], \\left[\\omega^2_{\\ \\, 1} = y^{2} \\mathrm{d} x + x y \\mathrm{d} y, \\omega^2_{\\ \\, 2} = \\left( x^{2} + 2 \\, y^{2} \\right) \\mathrm{d} x + \\left( -x^{2} + y^{2} \\right) \\mathrm{d} y\\right]\\right]\\)"
],
"text/latex": [
"$\\displaystyle \\left[\\left[\\omega^1_{\\ \\, 1} = x y \\mathrm{d} x + x^{2} \\mathrm{d} y, \\omega^1_{\\ \\, 2} = -x^{3} \\mathrm{d} x + y^{2} \\mathrm{d} y\\right], \\left[\\omega^2_{\\ \\, 1} = y^{2} \\mathrm{d} x + x y \\mathrm{d} y, \\omega^2_{\\ \\, 2} = \\left( x^{2} + 2 \\, y^{2} \\right) \\mathrm{d} x + \\left( -x^{2} + y^{2} \\right) \\mathrm{d} y\\right]\\right]$"
],
"text/plain": [
"[[nabla connection 1-form (1,1) = x*y dx + x^2 dy,\n",
" nabla connection 1-form (1,2) = -x^3 dx + y^2 dy],\n",
" [nabla connection 1-form (2,1) = y^2 dx + x*y dy,\n",
" nabla connection 1-form (2,2) = (x^2 + 2*y^2) dx + (-x^2 + y^2) dy]]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[[nab.connection_form(i,j).display() # connection forms\n",
" for j in [1,2]] for i in [1,2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Recall that the torsion was defined in (21.13) as \n",
"\n",
"$$T (X, Y) = ∇_X Y − ∇_Y X − [X, Y],\\quad \\text{for}\\quad X,Y\\in \\mathfrak{X}(M).$$\n",
"\n",
"In SageMath the `torsion` method returns the tensor of type (1,2) defined by\n",
"\n",
"$$\\tilde{T}(\\omega,X,Y)=\\omega(T(X,Y)),\\quad \\text{for}\\quad X,Y\\in \\mathfrak{X}(M), \\omega\\in \\Omega^1(M).\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tensor field of type (1,2) on the 2-dimensional differentiable manifold M\n"
]
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\left( -x^{3} - x^{2} \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( x^{3} + x^{2} \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} y\\otimes \\mathrm{d} x + \\left( x^{2} - x y + 2 \\, y^{2} \\right) \\frac{\\partial}{\\partial y }\\otimes \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( -x^{2} + x y - 2 \\, y^{2} \\right) \\frac{\\partial}{\\partial y }\\otimes \\mathrm{d} y\\otimes \\mathrm{d} x\\)"
],
"text/latex": [
"$\\displaystyle \\left( -x^{3} - x^{2} \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( x^{3} + x^{2} \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} y\\otimes \\mathrm{d} x + \\left( x^{2} - x y + 2 \\, y^{2} \\right) \\frac{\\partial}{\\partial y }\\otimes \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( -x^{2} + x y - 2 \\, y^{2} \\right) \\frac{\\partial}{\\partial y }\\otimes \\mathrm{d} y\\otimes \\mathrm{d} x$"
],
"text/plain": [
"(-x^3 - x^2) ∂/∂x⊗dx⊗dy + (x^3 + x^2) ∂/∂x⊗dy⊗dx + (x^2 - x*y + 2*y^2) ∂/∂y⊗dx⊗dy + (-x^2 + x*y - 2*y^2) ∂/∂y⊗dy⊗dx"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(nab.torsion()) # torsion (1,2) tensor\n",
"nab.torsion().disp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The torsion forms in our example are equal to:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\theta^1 = \\left( -x^{3} - x^{2} \\right) \\mathrm{d} x\\wedge \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\theta^1 = \\left( -x^{3} - x^{2} \\right) \\mathrm{d} x\\wedge \\mathrm{d} y$"
],
"text/plain": [
"torsion (1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = (-x^3 - x^2) dx∧dy"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\theta^2 = \\left( x^{2} - x y + 2 \\, y^{2} \\right) \\mathrm{d} x\\wedge \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\theta^2 = \\left( x^{2} - x y + 2 \\, y^{2} \\right) \\mathrm{d} x\\wedge \\mathrm{d} y$"
],
"text/plain": [
"torsion (2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = (x^2 - x*y + 2*y^2) dx∧dy"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i in [1,2]: # torsion forms\n",
" show(nab.torsion_form(i).disp())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and the curvature forms:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^1_{\\ \\, 1} = \\left( -x^{4} y - y^{4} + x \\right) \\mathrm{d} x\\wedge \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^1_{\\ \\, 1} = \\left( -x^{4} y - y^{4} + x \\right) \\mathrm{d} x\\wedge \\mathrm{d} y$"
],
"text/plain": [
"curvature (1,1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = (-x^4*y - y^4 + x) dx∧dy"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^1_{\\ \\, 2} = \\left( 2 \\, x^{5} + x y^{3} - 2 \\, y^{4} - {\\left(x^{3} + x^{2}\\right)} y^{2} \\right) \\mathrm{d} x\\wedge \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^1_{\\ \\, 2} = \\left( 2 \\, x^{5} + x y^{3} - 2 \\, y^{4} - {\\left(x^{3} + x^{2}\\right)} y^{2} \\right) \\mathrm{d} x\\wedge \\mathrm{d} y$"
],
"text/plain": [
"curvature (1,2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = (2*x^5 + x*y^3 - 2*y^4 - (x^3 + x^2)*y^2) dx∧dy"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^2_{\\ \\, 1} = \\left( x^{2} y^{2} + 2 \\, x y^{3} - y^{4} + {\\left(x^{3} - 1\\right)} y \\right) \\mathrm{d} x\\wedge \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^2_{\\ \\, 1} = \\left( x^{2} y^{2} + 2 \\, x y^{3} - y^{4} + {\\left(x^{3} - 1\\right)} y \\right) \\mathrm{d} x\\wedge \\mathrm{d} y$"
],
"text/plain": [
"curvature (2,1) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = (x^2*y^2 + 2*x*y^3 - y^4 + (x^3 - 1)*y) dx∧dy"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\\(\\displaystyle \\Omega^2_{\\ \\, 2} = \\left( y^{4} + {\\left(x^{4} - 4\\right)} y - 2 \\, x \\right) \\mathrm{d} x\\wedge \\mathrm{d} y\\)"
],
"text/latex": [
"$\\displaystyle \\Omega^2_{\\ \\, 2} = \\left( y^{4} + {\\left(x^{4} - 4\\right)} y - 2 \\, x \\right) \\mathrm{d} x\\wedge \\mathrm{d} y$"
],
"text/plain": [
"curvature (2,2) of connection nabla w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y)) = (y^4 + (x^4 - 4)*y - 2*x) dx∧dy"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i in [1,2]: # curvature forms\n",
" for j in [1,2]:\n",
" show(nab.curvature_form(i,j).disp())"
]
}
],
"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
}