{ "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 }