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