feat(Relativity): epsilon-epsilon contraction identities for the Levi-Civita tensor#1335
Conversation
|
Thank you for this PR, which will now be reviewed. If submitting to ./Physlib or ./QuantumInfo, please see our review guidelines if you are not familiar with the process. You should expect a back and forth with a reviewer before your PR is merged. See also that link for how to add appropriate labels to your PR. The PR will also go through a number of automated checks. You can learn more about these here, including how to run them locally. If you are submitting to ./PhyslibAlpha there will be a lighter review process, though your PR must still pass the automated checks. If you want to bring attention to this PR, please write a message on this thread of the Lean Zulip. Important: If a reviewer adds an |
There was a problem hiding this comment.
A couple of comments here:
theorem->lemma- A lot of this is done using the generalizedKroneckerDelta not the
leviCivitaTensor, so should likely go into the file where generalizedKroneckerDelta is defined, or it should explicitly useleviCivitaTensorhere. - It would be good to try and write these in terms of the tensor notation. I know this is difficult, but it makes things consistent.
- State the three epsilon-epsilon contractions via the standard-basis components of the Levi-Civita tensor ε4 itself, rather than the bare generalizedKroneckerDelta symbol. - Move the purely combinatorial generalizedKroneckerDelta facts (with no tensor content) to Physlib/Mathematics/KroneckerDeltaContraction.lean, alongside the definition of generalizedKroneckerDelta. - Rename theorem to lemma throughout.
981ae16 to
7ddc53f
Compare
|
Updates:
|
|
|
||
| -/ | ||
|
|
||
| /-- **Full Levi-Civita contraction** `ε^{μνρσ} ε^{μνρσ} = 24` at the symbol level. Summing the |
There was a problem hiding this comment.
Regarding the tensor contractions, I think what we really want here ε^{μνρσ} ε_{μνρσ}, which means we need to lower the indices of ε_{μνρσ}. Maybe we should define something in Tensor.Elab.lean which lowers indices for us automatically.
There was a problem hiding this comment.
I added some notation #1348 here - and wrote the lemmas you want with sorry. It might be best to base this PR off that one
|
Thanks for adding the notation and sketching the two lemmas. Working through Same story for Separately, trying to actually build these with the I may be missing something on either the signs or the notation. |
|
@Robby955 Awesome. I actually think the -24 and -6 is correct, see e.g. https://en.wikipedia.org/wiki/Levi-Civita_symbol#Example:_Minkowski_space Do you have an example of where you hit |
|
I should also say, that I did not build any API around, |
|
So the symbol level identities stay +24 and +6, and the covariant statements pick up det η = -1, giving the -24 and -6. Here is a minimal case of the isDefEq issue, from Function.update. The color of a τ-lowered tensor is a nested Function.update chain, and that is extensionally but not definitionally equal to the literal color vector: fails with "is not definitionally equal": the left side is a chain of dite lambdas, the right is a vecCons, and they only agree pointwise. The updates also nest inside the later τ's, so the term the unifier works on grows quickly. In larger elaborations it grinds through that before giving up, which is where my heartbeat timeouts came from rather than this clean failure. What worked was staying at the component level and never asserting the color equality. Doing that, I now have both of the #1348 sketch lemmas proved at their covariant values, on a branch building on this one:
Together with component API around toDualAtIndex: single-index lowering multiplies each basis component by the diagonal η factor, the four-fold lowered ε4, det η = -1 on the support of ε4, and the scalar of a full upper-against-lower contraction as a component sum. If that makes sense I can open it as a follow-up PR once/if this one merges. The specific mangles, if you'd rather fix in place: "color eqe both" → "color equality. Doing that, I now have both"; "branchbuilding" → "branch building"; "multipldiagonal η factor" → "multiplies each basis component by the diagonal η factor"; "ε4,and" → "ε4, and". |
|
-awaiting-author |
There was a problem hiding this comment.
Maybe we should name this file CovariantContractions? or similar
There was a problem hiding this comment.
The current content is the all-upper-index symbol-level identities, not the lowered ε_{μνρσ} form (that's #1348), so CovariantContractions could overstate it a bit. Want me to keep Contractions, or use SymbolContractions?
|
Will try and see if we can get Function.update to be def-eq. It is a bit annoying that it isn't. |
works, so they are decidable equal. I think this is likely all that we can ask for here. |
|
This also works here: |
|
Cool, thanks! I'll restate the follow-up branch on top of your |
|
This permT route still uses toDaulAtIndex though in the taus unless I’m confused about what you mean |
|
You're right, thanks for catching this, I mislabeled that. The taus in {ε4 | τ(μ) τ(ν) τ(ρ) τ(σ)}ᵀ are toDualAtIndex, so permT doesn't replace it. What permT id .auto handles is the color ascription, letting the tau-lowered tensor be typed at the literal .down color; the lowering itself is still toDualAtIndex. So it composes with the component lemmas that compute the -24 and -6, rather than being an alternative to them. My earlier "permT instead of toDualAtIndex" was the wrong way to put it. |
…mas out of Relativity The four lemmas backing the epsilon-epsilon contraction identities are pure combinatorics of the (generalized) Kronecker delta with no tensor content, so relocate them next to their definitions and make them public: - kron_finSum -> KroneckerDelta.kroneckerDelta_finSumFinEquiv (KroneckerDelta.lean) - symbol_zero -> KroneckerDelta.sum_generalizedKroneckerDelta_mul_self (KroneckerDeltaContraction.lean) - symbol_one -> KroneckerDelta.sum_generalizedKroneckerDelta_mul_cons (KroneckerDeltaContraction.lean) - symbol_two -> KroneckerDelta.sum_generalizedKroneckerDelta_mul_cons₂ (KroneckerDeltaContraction.lean) Contractions.lean keeps only the cons_finSum reindexing bookkeeping and now uses the new public names. Proofs are unchanged.
|
Moved and made public next to their definitions: kron_finSum → KroneckerDelta.kroneckerDelta_finSumFinEquiv; symbol_zero/one/two → sum_generalizedKroneckerDelta_mul_self / _cons / _cons₂ in KroneckerDeltaContraction. Contractions.lean keeps only cons_finSum and now calls the new names. |
|
-awaiting-author |
Follow-up to #1274: the epsilon-epsilon contraction identities at the symbol level, the form that drives
leviCivita's components.These are proved for
generalizedKroneckerDelta f id, whichleviCivita_basis_repr_applyalready identifies withleviCivita's components, not as corollaries restated directly in terms of(Tensor.basis _).repr ε4. The lowered-index Lorentzian forms actually discussed on #1274 (ε^{...}ε_{...}with one factor lowered by the metric) are referenced below.Builds the reusable contraction identity for the generalized Kronecker delta (summing one shared index out of
δ^{μ₁…μₖ}_{ν₁…νₖ}reduces rank, the combinatorial fact behindε^{…}ε_{…}), then specializes it to the three symbol-level identities at rank 4:ε^{μνρσ} ε^{μνρσ} = 24(full contraction)ε^{μνρσ} ε^{μνρτ} = 6 δ^σ_τ(three contracted, one free pair)ε^{μνρσ} ε^{μντω} = 2 (δ^ρ_τ δ^σ_ω - δ^ρ_ω δ^σ_τ)(two contracted, two free pairs)These are stated at the symbol level (
generalizedKroneckerDelta f id), whichleviCivita_basis_repr_applyalready identifies withleviCivita's components.The general contraction lemma needed a rank-one determinant update for singular matrices (
Matrix.det_add_rankOne). Mathlib's existing version requiresIsUnit A.det; the singular case is left unfinished atMathlib/LinearAlgebra/Matrix/SchurComplement.lean:425, since the delta-matrices here are generically singular. Proved it via the Schur complement to drop dimension, then a rank-one update, then a Kronecker sum collapse.these prove the all-upper-index form (
ε^{…}ε^{…}), giving+24,+6,+2(…). The mixed formε^{…}ε_{…}(one factor lowered by the Lorentz metric) picks up a factor ofdet η = -1in 4D Minkowski signature, giving the negative signs. Same tensor structure (the antisymmetricδδ - δδin the two-index case), different convention depending on whether one side is lowered.