{
	"cell_id": 222853918104208267,
	"cells": [
		{
			"cell_id": 6040850254890983940,
			"cell_origin": "client",
			"cell_type": "latex",
			"cells": [
				{
					"cell_id": 4634821682817089960,
					"cell_origin": "client",
					"cell_type": "latex_view",
					"source": "\\algorithm{epsilon_to_delta}{Replace a product of two epsilon tensors with a generalised delta}\n\nReplace a product of two epsilon tensors with a generalised delta\naccording to the expression\n\\begin{equation}\n\\epsilon^{r_1\\cdots r_{d}} \\epsilon_{s_1\\cdots s_{d}} =\n\\frac{1}{\\sqrt{|g|}}\\varepsilon^{r_1 \\cdots r_{d}} \\sqrt{|g|}\\varepsilon_{s_1\\cdots s_{d}}\n= {\\rm sign}(g)\\, d!\\, \\delta^{r_1 \\cdots r_{d}}_{s_1\\cdots s_{d}}\\, ,\n\\end{equation}\nwhere~${\\rm sign}(g)$ denotes the signature of the metric~$g$ used to\nraise/lower the indices (see \\prop{EpsilonTensor} for conventions on the\nepsilon tensor). When the indices are not ocurring up/down as in this\nexpression, and the index position is not free, metric objects will be\ngenerated instead.\n\nHere is an example:"
				}
			],
			"hidden": true,
			"source": "\\algorithm{epsilon_to_delta}{Replace a product of two epsilon tensors with a generalised delta}\n\nReplace a product of two epsilon tensors with a generalised delta\naccording to the expression\n\\begin{equation}\n\\epsilon^{r_1\\cdots r_{d}} \\epsilon_{s_1\\cdots s_{d}} =\n\\frac{1}{\\sqrt{|g|}}\\varepsilon^{r_1 \\cdots r_{d}} \\sqrt{|g|}\\varepsilon_{s_1\\cdots s_{d}}\n= {\\rm sign}(g)\\, d!\\, \\delta^{r_1 \\cdots r_{d}}_{s_1\\cdots s_{d}}\\, ,\n\\end{equation}\nwhere~${\\rm sign}(g)$ denotes the signature of the metric~$g$ used to\nraise/lower the indices (see \\prop{EpsilonTensor} for conventions on the\nepsilon tensor). When the indices are not ocurring up/down as in this\nexpression, and the index position is not free, metric objects will be\ngenerated instead.\n\nHere is an example:"
		},
		{
			"cell_id": 2767356728095795528,
			"cell_origin": "client",
			"cell_type": "input",
			"cells": [
				{
					"cell_id": 11241214137464374167,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}\\epsilon_{a b c} \\epsilon_{a b d}\\end{dmath*}"
				}
			],
			"source": "{a,b,c,d}::Indices.\n{a,b,c,d}::Integer(1..3).\n\\delta{#}::KroneckerDelta.\n\\epsilon_{a b c}::EpsilonTensor(delta=\\delta).\nex:=\\epsilon_{a b c} \\epsilon_{a b d};"
		},
		{
			"cell_id": 17935743127738946687,
			"cell_origin": "client",
			"cell_type": "input",
			"cells": [
				{
					"cell_id": 11430802620406115181,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}2\\delta_{c d}\\end{dmath*}"
				}
			],
			"source": "epsilon_to_delta(_);"
		},
		{
			"cell_id": 15215213331520901394,
			"cell_origin": "client",
			"cell_type": "latex",
			"cells": [
				{
					"cell_id": 748503860410381173,
					"cell_origin": "client",
					"cell_type": "latex_view",
					"source": "Remember that if the result is a generalised delta, you can expand it in terms\nof normal deltas using \\algo{expand_delta},"
				}
			],
			"hidden": true,
			"source": "Remember that if the result is a generalised delta, you can expand it in terms\nof normal deltas using \\algo{expand_delta},"
		},
		{
			"cell_id": 17336055869576702648,
			"cell_origin": "client",
			"cell_type": "input",
			"cells": [
				{
					"cell_id": 9030028112960476034,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}\\epsilon_{a b c} \\epsilon_{a d e}\\end{dmath*}"
				},
				{
					"cell_id": 17630286008748119313,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}2\\delta_{b d c e}\\end{dmath*}"
				},
				{
					"cell_id": 8395258090089642276,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}\\delta_{b d} \\delta_{c e}-\\delta_{c d} \\delta_{b e}\\end{dmath*}"
				}
			],
			"source": "ex:=\\epsilon_{a b c} \\epsilon_{a d e};\nepsilon_to_delta(_);\nexpand_delta(_);"
		},
		{
			"cell_id": 9743168648695691461,
			"cell_origin": "client",
			"cell_type": "latex",
			"cells": [
				{
					"cell_id": 18221454557069207811,
					"cell_origin": "client",
					"cell_type": "latex_view",
					"source": "In order for this algorithm to work, you need to make sure that the\nepsilon symbols in your expression are declared\nas \\prop{EpsilonTensor} \\emph{and} that these declarations involve\na specification of the \\verb|delta| and/or \\verb|metric| symbols."
				}
			],
			"hidden": true,
			"source": "In order for this algorithm to work, you need to make sure that the\nepsilon symbols in your expression are declared\nas \\prop{EpsilonTensor} \\emph{and} that these declarations involve\na specification of the \\verb|delta| and/or \\verb|metric| symbols."
		},
		{
			"cell_id": 8176311872160163023,
			"cell_origin": "client",
			"cell_type": "latex",
			"cells": [
				{
					"cell_id": 957392414442768784,
					"cell_origin": "client",
					"cell_type": "latex_view",
					"source": "As you can see from this example, contracted indices inside the\ngeneralised delta are automatically eliminated, as the\nalgorithm \\algo{reduce_gendelta} is called automatically; if you\ndo not want this use the optional argument \\verb|reduce=False|."
				}
			],
			"hidden": true,
			"source": "As you can see from this example, contracted indices inside the\ngeneralised delta are automatically eliminated, as the\nalgorithm \\algo{reduce_gendelta} is called automatically; if you\ndo not want this use the optional argument \\verb|reduce=False|."
		},
		{
			"cell_id": 7584424123443767501,
			"cell_origin": "client",
			"cell_type": "input",
			"cells": [
				{
					"cell_id": 9606064349568347273,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}\\epsilon_{a b c} \\epsilon_{a b d}\\end{dmath*}"
				},
				{
					"cell_id": 9945886979741973192,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}6\\delta_{a a b b c d}\\end{dmath*}"
				}
			],
			"source": "ex:=\\epsilon_{a b c} \\epsilon_{a b d};\nepsilon_to_delta(_, reduce=False);"
		},
		{
			"cell_id": 16729448291636328815,
			"cell_origin": "client",
			"cell_type": "latex",
			"cells": [
				{
					"cell_id": 12273446363140010561,
					"cell_origin": "client",
					"cell_type": "latex_view",
					"source": "Note that the results typically depend on the signature of the\nspace-time, which can be introduced through the optional \\verb|metric|\nargument of the \\prop{EpsilonTensor} property. Compare the two\nexamples below:"
				}
			],
			"hidden": true,
			"source": "Note that the results typically depend on the signature of the\nspace-time, which can be introduced through the optional \\verb|metric|\nargument of the \\prop{EpsilonTensor} property. Compare the two\nexamples below:"
		},
		{
			"cell_id": 3705264274803310843,
			"cell_origin": "client",
			"cell_type": "input",
			"cells": [
				{
					"cell_id": 9612433675590522418,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}\\epsilon_{a b c} \\epsilon_{a b c}\\end{dmath*}"
				}
			],
			"source": "{a,b,c,d}::Indices.\n{a,b,c,d}::Integer(1..3).\n\\delta{#}::KroneckerDelta.\n\\epsilon_{a b c}::EpsilonTensor(delta=\\delta, metric=g_{a b}).\n\ng_{a b}::Metric(signature=-1).\nex:=\\epsilon_{a b c} \\epsilon_{a b c};"
		},
		{
			"cell_id": 9533343478392675334,
			"cell_origin": "client",
			"cell_type": "input",
			"cells": [
				{
					"cell_id": 10925417497145116574,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}-6\\end{dmath*}"
				}
			],
			"source": "epsilon_to_delta(_);"
		},
		{
			"cell_id": 637295154036736998,
			"cell_origin": "client",
			"cell_type": "input",
			"cells": [
				{
					"cell_id": 16285317753858478265,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}\\epsilon_{a b c} \\epsilon_{a b c}\\end{dmath*}"
				},
				{
					"cell_id": 15341438585986313279,
					"cell_origin": "server",
					"cell_type": "latex_view",
					"source": "\\begin{dmath*}{}6\\end{dmath*}"
				}
			],
			"source": "g_{a b}::Metric(signature=+1).\nex:=\\epsilon_{a b c} \\epsilon_{a b c};\nepsilon_to_delta(_);"
		},
		{
			"cell_id": 15369982606590812876,
			"cell_origin": "client",
			"cell_type": "latex",
			"cells": [
				{
					"cell_id": 6235971706807023652,
					"cell_origin": "client",
					"cell_type": "latex_view",
					"source": "Note that you need to specify the full symbol for the metric,\nincluding the indices, whereas the \\prop{Kronecker} delta argument only\nrequires the name without the indices (because a contraction can\ngenerate generalised Kronecker delta symbols with any number of indices)."
				}
			],
			"hidden": true,
			"source": "Note that you need to specify the full symbol for the metric,\nincluding the indices, whereas the \\prop{Kronecker} delta argument only\nrequires the name without the indices (because a contraction can\ngenerate generalised Kronecker delta symbols with any number of indices)."
		},
		{
			"cell_id": 9436220866997150792,
			"cell_origin": "client",
			"cell_type": "input",
			"source": ""
		}
	],
	"description": "Cadabra JSON notebook format",
	"version": 1.0
}
