simplifyAssertEq(a'^i':simplifyMetrics(), a'^i')
${{ a} ^i} = {{ a} ^i}$
GOOD
time: 4.277000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'^min' * delta'_i^j'):simplifyMetrics(), a'^mjn')
${{{{ a} ^m} ^j} ^n} = {{{{ a} ^m} ^j} ^n}$
GOOD
time: 12.610000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

g shouldn't apply to delta, but delta should apply to g

simplifyAssertEq((g'^ij' * delta'_j^k'):simplifyMetrics(), g'^ik')
${{{ g} ^i} ^k} = {{{ g} ^i} ^k}$
GOOD
time: 6.390000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((delta'_j^k' * g'^ij'):simplifyMetrics(), g'^ik')
${{{ g} ^i} ^k} = {{{ g} ^i} ^k}$
GOOD
time: 7.198000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

delta works on mixed tensors

simplifyAssertEq((a'^i' * delta'_i^j'):simplifyMetrics(), a'^j')
${{ a} ^j} = {{ a} ^j}$
GOOD
time: 7.208000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'^i' * delta'^j_i'):simplifyMetrics(), a'^j')
${{ a} ^j} = {{ a} ^j}$
GOOD
time: 6.228000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((delta'_i^j' * a'^i'):simplifyMetrics(), a'^j')
${{ a} ^j} = {{ a} ^j}$
GOOD
time: 5.445000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((delta'^j_i' * a'^i'):simplifyMetrics(), a'^j')
${{ a} ^j} = {{ a} ^j}$
GOOD
time: 5.410000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

does delta work when not mixed? it shouldn't (unless the metric is equal to identity)

simplifyAssertEq((a'^i' * delta'_ij'):simplifyMetrics(), a'^i' * delta'_ij')
${{{{ a} ^i}} {{{{ δ} _i} _j}}} = {{{{ a} ^i}} {{{{ δ} _i} _j}}}$
GOOD
time: 5.312000ms
stack: size: 8
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • *:Tidy:apply
  • Tidy

g raises and lowers

simplifyAssertEq((a'^i' * g'_ij'):simplifyMetrics(), a'_j')
${{ a} _j} = {{ a} _j}$
GOOD
time: 3.433000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((g'_ij' * a'^i'):simplifyMetrics(), a'_j')
${{ a} _j} = {{ a} _j}$
GOOD
time: 3.809000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'_i' * g'^ij'):simplifyMetrics(), a'^j')
${{ a} ^j} = {{ a} ^j}$
GOOD
time: 3.922000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((g'^ij' * a'_i'):simplifyMetrics(), a'^j')
${{ a} ^j} = {{ a} ^j}$
GOOD
time: 4.695000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

does g work when mixed? technically $g^i_j == \delta^i_j$

simplifyAssertEq((a'^i' * g'_i^j'):simplifyMetrics(), a'^j')
${{ a} ^j} = {{ a} ^j}$
GOOD
time: 5.716000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

how about simplifying solely metrics without any non-metric tensors?

simplifyAssertEq((g'^ik' * delta'_k^l'):simplifyMetrics(), g'^il')
${{{ g} ^i} ^l} = {{{ g} ^i} ^l}$
GOOD
time: 2.960000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((g'^ik' * delta'_k^l' * delta'_l^m'):simplifyMetrics(), g'^im')
${{{ g} ^i} ^m} = {{{ g} ^i} ^m}$
GOOD
time: 4.237000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

how about simplifying from metrics to deltas?

simplifyAssertEq((g'^ik' * g'_kj'):simplifyMetrics(), delta'^i_j')
${{{ δ} ^i} _j} = {{{ δ} ^i} _j}$
GOOD
time: 3.002000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((g'^ik' * delta'_k^l' * g'_lm'):simplifyMetrics(), delta'^i_m')
${{{ δ} ^i} _m} = {{{ δ} ^i} _m}$
GOOD
time: 5.753000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((g'^ik' * delta'_k^l' * delta'_l^m' * g'_mn'):simplifyMetrics(), delta'^i_n')
${{{ δ} ^i} _n} = {{{ δ} ^i} _n}$
GOOD
time: 5.823000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

how about derivatives? delta should work but g should not.
TODO technically g should work on the last ... technically ... but raised partials are awkward to deal with.
and on that note, I might as well lower with the metric

simplifyAssertEq((a'_,i' * g'^ij'):simplifyMetrics(), a'_,i' * g'^ij')
${{{{ a} _{,i}}} {{{{ g} ^i} ^j}}} = {{{{ a} _{,i}}} {{{{ g} ^i} ^j}}}$
GOOD
time: 6.472000ms
stack: size: 8
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • *:Tidy:apply
  • Tidy

simplifyAssertEq((a'^,i' * g'_ij'):simplifyMetrics(), a'^,i' * g'_ij')
${{{{ a} ^{,i}}} {{{{ g} _i} _j}}} = {{{{ a} ^{,i}}} {{{{ g} _i} _j}}}$
GOOD
time: 4.759000ms
stack: size: 8
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • *:Tidy:apply
  • Tidy

simplifyAssertEq((a'_,im' * g'^ij'):simplifyMetrics(), a'_,im' * g'^ij')
${{{{{ a} _{,i}} _{,m}}} {{{{ g} ^i} ^j}}} = {{{{{ a} _{,i}} _{,m}}} {{{{ g} ^i} ^j}}}$
GOOD
time: 4.748000ms
stack: size: 8
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • *:Tidy:apply
  • Tidy

simplifyAssertEq((a'^,im' * g'_ij'):simplifyMetrics(), a'^,im' * g'_ij')
${{{{{ a} ^{,i}} ^{,m}}} {{{{ g} _i} _j}}} = {{{{{ a} ^{,i}} ^{,m}}} {{{{ g} _i} _j}}}$
GOOD
time: 4.898000ms
stack: size: 8
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • *:Tidy:apply
  • Tidy

simplifyAssertEq((a'_i,m' * g'^ij'):simplifyMetrics(), a'_i,m' * g'^ij')
${{{{{ a} _i} _{,m}}} {{{{ g} ^i} ^j}}} = {{{{{ a} _i} _{,m}}} {{{{ g} ^i} ^j}}}$
GOOD
time: 5.372000ms
stack: size: 8
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • *:Tidy:apply
  • Tidy

simplifyAssertEq((a'^i,m' * g'_ij'):simplifyMetrics(), a'^i,m' * g'_ij')
${{{{{ a} ^i} ^{,m}}} {{{{ g} _i} _j}}} = {{{{{ a} ^i} ^{,m}}} {{{{ g} _i} _j}}}$
GOOD
time: 5.136000ms
stack: size: 8
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • *:Tidy:apply
  • Tidy

but delta should simplify with commas

simplifyAssertEq((a'_,i' * delta'^i_j'):simplifyMetrics(), a'_,j')
${{ a} _{,j}} = {{ a} _{,j}}$
GOOD
time: 3.835000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'^,i' * delta'_i^j'):simplifyMetrics(), a'^,j')
${{ a} ^{,j}} = {{ a} ^{,j}}$
GOOD
time: 3.207000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'_,im' * delta'^i_j'):simplifyMetrics(), a'_,jm')
${{{ a} _{,j}} _{,m}} = {{{ a} _{,j}} _{,m}}$
GOOD
time: 3.881000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'^,im' * delta'_i^j'):simplifyMetrics(), a'^,jm')
${{{ a} ^{,j}} ^{,m}} = {{{ a} ^{,j}} ^{,m}}$
GOOD
time: 5.723000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'_i,m' * delta'^i_j'):simplifyMetrics(), a'_j_,m')
${{{ a} _j} _{,m}} = {{{ a} _j} _{,m}}$
GOOD
time: 4.277000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

simplifyAssertEq((a'^i,m' * delta'_i^j'):simplifyMetrics(), a'^j^,m')
${{{ a} ^j} ^{,m}} = {{{ a} ^j} ^{,m}}$
GOOD
time: 2.638000ms
stack: size: 7
  • Init
  • Prune
  • Expand
  • Prune
  • Factor
  • Prune
  • Tidy

TODO someday:
allow g_ij to raise/lower the last partial derivative
allow g_ij to raise/lower any covariant derivatives not enclosed in partial derivatives.