{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3-sphere: vector fields and left-invariant parallelization\n",
"\n",
"This notebook demonstrates some differential geometry capabilities of SageMath on the example of the 3-dimensional sphere, $\\mathbb{S}^3$. The corresponding tools have been developed within the [SageManifolds](https://sagemanifolds.obspm.fr) project (version 1.3, as included in SageMath 8.3).\n",
"\n",
"Click [here](https://raw.githubusercontent.com/sagemanifolds/SageManifolds/master/Worksheets/v1.3/SM_sphere_S3_vectors.ipynb) to download the notebook file (ipynb format). To run it, you must start SageMath with the Jupyter notebook, via the command `sage -n jupyter`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*NB:* a version of SageMath at least equal to 7.5 is required to run this worksheet:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'SageMath version 8.3, Release Date: 2018-08-03'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"version()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we set up the notebook to display mathematical objects using LaTeX formatting:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%display latex"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also define a viewer for 3D plots (use `'threejs'` or `'jmol'` for interactive 3D graphics):"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"viewer3D = 'threejs' # must be 'threejs', jmol', 'tachyon' or None (default)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To increase the computational speed, we ask for demanding computations to be parallelly performed on 8 cores:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"Parallelism().set(nproc=8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## $\\mathbb{S}^3$ as a 3-dimensional differentiable manifold\n",
"\n",
"We start by declaring $\\mathbb{S}^3$ as a differentiable manifold of dimension 3 over $\\mathbb{R}$:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"S3 = Manifold(3, 'S^3', latex_name=r'\\mathbb{S}^3', start_index=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first argument, `3`, is the dimension of the manifold, while the second argument is the symbol used to label the manifold, with the LaTeX output specified by the argument `latex_name`. The argument `start_index` sets the index range to be used on the manifold for labelling components w.r.t. a basis or a frame: `start_index=1` corresponds to $\\{1,2,3\\}$; the default value is `start_index=0`, yielding to $\\{0,1,2\\}$."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"print(S3)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"3-dimensional differentiable manifold S^3"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"S3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Coordinate charts on $\\mathbb{S}^3$\n",
"\n",
"The 3-sphere cannot be covered by a single chart. At least two charts are necessary, for instance the charts associated with the stereographic projections from two distinct points, $N$ and $S$ say,\n",
"which we may call the *North pole* and the *South pole* respectively. Let us introduce the open subsets covered by these two charts: \n",
"$$ U := \\mathbb{S}^3\\setminus\\{N\\} $$ \n",
"$$ V := \\mathbb{S}^3\\setminus\\{S\\} $$"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Open subset U of the 3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"U = S3.open_subset('U') ; print(U)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Open subset V of the 3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"V = S3.open_subset('V') ; print(V)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We declare that $\\mathbb{S}^3 = U \\cup V$:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"S3.declare_union(U, V)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Then we introduce the stereographic chart on $U$, denoting by $(x,y,z)$ the coordinates resulting from the stereographic projection from the North pole onto the equatorial plane:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Chart (U, (x, y, z))"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoN. = U.chart()\n",
"stereoN"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"x: (-oo, +oo); y: (-oo, +oo); z: (-oo, +oo)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoN.coord_range()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly, we introduce on $V$ the coordinates $(x',y',z')$ corresponding to the stereographic projection from the South pole onto the equatorial plane:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Chart (V, (xp, yp, zp))"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoS. = V.chart(\"xp:x' yp:y' zp:z'\")\n",
"stereoS"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"xp: (-oo, +oo); yp: (-oo, +oo); zp: (-oo, +oo)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoS.coord_range()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have to specify the **transition map** between the charts `stereoN` = $(U,(x,y,z))$ and `stereoS` = $(V,(x',y',z'))$; it is given by the standard inversion formulas:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"xp = x/(x^2 + y^2 + z^2)\n",
"yp = y/(x^2 + y^2 + z^2)\n",
"zp = z/(x^2 + y^2 + z^2)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r2 = x^2+y^2+z^2\n",
"stereoN_to_S = stereoN.transition_map(stereoS, \n",
" (x/r2, y/r2, z/r2), \n",
" intersection_name='W',\n",
" restrictions1= x^2+y^2+z^2!=0, \n",
" restrictions2= xp^2+yp^2+zp^2!=0)\n",
"stereoN_to_S.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the above declaration, `'W'` is the name given to the open subset where the two charts overlap: $W := U\\cap V$, the condition $x^2+y^2+z^2\\not=0$ defines $W$ as a subset of $U$, and the condition $x'^2+y'^2+z'^2\\not=0$ defines $W$ as a subset of $V$.\n",
"\n",
"The inverse coordinate transformation is computed by means of the method `inverse()`:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"x = xp/(xp^2 + yp^2 + zp^2)\n",
"y = yp/(xp^2 + yp^2 + zp^2)\n",
"z = zp/(xp^2 + yp^2 + zp^2)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoS_to_N = stereoN_to_S.inverse()\n",
"stereoS_to_N.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the situation is of course perfectly symmetric regarding the coordinates $(x,y,z)$ and $(x',y',z')$.\n",
"\n",
"At this stage, the user's atlas has four charts:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[Chart (U, (x, y, z)),\n",
" Chart (V, (xp, yp, zp)),\n",
" Chart (W, (x, y, z)),\n",
" Chart (W, (xp, yp, zp))]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"S3.atlas()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For future reference, we store $W=U\\cap V$ into a Python variable:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Open subset W of the 3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"W = U.intersection(V)\n",
"print(W)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The North and South poles\n",
"\n",
"$N$ is the point of $V$ of stereographic coordinates $(x',y',z')=(0,0,0)$:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Point N on the 3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"N = V((0,0,0), chart=stereoS, name='N')\n",
"print(N)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"while $S$ is the point of $U$ of stereographic coordinates $(x,y,z)=(0,0,0)$:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Point S on the 3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"S = U((0,0,0), chart=stereoN, name='S')\n",
"print(S)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have of course"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([N not in U, N in V, S in U, S not in V])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Embedding of $\\mathbb{S}^3$ into $\\mathbb{R}^4$\n",
"\n",
"Let us first declare $\\mathbb{R}^4$ as a 4-dimensional manifold covered by a single chart (the so-called **Cartesian coordinates**):"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Chart (R^4, (T, X, Y, Z))"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"R4 = Manifold(4, 'R^4', r'\\mathbb{R}^4')\n",
"X4. = R4.chart()\n",
"X4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The embedding of $\\mathbb{S}^3$ into $\\mathbb{R}^4$ is then defined by the standard formulas relating the stereographic coordinates to the ambient Cartesian ones when considering a **stereographic projection** from the point $(-1,0,0,0)$ to the equatorial plane $T=0$:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi: S^3 --> R^4\n",
"on U: (x, y, z) |--> (T, X, Y, Z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*x/(x^2 + y^2 + z^2 + 1), 2*y/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1))\n",
"on V: (xp, yp, zp) |--> (T, X, Y, Z) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1), 2*xp/(xp^2 + yp^2 + zp^2 + 1), 2*yp/(xp^2 + yp^2 + zp^2 + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 1))"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rp2 = xp^2 + yp^2 + zp^2\n",
"Phi = S3.diff_map(R4, {(stereoN, X4): \n",
" [(1-r2)/(r2+1), 2*x/(r2+1), \n",
" 2*y/(r2+1), 2*z/(r2+1)],\n",
" (stereoS, X4):\n",
" [(rp2-1)/(rp2+1), 2*xp/(rp2+1), \n",
" 2*yp/(rp2+1), 2*zp/(rp2+1)]},\n",
" name='Phi', latex_name=r'\\Phi')\n",
"Phi.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With this choice of stereographic projection, the \"North\" pole is actually the point of coordinates $(-1,0,0,0)$ in $\\mathbb{R}^4$:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(-1, 0, 0, 0)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X4(Phi(N))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"while the \"South\" pole is the point of coordinates $(1,0,0,0)$:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(1, 0, 0, 0)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X4(Phi(S))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hyperspherical coordinates\n",
"\n",
"The hyperspherical coordinates $(\\chi, \\theta, \\phi)$ generalize the standard spherical coordinates $(\\theta, \\phi)$ on $\\mathbb{S}^2$. They are defined on the open domain $A\\subset W \\subset \\mathbb{S}^3$ that is the complement of the \"origin meridian\"; since the latter is defined by $y=0$ and $x\\geq 0$, we declare:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Open subset A of the 3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"A = W.open_subset('A', coord_def={stereoN.restrict(W): (y!=0, x<0), \n",
" stereoS.restrict(W): (yp!=0, xp<0)})\n",
"print(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We then declare the chart $(A,(\\chi,\\theta,\\phi))$ by specifying the intervals spanned by the various coordinates:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Chart (A, (ch, th, ph))"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spher. = A.chart(r'ch:(0,pi):\\chi th:(0,pi):\\theta ph:(0,2*pi):\\phi')\n",
"spher"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"ch: (0, pi); th: (0, pi); ph: (0, 2*pi)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spher.coord_range()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The specification of the hyperspherical coordinates is completed by providing the transition map to the stereographic chart $(A,(x,y,z))$:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"x = cos(ph)*sin(ch)*sin(th)/(cos(ch) + 1)\n",
"y = sin(ch)*sin(ph)*sin(th)/(cos(ch) + 1)\n",
"z = cos(th)*sin(ch)/(cos(ch) + 1)"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"den = 1 + cos(ch)\n",
"spher_to_stereoN = spher.transition_map(stereoN.restrict(A), \n",
" (sin(ch)*sin(th)*cos(ph)/den,\n",
" sin(ch)*sin(th)*sin(ph)/den,\n",
" sin(ch)*cos(th)/den))\n",
"spher_to_stereoN.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also provide the inverse transition map, asking to check that the provided formulas are indeed correct (argument `verbose=True`):"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Check of the inverse coordinate transformation:\n",
" ch == 2*arctan(sqrt(-cos(ch) + 1)/sqrt(cos(ch) + 1))\n",
" th == arctan2(sqrt(-cos(ch) + 1)*sin(th)/sqrt(cos(ch) + 1), cos(th)*sin(ch)/(cos(ch) + 1))\n",
" ph == pi - arctan2(sin(ch)*sin(ph)*sin(th)/(cos(ch) + 1), -cos(ph)*sin(ch)*sin(th)/(cos(ch) + 1))\n",
" x == x\n",
" y == y\n",
" z == z\n"
]
}
],
"source": [
"spher_to_stereoN.set_inverse(2*atan(sqrt(x^2+y^2+z^2)),\n",
" atan2(sqrt(x^2+y^2), z),\n",
" atan2(-y, -x)+pi,\n",
" verbose=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The check is passed, modulo some lack of trigonometric simplifications in the first three lines."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"ch = 2*arctan(sqrt(x^2 + y^2 + z^2))\n",
"th = arctan2(sqrt(x^2 + y^2), z)\n",
"ph = pi + arctan2(-y, -x)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spher_to_stereoN.inverse().display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The transition map $(A,(\\chi,\\theta,\\phi))\\rightarrow (A,(x',y',z'))$ is obtained by combining the transition maps $(A,(\\chi,\\theta,\\phi))\\rightarrow (A,(x,y,z))$ and $(A,(x,y,z))\\rightarrow (A,(x',y',z'))$:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"xp = (cos(ch) + 1)*cos(ph)*sin(th)/sin(ch)\n",
"yp = (cos(ch) + 1)*sin(ph)*sin(th)/sin(ch)\n",
"zp = (cos(ch) + 1)*cos(th)/sin(ch)"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spher_to_stereoS = stereoN_to_S.restrict(A) * spher_to_stereoN\n",
"spher_to_stereoS.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly, the transition map $(A,(x',y',z'))\\rightarrow (A,(\\chi,\\theta,\\phi))$ is obtained by combining the transition maps $(A,(x',y',z'))\\rightarrow (A,(x,y,z))$ and $(A,(x,y,z))\\rightarrow (A,(\\chi,\\theta,\\phi))$:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"ch = 2*arctan(1/sqrt(xp^2 + yp^2 + zp^2))\n",
"th = arctan2(sqrt(xp^2 + yp^2)/(xp^2 + yp^2 + zp^2), zp/(xp^2 + yp^2 + zp^2))\n",
"ph = pi - arctan2(yp/(xp^2 + yp^2 + zp^2), -xp/(xp^2 + yp^2 + zp^2))"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoS_to_spher = spher_to_stereoN.inverse() * stereoS_to_N.restrict(A)\n",
"stereoS_to_spher.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"At this stage, the user atlas of $\\mathbb{S}^3$ is"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[Chart (U, (x, y, z)),\n",
" Chart (V, (xp, yp, zp)),\n",
" Chart (W, (x, y, z)),\n",
" Chart (W, (xp, yp, zp)),\n",
" Chart (A, (x, y, z)),\n",
" Chart (A, (xp, yp, zp)),\n",
" Chart (A, (ch, th, ph))]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"S3.atlas()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us get the coordinate expression of the restriction of the embedding $\\Phi$ to $A$:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi: S^3 --> R^4\n",
"on A: (x, y, z) |--> (T, X, Y, Z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*x/(x^2 + y^2 + z^2 + 1), 2*y/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1))"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Phi.display(stereoN.restrict(A), X4)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi: S^3 --> R^4\n",
"on A: (ch, th, ph) |--> (T, X, Y, Z) = (cos(ch), cos(ph)*sin(ch)*sin(th), sin(ch)*sin(ph)*sin(th), cos(th)*sin(ch))"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Phi.display(spher, X4)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi: S^3 --> R^4\n",
"on U: (x, y, z) |--> (T, X, Y, Z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*x/(x^2 + y^2 + z^2 + 1), 2*y/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1))\n",
"on V: (xp, yp, zp) |--> (T, X, Y, Z) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1), 2*xp/(xp^2 + yp^2 + zp^2 + 1), 2*yp/(xp^2 + yp^2 + zp^2 + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 1))\n",
"on A: (ch, th, ph) |--> (T, X, Y, Z) = (cos(ch), cos(ph)*sin(ch)*sin(th), sin(ch)*sin(ph)*sin(th), cos(th)*sin(ch))"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Phi.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Projections from $\\mathbb{R}^4$ to $\\mathbb{S}^3$\n",
"\n",
"We will need some projection operators from (a subset of) $\\mathbb{R}^4$ to $\\mathbb{S}^3$.\n",
"\n",
"First, let $\\mathbb{R}^4_N$ be $\\mathbb{R}^4$ minus the hyperplane $T=-1$:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"R4N = R4.open_subset('R4N', latex_name=r'\\mathbb{R}^4_N', \n",
" coord_def={X4: T!=-1})\n",
"X4N = X4.restrict(R4N)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and let us consider the following projection $\\Pi_N: \\mathbb{R}^4_N \\to U\\subset\\mathbb{S}^3$:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"P_N: R4N --> U\n",
" (T, X, Y, Z) |--> (x, y, z) = (X/(T + 1), Y/(T + 1), Z/(T + 1))"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ProjN = R4N.diff_map(U, {(X4N, stereoN): \n",
" [X/(1+T), Y/(1+T), Z/(1+T)]},\n",
" name='P_N', latex_name=r'\\Pi_N')\n",
"ProjN.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly, let $\\mathbb{R}^4_S$ be $\\mathbb{R}^4$ minus the hyperplane $T=1$ and $\\Pi_S$ the \n",
"following projection $\\mathbb{R}_S\\to V\\subset \\mathbb{S}^3$:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"R4S = R4.open_subset('R4S', latex_name=r'\\mathbb{R}^4_S', \n",
" coord_def={X4: T!=1})\n",
"X4S = X4.restrict(R4S)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"P_S: R4S --> V\n",
" (T, X, Y, Z) |--> (xp, yp, zp) = (-X/(T - 1), -Y/(T - 1), -Z/(T - 1))"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ProjS = R4S.diff_map(V, {(X4S, stereoS): \n",
" [X/(1-T), Y/(1-T), Z/(1-T)]},\n",
" name='P_S', latex_name=r'\\Pi_S')\n",
"ProjS.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us check that once applied to an embedded point of $U\\cap V\\subset \\mathbb{S}^3$, this projection reduces to the identity:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(a^2 + 1, b, c)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('a b c', domain='real')\n",
"p = S3((1+a^2,b,c), chart=stereoN)\n",
"stereoN(p)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([p in U, p in V])"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([ProjN(Phi(p)) == p, ProjS(Phi(p)) == p])"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = S3((1+a^2,b,c), chart=stereoS)\n",
"all([ProjN(Phi(p)) == p, ProjS(Phi(p)) == p])"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(1/2*sqrt(3), 1/2*cos(b)*sin(a), 1/2*sin(a)*sin(b), 1/2*cos(a))"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = R4((sqrt(3)/2, sin(a)*cos(b)/2, sin(a)*sin(b)/2, cos(a)/2))\n",
"X4(q)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([q in R4N, q in R4S])"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"False"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([Phi(ProjN(q)) == q, Phi(ProjS(q)) == q])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Quaternions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We consider the (division) algebra of quaternions $\\mathbb{H}$ as $\\mathbb{R}^4$ endowed with the following (non-commutative) product:"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"def qprod(p,q):\n",
" if p in R4 and q in R4:\n",
" T1, X1, Y1, Z1 = X4(p)\n",
" T2, X2, Y2, Z2 = X4(q)\n",
" return R4(((T1*T2-X1*X2-Y1*Y2-Z1*Z2).simplify_full(),\n",
" (T1*X2+X1*T2+Y1*Z2-Z1*Y2).simplify_full(),\n",
" (T1*Y2-X1*Z2+Y1*T2+Z1*X2).simplify_full(),\n",
" (T1*Z2+X1*Y2-Y1*X2+Z1*T2).simplify_full()))\n",
" if p in S3 and q in S3:\n",
" a = qprod(Phi(p),Phi(q))\n",
" if X4(a) == (-1,0,0,0):\n",
" return N\n",
" return ProjN(R4N(a))\n",
" raise ValueError(\"Cannot evaluate qprod of {} and {}\".format(p,q))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that we have extended the definition of the quaternionic product to $\\mathbb{S}^3$ via the embedding $\\Phi$. \n",
"\n",
"### Distinguished quaternions on $\\mathbb{S}^3$\n",
"\n",
"Let us introduce two special points on $\\mathbb{S}^3$: $\\mathbf{1}$ and $-\\mathbf{1}$."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(1, 0, 0, 0)"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"One = S3((0,0,0), chart=stereoN, name='1', latex_name=r'\\mathbf{1}')\n",
"X4(Phi(One))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we can see from the Cartesian coordinates of $\\Phi(\\mathbf{1})$, the point $\\mathbf{1}$ is actually nothing but the \"South\" pole used to define the stereographic chart $(V,(x',y',z'))$:"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"One == S"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(-1, 0, 0, 0)"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"minusOne = S3((0,0,0), chart=stereoS, name='-1', latex_name=r'-\\mathbf{1}')\n",
"X4(Phi(minusOne))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The point $\\mathbf{-1}$ is thus nothing but the \"North\" pole used to define the stereographic chart $(U,(x,y,z))$:"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"minusOne == N"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next we introduce the points $\\mathbf{i}$, $\\mathbf{j}$ and $\\mathbf{k}$ on $\\mathbb{S}^3$:"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, 1, 0, 0)"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"I = S3((1,0,0), chart=stereoN, name='i', latex_name=r'\\mathbf{i}')\n",
"X4(Phi(I))"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(1, 0, 0)"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoS(I)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, 0, 1, 0)"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"J = S3((0,1,0), chart=stereoN, name='j', latex_name=r'\\mathbf{j}')\n",
"X4(Phi(J))"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, 1, 0)"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoS(J)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since $\\mathbf{j}$ lies in $A$, contrary to $\\mathbf{i}$, we may ask for its hyperspherical coordinates:"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(1/2*pi, 1/2*pi, 1/2*pi)"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spher(J)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, 0, 0, 1)"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"K = S3((0,0,1), chart=stereoN, name='k', latex_name=r'\\mathbf{k}')\n",
"X4(Phi(K))"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, 0, 1)"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stereoS(K)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Hamilton's fundamental relations\n",
"$$ \\mathbf{i} \\mathbf{j} \\mathbf{k} = \\mathbf{-1} $$\n",
"$$ \\mathbf{i} \\mathbf{j} = \\mathbf{k},\\quad \\mathbf{j} \\mathbf{k} = \\mathbf{i}, \\quad \\mathbf{k} \\mathbf{i} = \\mathbf{j}$$\n",
"are satisfied:"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qprod(I, qprod(J,K)) == minusOne"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([qprod(I,J) == K, qprod(J,K) == I,\n",
" qprod(K,I) == J])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These relations imply $\\mathbf{i}^2 = \\mathbf{-1}$, $\\mathbf{j}^2 = \\mathbf{-1}$ and $\\mathbf{k}^2 = \\mathbf{-1}$:"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([qprod(One,One) == One, qprod(I,I) == minusOne,\n",
" qprod(J,J) == minusOne, qprod(K,K) == minusOne])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us introduce $\\mathbf{-i}$, $\\mathbf{-j}$ and $\\mathbf{-k}$, as points of $\\mathbb{S}^3$:"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, -1, 0, 0)"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"minusI = qprod(minusOne, I)\n",
"X4(Phi(minusI))"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, 0, -1, 0)"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"minusJ = qprod(minusOne, J)\n",
"X4(Phi(minusJ))"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(0, 0, 0, -1)"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"minusK = qprod(minusOne, K)\n",
"X4(Phi(minusK))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Quaternionic conjugation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the comments below (but not in the SageMath code), we shall identify $\\mathbf{1}\\in \\mathbb{S}^3$ with $\\Phi(\\mathbf{1})\\in \\mathbb{R}^4$, $\\mathbf{i}\\in \\mathbb{S}^3$ with $\\Phi(\\mathbf{i})\\in \\mathbb{R}^4$, etc. In particular, we consider $(\\mathbf{1}, \\mathbf{i}, \\mathbf{j},\\mathbf{k})$ as a basis of the quaternion algebra $\\mathbb{H}$. \n",
"\n",
"The *conjugate* of a quaternion $q = T + X\\mathbf{i} + Y\\mathbf{j} + Z\\mathbf{k}$ is $\\bar{q} = T - X\\mathbf{i} - Y\\mathbf{j} - Z\\mathbf{k}$; hence we define:\n"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"def qconj(p):\n",
" if p in R4:\n",
" T, X, Y, Z = X4(p)\n",
" return R4((T, -X, -Y, -Z))\n",
" if p in S3:\n",
" a = qconj(Phi(p))\n",
" if X4(a) == (-1,0,0,0):\n",
" return N\n",
" return ProjN(a)\n",
" raise ValueError(\"Cannot evaluate qconf of {}\".format(p)) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In particular, we have $\\bar{\\mathbf{1}} = \\mathbf{1}$, $\\bar{\\mathbf{i}} = -\\mathbf{i}$, $\\bar{\\mathbf{j}} = -\\mathbf{j}$ and $\\bar{\\mathbf{k}} = -\\mathbf{k}$:"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([qconj(One) == One, \n",
" qconj(I) == minusI,\n",
" qconj(J) == minusJ, \n",
" qconj(K) == minusK])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The conjugate of an element of $\\mathbb{S}^3$"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(-a, -b, -c)"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"assume(a != 0) # to ensure that qconj(p) is not N\n",
"p = S3((a,b,c), chart=stereoN)\n",
"stereoN(qconj(p))"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(-a, -b, -c)"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = S3((a,b,c), chart=stereoS)\n",
"stereoS(qconj(p))"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [],
"source": [
"forget(a!=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Norm of a quaternion\n",
"\n",
"The quaternionic norm $\\| q\\| = \\sqrt{q\\bar{q}}$ coincide with the Euclidean norm in $\\mathbb{R}^4$, so that $\\mathbb{S}^3$ can be viewed as the set of unit quaternions; hence we define:"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [],
"source": [
"def qnorm(p):\n",
" if p in R4:\n",
" T, X, Y, Z = X4(p)\n",
" return (sqrt(T^2 + X^2 + Y^2 + Z^2)).simplify_full()\n",
" if p in S3:\n",
" return 1\n",
" raise ValueError(\"Cannot evaluate qnorm of {}\".format(p)) "
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"sqrt(a^2 + b^2 + c^2 + d^2)"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('d', domain='real')\n",
"q = R4((a,b,c,d))\n",
"qnorm(q)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us check that $\\| q\\|^2 = q\\bar{q}$:"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"R4((qnorm(q)^2,0,0,0)) == qprod(q, qconj(q))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As elements of $\\mathbb{S}^3$, $\\mathbf{1}$, $\\mathbf{i}$, $\\mathbf{j}$ and $\\mathbf{k}$ have all unit norm:"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(qnorm(One), qnorm(I), qnorm(J), qnorm(K)) == (1, 1, 1, 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Lie group structure"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Right translation by $\\mathbf{i}$\n",
"\n",
"The right translation by $\\mathbf{i}$ is the map $\\bar{R}_{\\mathbf{i}}: p \\mapsto p \\mathbf{i}$. We define it first at the level of $\\mathbb{R}^4$:"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"R^4 --> R^4\n",
" (T, X, Y, Z) |--> (-X, T, Z, -Y)"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = R4((T,X,Y,Z))\n",
"RI_R4 = R4.diff_map(R4, X4(qprod(p, Phi(I))))\n",
"RI_R4.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Focusing on its action on $\\mathbb{S}^3$, we consider then the map ${\\bar R}_{\\mathbf{i}}\\circ\\Phi$:"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"S^3 --> R^4\n",
"on U: (x, y, z) |--> (T, X, Y, Z) = (-2*x/(x^2 + y^2 + z^2 + 1), -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1), -2*y/(x^2 + y^2 + z^2 + 1))\n",
"on V: (xp, yp, zp) |--> (T, X, Y, Z) = (-2*xp/(xp^2 + yp^2 + zp^2 + 1), (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 1), -2*yp/(xp^2 + yp^2 + zp^2 + 1))\n",
"on A: (ch, th, ph) |--> (T, X, Y, Z) = (-cos(ph)*sin(ch)*sin(th), cos(ch), cos(th)*sin(ch), -sin(ch)*sin(ph)*sin(th))"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RI_S3_R4 = RI_R4 * Phi\n",
"RI_S3_R4.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let $U_{\\mathbf{i}} := U \\setminus \\{\\mathbf{i}\\}$; since the coordinates of $\\mathbf{i}$ in the chart $(U,(x,y,z))$ are $(1,0,0)$, we declare $U_{\\mathbf{i}}$ as"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [],
"source": [
"UI = U.open_subset('U_I', latex_name=r'U_{\\mathbf{i}}',\n",
" coord_def={stereoN: (x!=1, y!=0, z!=0)})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we restrict $R_{\\mathbf{i}}\\circ\\Phi$ to $U_{\\mathbf{i}}$ the codomain can be taken to be $\\mathbb{R}^4_N$ since $\\mathbf{i}$ is the only point of $\\mathbb{S}^3$ for which $T(R_{\\mathbf{i}}(p)) = -1$. Hence we may apply the operator $\\Pi_N$ to define the right translation by $\\mathbf{i}$ as a map $U_{\\mathbf{i}}\\to U$:"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"U_I --> U\n",
" (x, y, z) |--> (x, y, z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 - 2*x + 1), 2*z/(x^2 + y^2 + z^2 - 2*x + 1), -2*y/(x^2 + y^2 + z^2 - 2*x + 1))"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RI_UI = ProjN * RI_S3_R4.restrict(UI, subcodomain=R4N)\n",
"RI_UI.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly, if we restrict $R_{\\mathbf{i}}\\circ\\Phi$ to $V_{-\\mathbf{i}} := V \\setminus\\{-\\mathbf{i}\\}$, we get a map $V_{-\\mathbf{i}} \\to \\mathbb{R}^4_{S}$, so that composing by $\\Pi_S$, the right translation by $\\mathbf{i}$ becomes a map $V_{-\\mathbf{i}}\\to V$:"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"V_mI --> V\n",
" (xp, yp, zp) |--> (xp, yp, zp) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 2*xp + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 2*xp + 1), -2*yp/(xp^2 + yp^2 + zp^2 + 2*xp + 1))"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"VmI = V.open_subset('V_mI', latex_name=r'V_{-\\mathbf{i}}',\n",
" coord_def={stereoS: (xp!=-1, yp!=0, zp!=0)})\n",
"RI_VmI = ProjS * RI_S3_R4.restrict(VmI, subcodomain=R4S)\n",
"RI_VmI.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We note that $\\mathbb{S}^3 = U_{\\mathbf{i}} \\cup V_{-\\mathbf{i}}$:"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"S3.declare_union(UI, VmI)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Consequently, we can define the right translation by $\\mathbf{i}$ as a map \n",
"$R_{\\mathbf{i}}: \\mathbb{S}^3\\to \\mathbb{S}^3$ by providing the coordinate expressions obtained above on $U_{\\mathbf{i}}$ and $V_{-\\mathbf{i}}$: "
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"RI = S3.diff_map(S3, name='R_I', latex_name=r'{R_{\\mathbf{i}}}')\n",
"RI.add_expression(stereoN.restrict(UI), stereoN, \n",
" RI_UI.expr(stereoN.restrict(UI), stereoN))\n",
"RI.add_expression(stereoS.restrict(VmI), stereoS, \n",
" RI_VmI.expr(stereoS.restrict(VmI), stereoS))"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"R_I: S^3 --> S^3\n",
"on U_I: (x, y, z) |--> (x, y, z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 - 2*x + 1), 2*z/(x^2 + y^2 + z^2 - 2*x + 1), -2*y/(x^2 + y^2 + z^2 - 2*x + 1))"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RI.display(stereoN.restrict(UI), stereoN)"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"R_I: S^3 --> S^3\n",
"on V_mI: (xp, yp, zp) |--> (xp, yp, zp) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 2*xp + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 2*xp + 1), -2*yp/(xp^2 + yp^2 + zp^2 + 2*xp + 1))"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RI.display(stereoS.restrict(VmI), stereoS)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us check the formulas $R_{\\mathbf{i}}(\\mathbf{1})=\\mathbf{i}$, $R_{\\mathbf{i}}(-\\mathbf{1})=-\\mathbf{i}$, $R_{\\mathbf{i}}(\\mathbf{i})=-\\mathbf{1}$, $R_{\\mathbf{i}}(-\\mathbf{i})=\\mathbf{1}$, $R_{\\mathbf{i}}(\\mathbf{j})=-\\mathbf{k}$, $R_{\\mathbf{i}}(-\\mathbf{j})=\\mathbf{k}$, $R_{\\mathbf{i}}(\\mathbf{k})=\\mathbf{j}$ and $R_{\\mathbf{i}}(-\\mathbf{k})=-\\mathbf{j}$:"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([RI(One)==I, RI(minusOne)==minusI, \n",
" RI(I)==minusOne, RI(minusI)==One,\n",
" RI(J)==minusK, RI(minusJ)==K,\n",
" RI(K)==J, RI(minusK)==minusJ])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Left-invariant vector field induced by the right translation by $\\mathbf{i}$\n",
"\n",
"Let us recall the expression of the right translation by $\\mathbf{i}$ on $\\mathbb{R}^4$:"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"R^4 --> R^4\n",
" (T, X, Y, Z) |--> (-X, T, Z, -Y)"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RI_R4.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We turn it into a vector field $E_{\\mathbf{i}}$ on $\\mathbb{R}^4$ by identifying $T_p\\mathbb{R}^4$ and $\\mathbb{R}^4$ at each point $p\\in\\mathbb{R}^4$:"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_I = -X d/dT + T d/dX + Z d/dY - Y d/dZ"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"EI = R4.vector_field(name='E_I', latex_name=r'E_{\\mathbf{i}}')\n",
"EI[:] = RI_R4.expression()\n",
"EI.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The \"radial\" vector field on $\\mathbb{R}^4$ is"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"r = T d/dT + X d/dX + Y d/dY + Z d/dZ"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r = R4.vector_field(name='r')\n",
"r[:] = (T,X,Y,Z)\n",
"r.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is clear that $r\\cdot E_{\\mathbf{i}}=0$, where $\\cdot$ denotes the standard Euclidean scalar product in $\\mathbb{R}^4$. We can check this property explicitely by introducing the Euclidean metric:"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"h = dT*dT + dX*dX + dY*dY + dZ*dZ"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"h = R4.metric('h')\n",
"h[0,0], h[1,1], h[2,2], h[3, 3] = 1, 1, 1, 1\n",
"h.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"so that $r\\cdot E_{\\mathbf{i}} = h(r, E_{\\mathbf{i}})$:"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"h(r, EI) == 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This proves that the vector field $E_{\\mathbf{i}}$ is tangent to $\\mathbb{S}^3$, or more precisely to the embedded submanifold $\\Phi(\\mathbb{S}^3)$. Consequently, there exists a vector field $\\varepsilon_{\\mathbf{i}}$ on $\\mathbb{S}^3$, the pushforward of which by $\\Phi$ is \n",
"$E_{\\mathbf{i}}$:\n",
"$$\n",
" E_{\\mathbf{i}} = \\Phi^* \\varepsilon_{\\mathbf{i}}\n",
"$$\n",
"Let us determine the components of $\\varepsilon_{\\mathbf{i}}$ in the vector frame \n",
"$\\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z}\\right)$ associated with the stereographic coordinates on $U$:"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Coordinate frame (U, (d/dx,d/dy,d/dz))"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frameN = stereoN.frame()\n",
"frameN"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The pushforwards by $\\Phi$ of the stereographic frame vectors are:"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[Vector field Phi^*(d/dx) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n",
" Vector field Phi^*(d/dy) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n",
" Vector field Phi^*(d/dz) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4]"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frameN_R4 = [Phi.pushforward(frameN[i]) for i in S3.irange()]\n",
"frameN_R4"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Vector field Phi^*(d/dx) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4\n"
]
}
],
"source": [
"print(frameN_R4[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The expressions of $\\Phi^* \\frac{\\partial}{\\partial x}$, $\\Phi^* \\frac{\\partial}{\\partial y}$\n",
"and $\\Phi^* \\frac{\\partial}{\\partial z}$ in terms of the canonical vector frame $\\left(\\frac{\\partial}{\\partial T}, \\frac{\\partial}{\\partial X},\\frac{\\partial}{\\partial Y},\\frac{\\partial}{\\partial Z}\\right)$ of $\\mathbb{R}^4$ are"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi^*(d/dx) = -4*x/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dT - 2*(x^2 - y^2 - z^2 - 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dX - 4*x*y/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dY - 4*x*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dZ"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frameN_R4[0].display()"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi^*(d/dy) = -4*y/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dT - 4*x*y/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dX + 2*(x^2 - y^2 + z^2 + 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dY - 4*y*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dZ"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frameN_R4[1].display()"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi^*(d/dz) = -4*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dT - 4*x*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dX - 4*y*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dY + 2*(x^2 + y^2 - z^2 + 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dZ"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frameN_R4[2].display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us denote by $(a,b,c)$ the components of $\\left. \\varepsilon_{\\mathbf{i}} \\right|_{U}$ in the stereographic frame:\n",
"$$ \\left. \\varepsilon_{\\mathbf{i}} \\right|_{U} = a \\frac{\\partial}{\\partial x}\n",
" + b \\frac{\\partial}{\\partial y}\n",
" + c \\frac{\\partial}{\\partial z} $$\n",
"Since $\\Phi^*\\varepsilon_{\\mathbf{i}}=\\left. E_{\\mathbf{i}} \\right| _{\\Phi(\\mathbb{S}^3)}$, \n",
"we get the linear system\n",
"$$ a\\, \\Phi^* \\frac{\\partial}{\\partial x} + b \\, \\Phi^* \\frac{\\partial}{\\partial y} \n",
" + c\\, \\Phi^* \\frac{\\partial}{\\partial z} =\n",
" \\left. E_{\\mathbf{i}} \\right| _{\\Phi(U)} $$\n",
"to be solved in $(a,b,c)$. The right-hand side is"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[-2*x/(x^2 + y^2 + z^2 + 1),\n",
" -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1),\n",
" 2*z/(x^2 + y^2 + z^2 + 1),\n",
" -2*y/(x^2 + y^2 + z^2 + 1)]"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = U((x,y,z), chart=stereoN, name='p')\n",
"EIp = EI.at(Phi(p))\n",
"EIp[:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Hence the system:"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[-4*(a*x + b*y + c*z)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == -2*x/(x^2 + y^2 + z^2 + 1),\n",
" -2*(a*x^2 + 2*b*x*y - a*y^2 + 2*c*x*z - a*z^2 - a)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1),\n",
" 2*(b*x^2 - 2*a*x*y - b*y^2 - 2*c*y*z + b*z^2 + b)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == 2*z/(x^2 + y^2 + z^2 + 1),\n",
" 2*(c*x^2 + c*y^2 - c*z^2 - 2*(a*x + b*y)*z + c)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == -2*y/(x^2 + y^2 + z^2 + 1)]"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eqs = [(a*frameN_R4[0][i] + b*frameN_R4[1][i] + c*frameN_R4[2][i]).expr() == EIp[i]\n",
" for i in R4.irange()]\n",
"eqs"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The unique solution is"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[{c: x*z - y, b: x*y + z, a: 1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2}]"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sol = solve(eqs, (a,b,c), solution_dict=True)\n",
"sol"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The expression of $\\varepsilon_{\\mathbf{i}}$ in terms of the frame associated with the stereographic coordinates on $U$ is thus"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"(1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2) d/dx + (x*y + z) d/dy + (x*z - y) d/dz"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"epsI = sol[0][a] * frameN[1] + sol[0][b] * frameN[2] + sol[0][c] * frameN[3]\n",
"epsI.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Global vector frame on $\\mathbb{S}^3$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The vector field $E_{\\mathbf{i}}$ never vanishes on $\\Phi(\\mathbb{S}^3)$, since it vanishes only at $(T,X,Y,Z)=(0,0,0,0)$. It follows that $\\varepsilon_{\\mathbf{i}}$ never vanishes on $\\mathbb{S}^3$. \n",
"Similarly, starting from the right translation by $\\mathbf{j}$ and the right translation by $\\mathbf{k}$, we can construct global vector fields $\\varepsilon_{\\mathbf{j}}$ and $\\varepsilon_{\\mathbf{k}}$ that are always nonzero on $\\mathbb{S}^3$. \n",
"Moreover, the vector fields\n",
"$\\varepsilon_{\\mathbf{i}}$, $\\varepsilon_{\\mathbf{j}}$ and $\\varepsilon_{\\mathbf{k}}$ are linearly independent at any point of $\\mathbb{S}^3$. They thus form a global vector frame of $\\mathbb{S}^3$. This means that, as any Lie group, $\\mathbb{S}^3$ is a **parallelizable manifold**. This contrasts with $\\mathbb{S}^2$. Actually the only parallelizable spheres are $\\mathbb{S}^1$, $\\mathbb{S}^3$ and $\\mathbb{S}^7$.\n",
"\n",
"Let us declare the global vector frame $(\\varepsilon_{\\mathbf{i}}, \\varepsilon_{\\mathbf{j}}, \\varepsilon_{\\mathbf{k}})$, using the notations $\\varepsilon_1 := \\varepsilon_{\\mathbf{i}}$, $\\varepsilon_2 := \\varepsilon_{\\mathbf{j}}$ and $\\varepsilon_3 := \\varepsilon_{\\mathbf{k}}$:"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Vector frame (S^3, (E_1,E_2,E_3))"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E = S3.vector_frame('E', latex_symbol=r'\\varepsilon')\n",
"E"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Stereographic components of the vector field $\\varepsilon_1$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On $U$, we can set the components of $\\varepsilon_1$ in the stereographic frame $\\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z}\\right)$ to those obtained above:"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_1 = (1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2) d/dx + (x*y + z) d/dy + (x*z - y) d/dz"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E[1].restrict(U)[stereoN.frame(),:,stereoN] = (sol[0][a], sol[0][b], sol[0][c])\n",
"E[1].display(stereoN.frame())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us check that the pushforward of $\\varepsilon_1$ by $\\Phi$ coincides with $E_{\\mathbf{i}}$:"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Phi^*(E_1) = -2*x/(x^2 + y^2 + z^2 + 1) d/dT - (x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1) d/dX + 2*z/(x^2 + y^2 + z^2 + 1) d/dY - 2*y/(x^2 + y^2 + z^2 + 1) d/dZ"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E1U_R4 = Phi.pushforward(E[1].restrict(U))\n",
"E1U_R4.display()"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([E1U_R4[i] == EIp[i] for i in R4.irange()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us now determine the components of $\\varepsilon_1$ in the vector frame $\\left(\\frac{\\partial}{\\partial x'}, \\frac{\\partial}{\\partial y'}, \\frac{\\partial}{\\partial z'}\\right)$ associated with the stereographic chart from the South pole:"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Coordinate frame (V, (d/dxp,d/dyp,d/dzp))"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frameS = stereoS.frame()\n",
"frameS"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use the same procedure as for the stereographic frame from the North pole:"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[Vector field Phi^*(d/dxp) along the Open subset V of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n",
" Vector field Phi^*(d/dyp) along the Open subset V of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n",
" Vector field Phi^*(d/dzp) along the Open subset V of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4]"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frameS_R4 = [Phi.pushforward(frameS[i]) for i in S3.irange()]\n",
"frameS_R4"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[-2*xp/(xp^2 + yp^2 + zp^2 + 1),\n",
" (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1),\n",
" 2*zp/(xp^2 + yp^2 + zp^2 + 1),\n",
" -2*yp/(xp^2 + yp^2 + zp^2 + 1)]"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = V((xp,yp,zp), chart=stereoS, name='p')\n",
"EIp = EI.at(Phi(p))\n",
"EIp[:]"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[4*(a*xp + b*yp + c*zp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == -2*xp/(xp^2 + yp^2 + zp^2 + 1),\n",
" -2*(a*xp^2 + 2*b*xp*yp - a*yp^2 + 2*c*xp*zp - a*zp^2 - a)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1),\n",
" 2*(b*xp^2 - 2*a*xp*yp - b*yp^2 - 2*c*yp*zp + b*zp^2 + b)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == 2*zp/(xp^2 + yp^2 + zp^2 + 1),\n",
" 2*(c*xp^2 + c*yp^2 - c*zp^2 - 2*(a*xp + b*yp)*zp + c)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == -2*yp/(xp^2 + yp^2 + zp^2 + 1)]"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eqs = [(a*frameS_R4[0][i] + b*frameS_R4[1][i] + c*frameS_R4[2][i]).expr() == EIp[i] \n",
" for i in R4.irange()]\n",
"eqs"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[{c: -xp*zp - yp, b: -xp*yp + zp, a: -1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2}]"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sol = solve(eqs, (a,b,c), solution_dict=True)\n",
"sol"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_1 = (-1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dxp + (-xp*yp + zp) d/dyp + (-xp*zp - yp) d/dzp"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E[1].restrict(V)[stereoS.frame(),:, stereoS] = (sol[0][a], sol[0][b], sol[0][c])\n",
"E[1].display(stereoS.frame())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Again, we check the correctness by"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 111,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E1V_R4 = Phi.pushforward(E[1].restrict(V))\n",
"all([E1V_R4[i] == EIp[i] for i in R4.irange()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Stereographic components of the vector field $\\varepsilon_2$\n",
"\n",
"The vector field $\\varepsilon_2 = \\varepsilon_{\\mathbf{j}}$ is induced by the right translation by $\\mathbf{j}$:"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"R^4 --> R^4\n",
" (T, X, Y, Z) |--> (-Y, -Z, T, X)"
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = R4((T,X,Y,Z))\n",
"RJ_R4 = R4.diff_map(R4, X4(qprod(p, Phi(J))))\n",
"RJ_R4.display()"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_J = -Y d/dT - Z d/dX + T d/dY + X d/dZ"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"EJ = R4.vector_field(name='E_J', latex_name=r'E_{\\mathbf{j}}')\n",
"EJ[:] = RJ_R4.expression()\n",
"EJ.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We determine the components of $\\varepsilon_2$ in the stereographic frame from the North pole as we did for $\\varepsilon_1$:"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[-2*y/(x^2 + y^2 + z^2 + 1),\n",
" -2*z/(x^2 + y^2 + z^2 + 1),\n",
" -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1),\n",
" 2*x/(x^2 + y^2 + z^2 + 1)]"
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = U((x,y,z), chart=stereoN)\n",
"EJp = EJ.at(Phi(p))\n",
"EJp[:]"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_2 = (x*y - z) d/dx + (-1/2*x^2 + 1/2*y^2 - 1/2*z^2 + 1/2) d/dy + (y*z + x) d/dz"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eqs = [(a*frameN_R4[0][i] + b*frameN_R4[1][i] + c*frameN_R4[2][i]).expr() == EJp[i]\n",
" for i in R4.irange()]\n",
"sol = solve(eqs, (a,b,c), solution_dict=True)\n",
"E[2].restrict(U)[stereoN.frame(),:,stereoN] = (sol[0][a], sol[0][b], sol[0][c])\n",
"E[2].display(stereoN.frame())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Check:"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E2U_R4 = Phi.pushforward(E[2].restrict(U))\n",
"all([E2U_R4[i] == EJp[i] for i in R4.irange()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We turn now to the stereographic components from the South pole:"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[-2*yp/(xp^2 + yp^2 + zp^2 + 1),\n",
" -2*zp/(xp^2 + yp^2 + zp^2 + 1),\n",
" (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1),\n",
" 2*xp/(xp^2 + yp^2 + zp^2 + 1)]"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = V((xp,yp,zp), chart=stereoS)\n",
"EJp = EJ.at(Phi(p))\n",
"EJp[:]"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_2 = (-xp*yp - zp) d/dxp + (1/2*xp^2 - 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dyp + (-yp*zp + xp) d/dzp"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eqs = [(a*frameS_R4[0][i] + b*frameS_R4[1][i] + c*frameS_R4[2][i]).expr() == EJp[i] \n",
" for i in R4.irange()]\n",
"sol = solve(eqs, (a,b,c), solution_dict=True)\n",
"E[2].restrict(V)[stereoS.frame(),:, stereoS] = (sol[0][a], sol[0][b], sol[0][c])\n",
"E[2].display(stereoS.frame())"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 119,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E2V_R4 = Phi.pushforward(E[2].restrict(V))\n",
"all([E2V_R4[i] == EJp[i] for i in R4.irange()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Stereographic components of the vector field $\\varepsilon_3$\n",
"\n",
"The vector field $\\varepsilon_3 = \\varepsilon_{\\mathbf{k}}$ is induced by the right translation by $\\mathbf{k}$:"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"R^4 --> R^4\n",
" (T, X, Y, Z) |--> (-Z, Y, -X, T)"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = R4((T,X,Y,Z))\n",
"RK_R4 = R4.diff_map(R4, X4(qprod(p, Phi(K))))\n",
"RK_R4.display()"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_K = -Z d/dT + Y d/dX - X d/dY + T d/dZ"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"EK = R4.vector_field(name='E_K', latex_name=r'E_{\\mathbf{k}}')\n",
"EK[:] = RK_R4.expression()\n",
"EK.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The components of $\\varepsilon_3$ in the two stereographic frames are obtained in the same manner as for $\\varepsilon_1$ and $\\varepsilon_2$"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_3 = (x*z + y) d/dx + (y*z - x) d/dy + (-1/2*x^2 - 1/2*y^2 + 1/2*z^2 + 1/2) d/dz"
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = U((x,y,z), chart=stereoN)\n",
"EKp = EK.at(Phi(p))\n",
"eqs = [(a*frameN_R4[0][i] + b*frameN_R4[1][i] + c*frameN_R4[2][i]).expr() == EKp[i]\n",
" for i in R4.irange()]\n",
"sol = solve(eqs, (a,b,c), solution_dict=True)\n",
"E[3].restrict(U)[stereoN.frame(),:,stereoN] = (sol[0][a], sol[0][b], sol[0][c])\n",
"E[3].display(stereoN.frame())"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 123,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E3U_R4 = Phi.pushforward(E[3].restrict(U))\n",
"all([E3U_R4[i] == EKp[i] for i in R4.irange()])"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_3 = (-xp*zp + yp) d/dxp + (-yp*zp - xp) d/dyp + (1/2*xp^2 + 1/2*yp^2 - 1/2*zp^2 - 1/2) d/dzp"
]
},
"execution_count": 124,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = V((xp,yp,zp), chart=stereoS)\n",
"EKp = EK.at(Phi(p))\n",
"eqs = [(a*frameS_R4[0][i] + b*frameS_R4[1][i] + c*frameS_R4[2][i]).expr() == EKp[i] \n",
" for i in R4.irange()]\n",
"sol = solve(eqs, (a,b,c), solution_dict=True)\n",
"E[3].restrict(V)[stereoS.frame(),:, stereoS] = (sol[0][a], sol[0][b], sol[0][c])\n",
"E[3].display(stereoS.frame())"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E3V_R4 = Phi.pushforward(E[3].restrict(V))\n",
"all([E3V_R4[i] == EKp[i] for i in R4.irange()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Summary\n",
"\n",
"The vector fields on $\\mathbb{R}^4$ induced by the right translations by respectively $\\mathbf{i}$, $\\mathbf{j}$ and $\\mathbf{k}$ are"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_I = -X d/dT + T d/dX + Z d/dY - Y d/dZ"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_J = -Y d/dT - Z d/dX + T d/dY + X d/dZ"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_K = -Z d/dT + Y d/dX - X d/dY + T d/dZ"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show(EI.display())\n",
"show(EJ.display())\n",
"show(EK.display())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As a check, we note that the above formulas coincide with those given in Problem 8-6 of Lee's textbook [*Introduction to Smooth Manifolds*](https://dx.doi.org/10.1007/978-1-4419-9982-5), 2nd ed., Springer (New York) (2013).\n",
"\n",
"The vector fields $E_{\\mathbf{i}}$, $E_{\\mathbf{j}}$ and $E_{\\mathbf{k}}$ are tangent to $\\Phi(\\mathbb{S}^3)\\subset\\mathbb{R}^4$ and therefore induce three vectors fields on $\\mathbb{S}^3$, $\\varepsilon_1$, $\\varepsilon_2$ and $\\varepsilon_3$, which form a global vector frame of $\\mathbb{S}^3$. The components of these vector fields with respect to the (local) stereographic frames are "
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_1 = (1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2) d/dx + (x*y + z) d/dy + (x*z - y) d/dz"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_2 = (x*y - z) d/dx + (-1/2*x^2 + 1/2*y^2 - 1/2*z^2 + 1/2) d/dy + (y*z + x) d/dz"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_3 = (x*z + y) d/dx + (y*z - x) d/dy + (-1/2*x^2 - 1/2*y^2 + 1/2*z^2 + 1/2) d/dz"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n"
]
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_1 = (-1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dxp + (-xp*yp + zp) d/dyp + (-xp*zp - yp) d/dzp"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_2 = (-xp*yp - zp) d/dxp + (1/2*xp^2 - 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dyp + (-yp*zp + xp) d/dzp"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_3 = (-xp*zp + yp) d/dxp + (-yp*zp - xp) d/dyp + (1/2*xp^2 + 1/2*yp^2 - 1/2*zp^2 - 1/2) d/dzp"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i in S3.irange():\n",
" show(E[i].display(stereoN.frame()))\n",
"print(\" \")\n",
"for i in S3.irange():\n",
" show(E[i].display(stereoS.frame()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To complete the connection between the global frame $(\\varepsilon_i)$ and the stereographic frames in $U$ and $V$, we shall declare the change-of-basis formulas related the two frames, so that they can be used automatically by SageMath when necessary. Starting with $U$, we first consider the restriction of the global frame to $U$:"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Vector frame (U, (E_1,E_2,E_3))"
]
},
"execution_count": 128,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U = E.restrict(U); E_U"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The automorphism $P$ such that on $U$, $\\varepsilon_i = P\\left(\\frac{\\partial}{\\partial x^i}\\right)$ is read directely on the components of $\\varepsilon_i$ with respect to the\n",
"frame $\\left(\\frac{\\partial}{\\partial x^i}\\right) = \\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z} \\right)$:"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[ 1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2 x*y - z x*z + y]\n",
"[ x*y + z -1/2*x^2 + 1/2*y^2 - 1/2*z^2 + 1/2 y*z - x]\n",
"[ x*z - y y*z + x -1/2*x^2 - 1/2*y^2 + 1/2*z^2 + 1/2]"
]
},
"execution_count": 129,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P = U.automorphism_field()\n",
"for i in S3.irange():\n",
" for j in S3.irange():\n",
" P[j,i] = E_U[i][j]\n",
"P[:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Check of the formula $\\varepsilon_i = P\\left(\\frac{\\partial}{\\partial x^i}\\right)$:"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([E_U[i] == P(frameN[i]) for i in S3.irange()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We declare the change of frame by the method `set_change_of_frame`:"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [],
"source": [
"U.set_change_of_frame(frameN, E_U, P)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The inverse is automatically computed:"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[ 2*(x^2 - y^2 - z^2 + 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(x*y + z)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(x*z - y)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1)]\n",
"[ 4*(x*y - z)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) -2*(x^2 - y^2 + z^2 - 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(y*z + x)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1)]\n",
"[ 4*(x*z + y)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(y*z - x)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) -2*(x^2 + y^2 - z^2 - 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1)]"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U.change_of_frame(E_U, frameN)[:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We do the same thing on $V$:"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Vector frame (V, (E_1,E_2,E_3))"
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_V = E.restrict(V); E_V"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[-1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2 -xp*yp - zp -xp*zp + yp]\n",
"[ -xp*yp + zp 1/2*xp^2 - 1/2*yp^2 + 1/2*zp^2 - 1/2 -yp*zp - xp]\n",
"[ -xp*zp - yp -yp*zp + xp 1/2*xp^2 + 1/2*yp^2 - 1/2*zp^2 - 1/2]"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P = V.automorphism_field()\n",
"for i in S3.irange():\n",
" for j in S3.irange():\n",
" P[j,i] = E_V[i][j]\n",
"P[:]"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([E_V[i] == P(frameS[i]) for i in S3.irange()])"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [],
"source": [
"V.set_change_of_frame(frameS, E_V, P)"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[-2*(xp^2 - yp^2 - zp^2 + 1)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(xp*yp - zp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(xp*zp + yp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1)]\n",
"[ -4*(xp*yp + zp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) 2*(xp^2 - yp^2 + zp^2 - 1)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(yp*zp - xp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1)]\n",
"[ -4*(xp*zp - yp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(yp*zp + xp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) 2*(xp^2 + yp^2 - zp^2 - 1)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1)]"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V.change_of_frame(E_V, frameS)[:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\mathbb{S}^3$ as a parallelizable manifold\n",
"\n",
"Because it admits a global vector frame, $\\mathbb{S}^3$ is a parallelizable manifold:"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 138,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"S3.is_manifestly_parallelizable()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Equivalently, the set $\\mathfrak{X}(\\mathbb{S}^3)$ of vector fields on $\\mathbb{S}^3$ is a **free module of finite rank** over the algebra $C^\\infty(\\mathbb{S}^3)$ (the algebra of smooth scalar fields on $\\mathbb{S}^3$:"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Free module X(S^3) of vector fields on the 3-dimensional differentiable manifold S^3"
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XS3 = S3.vector_field_module()\n",
"XS3"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"isinstance(XS3, FiniteRankFreeModule)"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Category of finite dimensional modules over Algebra of differentiable scalar fields on the 3-dimensional differentiable manifold S^3\n"
]
}
],
"source": [
"print(XS3.category())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As a free module, $\\mathfrak{X}(\\mathbb{S}^3)$ admits a basis, which is nothing but the global vector frame constructed above:"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Vector frame (S^3, (E_1,E_2,E_3))"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XS3.default_basis()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Structure coefficients of the global frame\n",
"\n",
"On $U$, we may compute the **Lie brackets** $[\\varepsilon_i, \\varepsilon_j]$ of two vectors of the global frame:"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[E_1,E_2] = 2 E_3"
]
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[1].bracket(E_U[2]).display(E_U)"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[E_1,E_3] = -2 E_2"
]
},
"execution_count": 144,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[1].bracket(E_U[3]).display(E_U)"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"[E_2,E_3] = 2 E_1"
]
},
"execution_count": 145,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[2].bracket(E_U[3]).display(E_U)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Equivalently, the structure coefficients of the frame $\\varepsilon$ are"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"3-indices components w.r.t. Vector frame (U, (E_1,E_2,E_3)), with antisymmetry on the index positions (1, 2)"
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C = E_U.structure_coeff(); C"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"C_123 = 2 \n",
"C_132 = -2 \n",
"C_213 = -2 \n",
"C_231 = 2 \n",
"C_312 = 2 \n",
"C_321 = -2 "
]
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C.display('C')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By definition, the structure coefficients $C_{kij}$ obey the relation\n",
"$[\\varepsilon_i, \\varepsilon_j] = C_{kij} \\, \\varepsilon_k$, as we can check:"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[1].bracket(E_U[2]) == sum(C[[k,1,2]]*E_U[k] for k in S3.irange())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tangent space at the unit element\n",
"\n",
"The Lie algebra of $\\mathbb{S}^3$ can be identified with the tangent space at the unit element $\\mathbf{1}$:"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Tangent space at Point 1 on the 3-dimensional differentiable manifold S^3"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"T1 = S3.tangent_space(One)\n",
"T1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The values taken by the global frame vectors at $\\mathbf{1}$ are"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_1 = 1/2 d/dx"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_2 = 1/2 d/dy"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_3 = 1/2 d/dz"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i in S3.irange():\n",
" show(E[i].at(One).display())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each of these vectors belongs to $T_{\\mathbf{1}}\\mathbb{S}^3$:"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Tangent space at Point 1 on the 3-dimensional differentiable manifold S^3"
]
},
"execution_count": 151,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E[1].at(One).parent()"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"True"
]
},
"execution_count": 152,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all([E[i].at(One).parent() is T1 for i in S3.irange()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The simple expressions of $(\\varepsilon_1, \\varepsilon_2, \\varepsilon_3)$ in terms of the basis $\\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z}\\right)$ of $T_{\\mathbf{1}}\\mathbb{S}^3$ induced by the stereographic coordinates stems from the fact that\n",
"the $\\mathbb{R}^4$ vectors $(E_{\\mathbf{i}}, E_{\\mathbf{j}}, E_{\\mathbf{k}})$ coincide with \n",
"the vectors $\\left(\\frac{\\partial}{\\partial X}, \\frac{\\partial}{\\partial Y}, \\frac{\\partial}{\\partial Z}\\right)$ at $\\Phi(\\mathbf{1})$:"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_I = d/dX"
]
},
"execution_count": 153,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"EI.at(Phi(One)).display()"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_J = d/dY"
]
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"EJ.at(Phi(One)).display()"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_K = d/dZ"
]
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"EK.at(Phi(One)).display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The extra factor $1/2$, which appears in the above expressions of $(\\varepsilon_1, \\varepsilon_2, \\varepsilon_3)$, arises from the fact that the stereographic coordinates $(x,y,z)$ have been defined with respect to the hyperplane $T=0$ and not to the hyperplane $T=1$ (to which $\\Phi(\\mathbf{1})$ belongs). "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Link with the Hopf coordinates\n",
"\n",
"The Hopf coordinates have been introduced in the worksheet [3-sphere: charts, quaternions and the Hopf fribration](http://nbviewer.jupyter.org/github/sagemanifolds/SageManifolds/blob/master/Worksheets/v1.3/SM_sphere_S3_Hopf.ipynb)."
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [],
"source": [
"B = U.open_subset('B', coord_def={stereoN.restrict(U): \n",
" [x^2+y^2!=0, x^2+y^2+z^2!=1, \n",
" (1-x^2-y^2-z^2)*x-2*y*z!=0]})"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"Chart (B, (eta, alpha, beta))"
]
},
"execution_count": 157,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Hcoord. = B.chart(r\"eta:(0,pi/2):\\eta alpha:(0,2*pi):\\alpha beta:(0,2*pi):\\beta\")\n",
"Hcoord"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"x = cos(alpha + beta)*sin(eta)/(cos(eta)*sin(alpha) + 1)\n",
"y = sin(alpha + beta)*sin(eta)/(cos(eta)*sin(alpha) + 1)\n",
"z = cos(alpha)*cos(eta)/(cos(eta)*sin(alpha) + 1)"
]
},
"execution_count": 158,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Hcoord_to_stereoN = Hcoord.transition_map(\n",
" stereoN.restrict(U),\n",
" (sin(eta)*cos(alp+bet)/(1+cos(eta)*sin(alp)),\n",
" sin(eta)*sin(alp+bet)/(1+cos(eta)*sin(alp)),\n",
" cos(eta)*cos(alp)/(1+cos(eta)*sin(alp))))\n",
"Hcoord_to_stereoN.display()"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"eta = arcsin(2*sqrt(x^2 + y^2)/(x^2 + y^2 + z^2 + 1))\n",
"alpha = pi + arctan2(x^2 + y^2 + z^2 - 1, -2*z)\n",
"beta = -arctan2(x^2 + y^2 + z^2 - 1, -2*z) + arctan2(-y, -x)"
]
},
"execution_count": 159,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Hcoord_to_stereoN.set_inverse(asin(2*sqrt(x^2+y^2)/(1+x^2+y^2+z^2)),\n",
" atan2(x^2+y^2+z^2-1, -2*z) + pi,\n",
" atan2(-y,-x) - atan2(x^2+y^2+z^2-1, -2*z))\n",
"Hcoord_to_stereoN.inverse().display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us express the vectors of the global frame $\\varepsilon$ in terms of the vector frame $\\left(\\frac{\\partial}{\\partial\\eta}, \\frac{\\partial}{\\partial\\alpha}, \\frac{\\partial}{\\partial\\beta}\\right)$ associated with the Hopf coordinates:"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_1 = (2*cos(alpha)*cos(beta)*sin(alpha) + (2*cos(alpha)^2 - 1)*sin(beta))*sin(eta)/(sqrt(cos(eta) + 1)*sqrt(-cos(eta) + 1)) d/deta + (2*cos(alpha)*sin(alpha)*sin(beta) + (2*sin(alpha)^2 - 1)*cos(beta))*sin(eta)/cos(eta) d/dalpha - (2*cos(alpha)*sin(alpha)*sin(beta) - (2*cos(alpha)^2 - 1)*cos(beta))/(cos(eta)*sin(eta)) d/dbeta"
]
},
"execution_count": 160,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[1].display(Hcoord.frame(), Hcoord)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We notice that the components can be simplified to $\\varepsilon_1^{\\ \\, \\eta}=\\sin(2\\alpha+\\beta)$, $\\varepsilon_1^{\\ \\, \\alpha}=-\\cos(2\\alpha+\\beta)\\tan\\eta$ and \n",
"$\\varepsilon_1^{\\ \\, \\beta}=\\cos(2\\alpha+\\beta)/(\\cos\\eta\\sin\\eta)$. Hence, we substitute these values via the method `add_comp` (NB: the method `set_comp` would erase the other sets of components):"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_1 = sin(2*alpha + beta) d/deta - cos(2*alpha + beta)*tan(eta) d/dalpha + cos(2*alpha + beta)/(cos(eta)*sin(eta)) d/dbeta"
]
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[1].add_comp(Hcoord.frame())[1, Hcoord] = sin(2*alp+bet)\n",
"E_U[1].add_comp(Hcoord.frame())[2, Hcoord] = -cos(2*alp+bet) * tan(eta)\n",
"E_U[1].add_comp(Hcoord.frame())[3, Hcoord] = cos(2*alp+bet) / (cos(eta)*sin(eta))\n",
"E_U[1].display(Hcoord.frame(), Hcoord)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly, the components of $\\varepsilon_2$ require some simplification \"by hand\":"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_2 = (2*cos(alpha)*sin(alpha)*sin(beta) + (2*sin(alpha)^2 - 1)*cos(beta))*sin(eta)/(sqrt(cos(eta) + 1)*sqrt(-cos(eta) + 1)) d/deta - (2*cos(alpha)*cos(beta)*sin(alpha) - (2*sin(alpha)^2 - 1)*sin(beta))*sin(eta)/cos(eta) d/dalpha + (2*cos(alpha)*cos(beta)*sin(alpha) + (2*cos(alpha)^2 - 1)*sin(beta))/(cos(eta)*sin(eta)) d/dbeta"
]
},
"execution_count": 162,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[2].display(Hcoord.frame(), Hcoord)"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_2 = -cos(2*alpha + beta) d/deta - sin(2*alpha + beta)*tan(eta) d/dalpha + sin(2*alpha + beta)/(cos(eta)*sin(eta)) d/dbeta"
]
},
"execution_count": 163,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[2].add_comp(Hcoord.frame())[1, Hcoord] = -cos(2*alp+bet)\n",
"E_U[2].add_comp(Hcoord.frame())[2, Hcoord] = -sin(2*alp+bet) * tan(eta)\n",
"E_U[2].add_comp(Hcoord.frame())[3, Hcoord] = sin(2*alp+bet) / (cos(eta)*sin(eta))\n",
"E_U[2].display(Hcoord.frame(), Hcoord)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The expression of $\\varepsilon_3$ in terms of the vector frame $\\left(\\frac{\\partial}{\\partial\\eta}, \\frac{\\partial}{\\partial\\alpha}, \\frac{\\partial}{\\partial\\beta}\\right)$ is particularly simple:"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"E_3 = -d/dalpha"
]
},
"execution_count": 164,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E_U[3].display(Hcoord.frame(), Hcoord)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is not surprising since $\\varepsilon_3$ has been defined as the vector field induced by the right translation by $\\mathbf{k}$ and the **Hopf fibration** considered the worksheet [3-sphere: charts, quaternions and the Hopf fribration](http://nbviewer.jupyter.org/github/sagemanifolds/SageManifolds/blob/master/Worksheets/v1.3/SM_sphere_S3_Hopf.ipynb) has been defined with respect to $\\mathbf{k}$ as \n",
"$$ \n",
" \\begin{array}{cccc}\n",
" h:& \\mathbb{S}^3 & \\to & \\mathbb{S}^2\\\\\n",
" & q & \\mapsto & q \\mathbf{k} \\bar{q}\n",
" \\end{array}\n",
"$$ \n",
"More precisely, we have shown in the above worksheet that $\\frac{\\partial}{\\partial\\alpha}$ is tangent to the $\\mathbb{S}^1$ fibers of $h$ and it is easy to see that the field lines of $\\varepsilon_3$ coincide with these fibers: let $q\\in\\mathbb{S}^3$ and $q'\\in\\mathbb{S}^3$ be a point infinitely close to $q$ on a field line of $\\varepsilon_3$: \n",
"$$\n",
" q' = q + \\lambda \\left. \\varepsilon_3 \\right| _q = q + \\lambda q \\, \\mathbf{k}, \n",
"$$\n",
"where $\\lambda = o(1)$ is an infinitesimal real number and the second equality stems from the very definition of $\\varepsilon_3 = \\varepsilon_{\\mathbf{k}}$ as the vector field associated with the right translation by $\\mathbf{k}$. We have then\n",
"$$\n",
" \\overline{q'} = \\overline{q + \\lambda q \\, \\mathbf{k}} \n",
" = \\bar{q} + \\lambda \\bar{\\mathbf{k}} \\bar{q}\n",
" = \\bar{q} - \\lambda \\mathbf{k} \\bar{q}\n",
"$$\n",
"so that\n",
"$$\n",
" h(q') = (q + \\lambda q \\, \\mathbf{k})\\mathbf{k}(\\bar{q} - \\lambda \\mathbf{k} \\bar{q}) . \n",
"$$\n",
"Expanding and using $\\mathbf{k}^2 = -1$ and $q\\bar{q} = 1$, we find \n",
"$h(q') = h(q)$ at first order in $\\lambda$, which shows that $q$ and $q'$ belong to the same fiber of $h$. \n",
"\n",
"Accordingly the field lines of $\\varepsilon_3$ are circles, as we can check on a (projection) plot in the plane $z=0$:"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"Graphics object consisting of 80 graphics primitives"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"graph_z0 = E[3].plot(chart=stereoN, ambient_coords=(x,y),\n",
" fixed_coords={z: 0}, max_range=1, scale=0.5)\n",
"show(graph_z0, aspect_ratio=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"or in the plane $y=0$:"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"Graphics object consisting of 121 graphics primitives"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"graph_y0 = E[3].plot(chart=stereoN, ambient_coords=(x,z),\n",
" fixed_coords={y: 0}, number_values=11,\n",
" ranges={x: (-2,2), z: (-1,1)}, scale=0.4)\n",
"show(graph_y0, aspect_ratio=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A 3D view of $\\varepsilon_3$, in terms of the stereographic coordinates $(x,y,z)$:"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n"
],
"text/plain": [
"Graphics3d Object"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"graph = E[3].plot(chart=stereoN, max_range=1, number_values=7, \n",
" scale=0.25, label_axes=False)\n",
"show(graph, viewer=viewer3D, online=True, axes_labels=['x','y','z'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "SageMath 8.3",
"language": "",
"name": "sagemath"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.15"
}
},
"nbformat": 4,
"nbformat_minor": 1
}