Imports
/-
Copyright (c) 2026 Justin Findlay. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Justin Findlay
-/
module
public import Physlib.Electromagnetism.Kinematics.FieldStrengthGauge Transformations of the Electromagnetic Potential
i. Overview
In this module we define gauge transformations of the electromagnetic potential
A^μ ↦ A^μ + ∂^μ χ where χ : SpaceTime d → ℝ is a smooth gauge function, and prove
that the field strength tensor is invariant under such transformations.
The raised-index gradient ∂^μ χ := η^{μν} ∂_ν χ is necessary because the bare covariant gradient
∂_μ χ does not make F^{μν} invariant. The formal witness is
fieldStrengthMatrix_bareGradient_inl_inr (§B.5), which computes a specific nonzero component of
the field strength of a bare-gradient potential. The invariance theorem
toFieldStrength_gaugeTransform doubles as a correctness test of ofGradient.
ii. Key results
ofGradient : The pure-gauge potential A^μ = η^{μν} ∂_ν χ built from a gauge function χ.
gaugeTransform : The gauge transformation A^μ ↦ A^μ + ∂^μ χ.
toFieldStrength_ofGradient : A pure-gauge potential has vanishing field strength.
toFieldStrength_gaugeTransform : The field strength tensor is invariant under gauge
transformations.
fieldStrengthMatrix_gaugeTransform : The field strength matrix is invariant under gauge
transformations.
gaugeTransform_gaugeTransform : Composing two gauge shifts equals shifting by the sum;
upgrades one-step F-invariance to invariance along any finite chain.
ofGradient_equivariant : ofGradient intertwines the Lorentz action with function composition.
gaugeTransform_equivariant : Gauge transformations commute with Lorentz transformations.
fieldStrengthMatrix_bareGradient_inl_inr : The (inl 0, inr i) field-strength component of
the bare-gradient potential χ(x) = x⁰·xⁱ equals 2; in particular the bare gradient does
not give a gauge-invariant field strength (necessity of the metric contraction in ofGradient).
iii. Table of contents
A. The pure-gauge potential
A.1. Definition and basic lemmas
A.2. Differentiability of the pure-gauge potential
A.3. Vanishing field strength of the pure-gauge potential
A.4. Lorentz equivariance of the pure-gauge potential
B. Gauge transformations
B.1. Definition and basic lemmas
B.2. Invariance of the field strength
B.3. Group structure of gauge shifts
B.4. Equivariance under Lorentz transformations
B.5. Necessity: bare gradient does not give gauge invariance
iv. References
https://en.wikipedia.org/wiki/Mathematical_descriptions_of_the_electromagnetic_field#Gauge_freedom
@[expose] public sectionattribute [-simp] Fintype.sum_sum_typeattribute [-simp] Nat.succ_eq_add_oneA. The pure-gauge potential
A.1. Definition and basic lemmas
Unfolding of the summed definition of ofGradient.
lemma ofGradient_apply_sum {d} (χ : SpaceTime d → ℝ) (x : SpaceTime d) (μ : Fin 1 ⊕ Fin d) :
ofGradient χ x μ = ∑ κ, η μ κ * ∂_ κ χ x := rfl
Evaluation of ofGradient in the diagonal form; the off-diagonal entries of η vanish so
only the κ = μ term survives.
h₀ d:ℕχ:SpaceTime d → ℝx:SpaceTime dμ:Fin 1 ⊕ Fin dκ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univhκ:κ ≠ μ⊢ 0 * ∂_ κ χ x = 0
simp All goals completed! 🐙
· h₁ d:ℕχ:SpaceTime d → ℝx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ μ ∉ Finset.univ → η μ μ * ∂_ μ χ x = 0 simp All goals completed! 🐙The pure-gauge potential built from the zero gauge function has all components zero.
lemma ofGradient_zero {d} (x : SpaceTime d) (μ : Fin 1 ⊕ Fin d) :
ofGradient (0 : SpaceTime d → ℝ) x μ = 0 := by d:ℕx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (ofGradient 0).val x μ = 0
rw [ofGradient_apply d:ℕx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ η μ μ * ∂_ μ 0 x = 0 d:ℕx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ η μ μ * ∂_ μ 0 x = 0] d:ℕx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ η μ μ * ∂_ μ 0 x = 0
simp [SpaceTime.deriv_eq] All goals completed! 🐙
ofGradient is additive in the gauge function (when both summands are differentiable).
lemma ofGradient_add {d} {χ₁ χ₂ : SpaceTime d → ℝ}
(hχ₁ : Differentiable ℝ χ₁) (hχ₂ : Differentiable ℝ χ₂) :
ofGradient (χ₁ + χ₂) = ofGradient χ₁ + ofGradient χ₂ := by d:ℕχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂⊢ ofGradient (χ₁ + χ₂) = ofGradient χ₁ + ofGradient χ₂
apply eq_of_val_eq d:ℕχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂⊢ (ofGradient (χ₁ + χ₂)).val = (ofGradient χ₁ + ofGradient χ₂).val; funext x μ d:ℕχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (ofGradient (χ₁ + χ₂)).val x μ = (ofGradient χ₁ + ofGradient χ₂).val x μ
show ofGradient (χ₁ + χ₂) x μ = ofGradient χ₁ x μ + ofGradient χ₂ x μ d:ℕχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (ofGradient (χ₁ + χ₂)).val x μ = (ofGradient χ₁).val x μ + (ofGradient χ₂).val x μ
simp only [ofGradient_apply, SpaceTime.deriv_eq,
fderiv_add hχ₁.differentiableAt hχ₂.differentiableAt, _root_.add_apply,
mul_add] All goals completed! 🐙A.2. Differentiability of the pure-gauge potential
The pure-gauge potential is differentiable when χ is C^2.
lemma differentiable_ofGradient {d} {χ : SpaceTime d → ℝ} (hχ : ContDiff ℝ 2 χ) :
Differentiable ℝ (ofGradient χ) := by d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χ⊢ Differentiable ℝ (ofGradient χ).val
show Differentiable ℝ (ofGradient χ).val d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χ⊢ Differentiable ℝ (ofGradient χ).val
rw [← SpaceTime.differentiable_vector d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (ofGradient χ).val x ν d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (ofGradient χ).val x ν] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (ofGradient χ).val x ν
intro μ d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => (ofGradient χ).val x μ
simp_rw [ d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => (ofGradient χ).val x μofGradient_apply d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => η μ μ * ∂_ μ χ x]
exact (SpaceTime.differentiable_deriv μ χ hχ).const_mul _ All goals completed! 🐙
The pure-gauge potential is C^n when χ is C^{n+1}.
lemma contDiff_ofGradient {n} {d} {χ : SpaceTime d → ℝ} (hχ : ContDiff ℝ (n + 1) χ) :
ContDiff ℝ n (ofGradient χ) := by n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χ⊢ ContDiff ℝ n (ofGradient χ).val
show ContDiff ℝ n (ofGradient χ).val n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χ⊢ ContDiff ℝ n (ofGradient χ).val
rw [← SpaceTime.contDiff_vector n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => (ofGradient χ).val x ν n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => (ofGradient χ).val x ν] n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => (ofGradient χ).val x ν
intro μ n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (ofGradient χ).val x μ
simp_rw [ n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (ofGradient χ).val x μofGradient_apply n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => η μ μ * ∂_ μ χ x]
have h := SpaceTime.contDiff_deriv μ χ hχ n:WithTop ℕ∞d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ (n + 1) χμ:Fin 1 ⊕ Fin dh:ContDiff ℝ n (∂_ μ χ)⊢ ContDiff ℝ n fun x => η μ μ * ∂_ μ χ x
fun_prop All goals completed! 🐙A.3. Vanishing field strength of the pure-gauge potential
A pure-gauge potential has vanishing field strength.
lemma toFieldStrength_ofGradient {d} {χ : SpaceTime d → ℝ} (hχ : ContDiff ℝ 2 χ)
(x : SpaceTime d) : (ofGradient χ).toFieldStrength x = 0 := by d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (ofGradient χ).toFieldStrength x = 0
apply (Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr.injective d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (CoVector.basis.tensorProduct Vector.basis).repr ((ofGradient χ).toFieldStrength x) =
(CoVector.basis.tensorProduct Vector.basis).repr 0
apply Finsupp.ext d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ ∀ (a : (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)),
((CoVector.basis.tensorProduct Vector.basis).repr ((ofGradient χ).toFieldStrength x)) a =
((CoVector.basis.tensorProduct Vector.basis).repr 0) a
intro μν d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((ofGradient χ).toFieldStrength x)) μν =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
simp only [toFieldStrength_basis_repr_apply_eq_single] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * ∂_ μν.1 (ofGradient χ).val x μν.2 - η μν.2 μν.2 * ∂_ μν.2 (ofGradient χ).val x μν.1 =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
rw [SpaceTime.deriv_apply_eq μν.1 μν.2 (ofGradient χ) (differentiable_ofGradient hχ), d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.2) x) (Vector.basis μν.1) -
η μν.2 μν.2 * ∂_ μν.2 (ofGradient χ).val x μν.1 =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.2) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.1) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
SpaceTime.deriv_apply_eq μν.2 μν.1 (ofGradient χ) (differentiable_ofGradient hχ) d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.2) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.1) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.2) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.1) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.2) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (fderiv ℝ (fun x => (ofGradient χ).val x μν.1) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
simp only [ofGradient_apply] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (fderiv ℝ (fun x => η μν.2 μν.2 * ∂_ μν.2 χ x) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (fderiv ℝ (fun x => η μν.1 μν.1 * ∂_ μν.1 χ x) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
rw [fderiv_const_mul (SpaceTime.differentiable_deriv μν.1 χ hχ).differentiableAt, d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (fderiv ℝ (fun x => η μν.2 μν.2 * ∂_ μν.2 χ x) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (η μν.1 μν.1 • fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (η μν.2 μν.2 • fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (η μν.1 μν.1 • fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
fderiv_const_mul (SpaceTime.differentiable_deriv μν.2 χ hχ).differentiableAt d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (η μν.2 μν.2 • fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (η μν.1 μν.1 • fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (η μν.2 μν.2 • fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (η μν.1 μν.1 • fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (η μν.2 μν.2 • fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) -
η μν.2 μν.2 * (η μν.1 μν.1 • fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
simp only [FunLike.coe_smul, Pi.smul_apply, smul_eq_mul] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
((CoVector.basis.tensorProduct Vector.basis).repr 0) μν
-- simplify repr 0 to 0
conv_rhs => rw [show (Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr
(0 : Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d) = 0 from map_zero _] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)| 0 μν
simp only [Finsupp.zero_apply] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0
-- use Clairaut: ∂_ μ (∂_ ν χ) x = ∂_ ν (∂_ μ χ) x, so the two terms cancel
have heq : fderiv ℝ (∂_ μν.2 χ) x (Lorentz.Vector.basis μν.1) =
fderiv ℝ (∂_ μν.1 χ) x (Lorentz.Vector.basis μν.2) := by d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (ofGradient χ).toFieldStrength x = 0 d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0
change ∂_ μν.1 (∂_ μν.2 χ) x = ∂_ μν.2 (∂_ μν.1 χ) x d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∂_ μν.1 (∂_ μν.2 χ) x = ∂_ μν.2 (∂_ μν.1 χ) x d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0
rw [← SpaceTime.deriv_commute μν.2 μν.1 χ hχ d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∂_ μν.2 (∂_ μν.1 χ) x = ∂_ μν.2 (∂_ μν.1 χ) x d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0 d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0
rw [heq d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0 d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0] d:ℕχ:SpaceTime d → ℝhχ:ContDiff ℝ 2 χx:SpaceTime dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)heq:(fderiv ℝ (∂_ μν.2 χ) x) (Vector.basis μν.1) = (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)⊢ η μν.1 μν.1 * (η μν.2 μν.2 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) -
η μν.2 μν.2 * (η μν.1 μν.1 * (fderiv ℝ (∂_ μν.1 χ) x) (Vector.basis μν.2)) =
0
ring All goals completed! 🐙A.4. Lorentz equivariance of the pure-gauge potential
ofGradient intertwines the Lorentz action on potentials with composition by Λ⁻¹ on the gauge
function: Λ • ofGradient χ = ofGradient (χ ∘ (Λ⁻¹ • ·)). The proof reduces to the
metric-commutativity identity Λ * η = η * (Λ⁻¹)ᵀ, which is the defining property of the
Lorentz group (LorentzGroup.comm_minkowskiMatrix).
ofGradient intertwines the Lorentz action on potentials with composition by Λ⁻¹ on the
gauge function: Λ • ofGradient χ = ofGradient (χ ∘ (Λ⁻¹ • ·)).
lemma ofGradient_equivariant {d} (χ : SpaceTime d → ℝ) (hχ : Differentiable ℝ χ)
(Λ : LorentzGroup d) :
Λ • ofGradient χ = ofGradient (χ ∘ (Λ⁻¹ • ·)) := by d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x)
-- The metric-commutativity row identity, extracted from `comm_minkowskiMatrix`:
-- ∑ ν, Λ.1 μ ν * η ν κ = ∑ ν, η μ ν * (Λ⁻¹).1 κ ν
have hmetric : ∀ (μ κ : Fin 1 ⊕ Fin d),
∑ ν, Λ.1 μ ν * η ν κ = ∑ ν, η μ ν * (Λ⁻¹).1 κ ν := by
intro μ κ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)μ:Fin 1 ⊕ Fin dκ:Fin 1 ⊕ Fin d⊢ ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x)
-- comm_minkowskiMatrix: Λ.1 * η = η * (Λ⁻¹)ᵀ, applied at (μ, κ)
have h := congr_fun₂ (LorentzGroup.comm_minkowskiMatrix (Λ := Λ)) μ κ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)μ:Fin 1 ⊕ Fin dκ:Fin 1 ⊕ Fin dh:(↑Λ * η) μ κ = (η * ↑(LorentzGroup.transpose Λ⁻¹)) μ κ⊢ ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x)
simp only [Matrix.mul_apply, LorentzGroup.transpose_val, Matrix.transpose_apply] at h d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)μ:Fin 1 ⊕ Fin dκ:Fin 1 ⊕ Fin dh:∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν⊢ ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x)
exact h d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x)
apply eq_of_val_eq d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ ν⊢ (Λ • ofGradient χ).val = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val; funext x μ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
-- Let a κ = ∂_ κ χ (Λ⁻¹ • x). Both sides equal ∑ κ, (∑ ν, Λ.1 μ ν * η ν κ) * a κ.
set a : Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
-- Expand LHS: action_val → smul_eq_sum → ofGradient_apply_sum → reassociate + factor
have hlhs : (Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, Λ.1 μ ν * η ν κ) * a κ := by d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
simp only [ElectromagneticPotential.action_val, Lorentz.Vector.smul_eq_sum, a,
ofGradient_apply_sum, Finset.mul_sum] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)⊢ ∑ x_1, ∑ i, ↑Λ μ x_1 * (η x_1 i * ∂_ i χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
rw [Finset.sum_comm d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)⊢ ∑ y, ∑ x_1, ↑Λ μ x_1 * (η x_1 y * ∂_ y χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)⊢ ∑ y, ∑ x_1, ↑Λ μ x_1 * (η x_1 y * ∂_ y χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)⊢ ∑ y, ∑ x_1, ↑Λ μ x_1 * (η x_1 y * ∂_ y χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
apply Finset.sum_congr rfl d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)⊢ ∀ x_1 ∈ Finset.univ, ∑ x_2, ↑Λ μ x_2 * (η x_2 x_1 * ∂_ x_1 χ (Λ⁻¹ • x)) = (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ; intro κ _ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)κ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ ∑ x_1, ↑Λ μ x_1 * (η x_1 κ * ∂_ κ χ (Λ⁻¹ • x)) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
simp_rw [ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)κ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ ∑ x_1, ↑Λ μ x_1 * (η x_1 κ * ∂_ κ χ (Λ⁻¹ • x)) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ← mul_assoc d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)κ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ ∑ x_1, ↑Λ μ x_1 * η x_1 κ * ∂_ κ χ (Λ⁻¹ • x) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ]
rw [← Finset.sum_mul d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)κ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ (∑ i, ↑Λ μ i * η i κ) * ∂_ κ χ (Λ⁻¹ • x) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
-- Expand RHS: ofGradient_apply_sum → deriv_comp_lorentz_action → sum_comm + factor + hmetric
have hrhs : (ofGradient (χ ∘ (Λ⁻¹ • ·))).val x μ = ∑ κ, (∑ ν, Λ.1 μ ν * η ν κ) * a κ := by d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • ofGradient χ = ofGradient (χ ∘ fun x => Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
simp only [ofGradient_apply_sum, a] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∑ κ, η μ κ * ∂_ κ (χ ∘ fun x => Λ⁻¹ • x) x = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
conv_lhs =>
enter [2, ν] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κν:Fin 1 ⊕ Fin d| η μ ν * ∂_ ν (χ ∘ fun x => Λ⁻¹ • x) x d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
rw [show ∂_ ν (χ ∘ (Λ⁻¹ • ·)) x = ∂_ ν (fun y => χ (Λ⁻¹ • y)) x from rfl,
SpaceTime.deriv_comp_lorentz_action ν χ hχ Λ⁻¹ x] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κν:Fin 1 ⊕ Fin d| η μ ν * ∑ ν_1, ↑Λ⁻¹ ν_1 ν • ∂_ ν_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
simp only [smul_eq_mul, Finset.mul_sum] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∑ x_1, ∑ i, η μ x_1 * (↑Λ⁻¹ i x_1 * ∂_ i χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
rw [Finset.sum_comm d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∑ y, ∑ x_1, η μ x_1 * (↑Λ⁻¹ y x_1 * ∂_ y χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∑ y, ∑ x_1, η μ x_1 * (↑Λ⁻¹ y x_1 * ∂_ y χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∑ y, ∑ x_1, η μ x_1 * (↑Λ⁻¹ y x_1 * ∂_ y χ (Λ⁻¹ • x)) = ∑ x_1, (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
apply Finset.sum_congr rfl d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∀ x_1 ∈ Finset.univ, ∑ x_2, η μ x_2 * (↑Λ⁻¹ x_1 x_2 * ∂_ x_1 χ (Λ⁻¹ • x)) = (∑ ν, ↑Λ μ ν * η ν x_1) * ∂_ x_1 χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ; intro κ _ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κκ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ ∑ x_1, η μ x_1 * (↑Λ⁻¹ κ x_1 * ∂_ κ χ (Λ⁻¹ • x)) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
simp_rw [ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κκ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ ∑ x_1, η μ x_1 * (↑Λ⁻¹ κ x_1 * ∂_ κ χ (Λ⁻¹ • x)) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ← mul_assoc d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κκ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ ∑ x_1, η μ x_1 * ↑Λ⁻¹ κ x_1 * ∂_ κ χ (Λ⁻¹ • x) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ]
rw [← Finset.sum_mul, d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κκ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ (∑ i, η μ i * ↑Λ⁻¹ κ i) * ∂_ κ χ (Λ⁻¹ • x) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ ← hmetric d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κκ:Fin 1 ⊕ Fin da✝:κ ∈ Finset.univ⊢ (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) = (∑ ν, ↑Λ μ ν * η ν κ) * ∂_ κ χ (Λ⁻¹ • x) d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ] d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ (Λ • ofGradient χ).val x μ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ
rw [hlhs, d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ = (ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ All goals completed! 🐙 hrhs d:ℕχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)hmetric:∀ (μ κ : Fin 1 ⊕ Fin d), ∑ ν, ↑Λ μ ν * η ν κ = ∑ ν, η μ ν * ↑Λ⁻¹ κ νx:SpaceTime dμ:Fin 1 ⊕ Fin da:Fin 1 ⊕ Fin d → ℝ := fun κ => ∂_ κ χ (Λ⁻¹ • x)hlhs:(Λ • ofGradient χ).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κhrhs:(ofGradient (χ ∘ fun x => Λ⁻¹ • x)).val x μ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ⊢ ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ = ∑ κ, (∑ ν, ↑Λ μ ν * η ν κ) * a κ All goals completed! 🐙] All goals completed! 🐙B. Gauge transformations
B.1. Definition and basic lemmas
Evaluation of gaugeTransform.
lemma gaugeTransform_apply {d} (χ : SpaceTime d → ℝ) (A : ElectromagneticPotential d)
(x : SpaceTime d) : gaugeTransform χ A x = A x + ofGradient χ x := by d:ℕχ:SpaceTime d → ℝA:ElectromagneticPotential dx:SpaceTime d⊢ (gaugeTransform χ A).val x = A.val x + (ofGradient χ).val x
simp [gaugeTransform, add_apply] All goals completed! 🐙B.2. Invariance of the field strength
The key ingredient — that a pure-gauge potential has vanishing field strength — is proved in §A.3
(toFieldStrength_ofGradient).
The field strength tensor is invariant under gauge transformations.
lemma toFieldStrength_gaugeTransform {d} (A : ElectromagneticPotential d)
(χ : SpaceTime d → ℝ) (hA : Differentiable ℝ A) (hχ : ContDiff ℝ 2 χ) (x : SpaceTime d) :
(gaugeTransform χ A).toFieldStrength x = A.toFieldStrength x := by d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (gaugeTransform χ A).toFieldStrength x = A.toFieldStrength x
rw [gaugeTransform, d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (A + ofGradient χ).toFieldStrength x = A.toFieldStrength x All goals completed! 🐙 toFieldStrength_add A (ofGradient χ) x hA (differentiable_ofGradient hχ), d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ A.toFieldStrength x + (ofGradient χ).toFieldStrength x = A.toFieldStrength x All goals completed! 🐙
toFieldStrength_ofGradient hχ, d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ A.toFieldStrength x + 0 = A.toFieldStrength x All goals completed! 🐙 add_zero d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ A.toFieldStrength x = A.toFieldStrength x All goals completed! 🐙] All goals completed! 🐙The field strength matrix is invariant under gauge transformations.
lemma fieldStrengthMatrix_gaugeTransform {d} (A : ElectromagneticPotential d)
(χ : SpaceTime d → ℝ) (hA : Differentiable ℝ A) (hχ : ContDiff ℝ 2 χ) (x : SpaceTime d) :
(gaugeTransform χ A).fieldStrengthMatrix x = A.fieldStrengthMatrix x := by d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (gaugeTransform χ A).fieldStrengthMatrix x = A.fieldStrengthMatrix x
rw [fieldStrengthMatrix, d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (CoVector.basis.tensorProduct Vector.basis).repr ((gaugeTransform χ A).toFieldStrength x) = A.fieldStrengthMatrix x All goals completed! 🐙 toFieldStrength_gaugeTransform A χ hA hχ d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhA:Differentiable ℝ A.valhχ:ContDiff ℝ 2 χx:SpaceTime d⊢ (CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x) = A.fieldStrengthMatrix x All goals completed! 🐙] All goals completed! 🐙B.3. Group structure of gauge shifts
Composing two gauge shifts by χ₁ and χ₂ is the same as shifting by χ₁ + χ₂. Together with
gaugeTransform_zero this shows that the map χ ↦ (A ↦ gaugeTransform χ A) is a group action
of the additive group of smooth functions. (We do not build the formal MulAction here —
the composition lemma is the agreeable core, and the rest is straightforward from it.)
The ofGradient lemmas used here — ofGradient_zero and ofGradient_add — are proved in §A.1.
Shifting by the zero gauge function is the identity.
lemma gaugeTransform_zero {d} (A : ElectromagneticPotential d) :
gaugeTransform (0 : SpaceTime d → ℝ) A = A := by d:ℕA:ElectromagneticPotential d⊢ gaugeTransform 0 A = A
apply eq_of_val_eq d:ℕA:ElectromagneticPotential d⊢ (gaugeTransform 0 A).val = A.val; funext x μ d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (gaugeTransform 0 A).val x μ = A.val x μ
show gaugeTransform (0 : SpaceTime d → ℝ) A x μ = A x μ d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (gaugeTransform 0 A).val x μ = A.val x μ
simp [gaugeTransform, add_apply, ofGradient_zero] All goals completed! 🐙Two successive gauge shifts compose: shifting by χ₂ then χ₁ equals shifting by χ₁ + χ₂. This upgrades one-step F-invariance to invariance along any finite chain of gauge shifts.
lemma gaugeTransform_gaugeTransform {d} (A : ElectromagneticPotential d)
(χ₁ χ₂ : SpaceTime d → ℝ) (hχ₁ : Differentiable ℝ χ₁) (hχ₂ : Differentiable ℝ χ₂) :
gaugeTransform χ₁ (gaugeTransform χ₂ A) = gaugeTransform (χ₁ + χ₂) A := by d:ℕA:ElectromagneticPotential dχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂⊢ gaugeTransform χ₁ (gaugeTransform χ₂ A) = gaugeTransform (χ₁ + χ₂) A
apply eq_of_val_eq d:ℕA:ElectromagneticPotential dχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂⊢ (gaugeTransform χ₁ (gaugeTransform χ₂ A)).val = (gaugeTransform (χ₁ + χ₂) A).val; funext x μ d:ℕA:ElectromagneticPotential dχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (gaugeTransform χ₁ (gaugeTransform χ₂ A)).val x μ = (gaugeTransform (χ₁ + χ₂) A).val x μ
simp only [gaugeTransform, add_apply] d:ℕA:ElectromagneticPotential dχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A.val x + (ofGradient χ₂).val x + (ofGradient χ₁).val x) μ = (A.val x + (ofGradient (χ₁ + χ₂)).val x) μ
rw [ofGradient_add hχ₁ hχ₂ d:ℕA:ElectromagneticPotential dχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A.val x + (ofGradient χ₂).val x + (ofGradient χ₁).val x) μ = (A.val x + (ofGradient χ₁ + ofGradient χ₂).val x) μ d:ℕA:ElectromagneticPotential dχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A.val x + (ofGradient χ₂).val x + (ofGradient χ₁).val x) μ = (A.val x + (ofGradient χ₁ + ofGradient χ₂).val x) μ] d:ℕA:ElectromagneticPotential dχ₁:SpaceTime d → ℝχ₂:SpaceTime d → ℝhχ₁:Differentiable ℝ χ₁hχ₂:Differentiable ℝ χ₂x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A.val x + (ofGradient χ₂).val x + (ofGradient χ₁).val x) μ = (A.val x + (ofGradient χ₁ + ofGradient χ₂).val x) μ
simp [add_apply, add_comm, add_left_comm] All goals completed! 🐙B.4. Equivariance under Lorentz transformations
The gauge-transformation map commutes with the Lorentz group action: applying Λ to a potential
and then gauge-transforming by χ is the same as gauge-transforming by χ ∘ (Λ⁻¹ • ·) and then
applying Λ. The proof delegates to ofGradient_equivariant (§A.4).
Gauge transformations commute with Lorentz transformations: applying Λ and then performing
a gauge transformation by χ equals performing a gauge transformation by χ ∘ (Λ⁻¹ • ·)
and then applying Λ.
lemma gaugeTransform_equivariant {d} (A : ElectromagneticPotential d)
(χ : SpaceTime d → ℝ) (hχ : Differentiable ℝ χ) (Λ : LorentzGroup d) :
Λ • gaugeTransform χ A = gaugeTransform (χ ∘ (Λ⁻¹ • ·)) (Λ • A) := by d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • gaugeTransform χ A = gaugeTransform (χ ∘ fun x => Λ⁻¹ • x) (Λ • A)
-- Unfold both sides to Λ • A + ofGradient (χ ∘ (Λ⁻¹ • ·))
simp only [gaugeTransform] d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • (A + ofGradient χ) = Λ • A + ofGradient (χ ∘ fun x => Λ⁻¹ • x)
rw [← ofGradient_equivariant χ hχ Λ d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • (A + ofGradient χ) = Λ • A + Λ • ofGradient χ d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • (A + ofGradient χ) = Λ • A + Λ • ofGradient χ] d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ Λ • (A + ofGradient χ) = Λ • A + Λ • ofGradient χ
-- Goal: Λ • (A + ofGradient χ) = Λ • A + Λ • ofGradient χ
apply eq_of_val_eq d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)⊢ (Λ • (A + ofGradient χ)).val = (Λ • A + Λ • ofGradient χ).val; funext x μ d:ℕA:ElectromagneticPotential dχ:SpaceTime d → ℝhχ:Differentiable ℝ χΛ:↑(LorentzGroup d)x:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (Λ • (A + ofGradient χ)).val x μ = (Λ • A + Λ • ofGradient χ).val x μ
simp only [ElectromagneticPotential.action_val, add_val, Pi.add_apply,
Lorentz.Vector.smul_add] All goals completed! 🐙B.5. Necessity: bare gradient does not give gauge invariance
We exhibit a concrete gauge function χ(x) = x⁰·xⁱ whose bare covariant gradient
B^μ := ∂_μ χ has a nonzero field-strength component (equal to 2), certifying that the metric
contraction in ofGradient is required for gauge invariance.
The (inl 0, inr i) component of the field strength matrix of the bare-gradient potential
B^μ := ∂_μ χ for χ(x) = x⁰·xⁱ equals 2. This witnesses that the bare covariant gradient
does not produce a gauge-invariant field strength, so the raised-index contraction
η^{μν} ∂_ν χ in ofGradient is necessary (see the module overview).
lemma fieldStrengthMatrix_bareGradient_inl_inr {d : ℕ} (i : Fin d)
(x : SpaceTime d) :
let χ : SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)
let B : ElectromagneticPotential d := ⟨fun y μ => ∂_ μ χ y⟩
B.fieldStrengthMatrix x (Sum.inl 0, Sum.inr i) = 2 := by d:ℕi:Fin dx:SpaceTime d⊢ let χ := fun y => y (Sum.inl 0) * y (Sum.inr i);
let B := { val := fun y μ => ∂_ μ χ y };
(B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
intro χ B d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
have hχ : ContDiff ℝ 2 χ := by d:ℕi:Fin dx:SpaceTime d⊢ let χ := fun y => y (Sum.inl 0) * y (Sum.inr i);
let B := { val := fun y μ => ∂_ μ χ y };
(B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χ⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
show ContDiff ℝ 2 (fun y : SpaceTime d => y (Sum.inl 0) * y (Sum.inr i)) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }⊢ ContDiff ℝ 2 fun y => y (Sum.inl 0) * y (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χ⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
fun_prop d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χ⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χ⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
have hB : Differentiable ℝ B := by d:ℕi:Fin dx:SpaceTime d⊢ let χ := fun y => y (Sum.inl 0) * y (Sum.inr i);
let B := { val := fun y μ => ∂_ μ χ y };
(B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
rw [← SpaceTime.differentiable_vector d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => B.val x ν d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => B.val x ν d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χ⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => B.val x ν d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2; intro μ d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => B.val x μ d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
exact SpaceTime.differentiable_deriv μ χ hχ d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ (B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2
-- fieldStrengthMatrix (μ, ν) = η μ μ * ∂_ μ B x ν − η ν ν * ∂_ ν B x μ
rw [toFieldStrength_basis_repr_apply_eq_single d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 * ∂_ (Sum.inl 0, Sum.inr i).1 B.val x (Sum.inl 0, Sum.inr i).2 -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 * ∂_ (Sum.inl 0, Sum.inr i).2 B.val x (Sum.inl 0, Sum.inr i).1 =
2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 * ∂_ (Sum.inl 0, Sum.inr i).1 B.val x (Sum.inl 0, Sum.inr i).2 -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 * ∂_ (Sum.inl 0, Sum.inr i).2 B.val x (Sum.inl 0, Sum.inr i).1 =
2] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 * ∂_ (Sum.inl 0, Sum.inr i).1 B.val x (Sum.inl 0, Sum.inr i).2 -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 * ∂_ (Sum.inl 0, Sum.inr i).2 B.val x (Sum.inl 0, Sum.inr i).1 =
2
-- Expand ∂_ μ B x ν as ∂_ μ (fun y => ∂_ ν χ y) x = ∂_ μ (∂_ ν χ) x
rw [SpaceTime.deriv_apply_eq (Sum.inl 0) (Sum.inr i) B hB, d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 * ∂_ (Sum.inl 0, Sum.inr i).2 B.val x (Sum.inl 0, Sum.inr i).1 =
2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2
SpaceTime.deriv_apply_eq (Sum.inr i) (Sum.inl 0) B hB d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.val⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2
-- Now compute the mixed partials of χ = t·xⁱ using fderiv_fun_mul + deriv_coord
-- ∂_t χ = xⁱ, ∂_{xⁱ} χ = t; so ∂_{xⁱ}(∂_t χ) = 1 and ∂_t(∂_{xⁱ} χ) = 1
have hfderiv : ∀ (y : SpaceTime d),
fderiv ℝ χ y = (y (Sum.inr i)) • Lorentz.Vector.coordCLM (Sum.inl 0) +
(y (Sum.inl 0)) • Lorentz.Vector.coordCLM (Sum.inr i) := fun y => by d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime d⊢ fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2
have h : fderiv ℝ (fun z : SpaceTime d => z (Sum.inl 0) * z (Sum.inr i)) y =
(y (Sum.inr i)) • Lorentz.Vector.coordCLM (Sum.inl 0) +
(y (Sum.inl 0)) • Lorentz.Vector.coordCLM (Sum.inr i) := by
have hmul := fderiv_fun_mul (𝕜 := ℝ)
(hc := (Lorentz.Vector.coordCLM (Sum.inl 0)).differentiableAt)
(hd := (Lorentz.Vector.coordCLM (Sum.inr i)).differentiableAt) (x := y) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dhmul:fderiv ℝ (fun y => (Vector.coordCLM (Sum.inl 0)) y * (Vector.coordCLM (Sum.inr i)) y) y =
(Vector.coordCLM (Sum.inl 0)) y • fderiv ℝ (⇑(Vector.coordCLM (Sum.inr i))) y +
(Vector.coordCLM (Sum.inr i)) y • fderiv ℝ (⇑(Vector.coordCLM (Sum.inl 0))) y⊢ fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dh:fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2
simp only [ContinuousLinearMap.fderiv, Lorentz.Vector.coordCLM_apply] at hmul d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dhmul:fderiv ℝ (fun y => y (Sum.inl 0) * y (Sum.inr i)) y =
y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) + y (Sum.inr i) • Vector.coordCLM (Sum.inl 0)⊢ fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dh:fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2
-- hmul: fderiv ... y = y (Sum.inl 0) • coordCLM (Sum.inr i)
-- + y (Sum.inr i) • coordCLM (Sum.inl 0)
-- goal: ... = y (Sum.inr i) • coordCLM (Sum.inl 0)
-- + y (Sum.inl 0) • coordCLM (Sum.inr i)
rw [hmul, d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dhmul:fderiv ℝ (fun y => y (Sum.inl 0) * y (Sum.inr i)) y =
y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) + y (Sum.inr i) • Vector.coordCLM (Sum.inl 0)⊢ y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) + y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dh:fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2 add_comm d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dhmul:fderiv ℝ (fun y => y (Sum.inl 0) * y (Sum.inr i)) y =
y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) + y (Sum.inr i) • Vector.coordCLM (Sum.inl 0)⊢ y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dh:fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dh:fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valy:SpaceTime dh:fderiv ℝ (fun z => z (Sum.inl 0) * z (Sum.inr i)) y =
y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i) d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2
exact h d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0, Sum.inr i).1 (Sum.inl 0, Sum.inr i).1 *
(fderiv ℝ (fun x => B.val x (Sum.inr i)) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inl 0, Sum.inr i).2 (Sum.inl 0, Sum.inr i).2 *
(fderiv ℝ (fun x => B.val x (Sum.inl 0)) x) (Vector.basis (Sum.inr i)) =
2
simp only [SpaceTime.deriv_eq, B] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0) (Sum.inl 0) *
(fderiv ℝ (fun x => (fderiv ℝ χ x) (Vector.basis (Sum.inr i))) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inr i) (Sum.inr i) *
(fderiv ℝ (fun x => (fderiv ℝ χ x) (Vector.basis (Sum.inl 0))) x) (Vector.basis (Sum.inr i)) =
2
simp_rw [ d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0) (Sum.inl 0) *
(fderiv ℝ (fun x => (fderiv ℝ χ x) (Vector.basis (Sum.inr i))) x) (Vector.basis (Sum.inl 0)) -
η (Sum.inr i) (Sum.inr i) *
(fderiv ℝ (fun x => (fderiv ℝ χ x) (Vector.basis (Sum.inl 0))) x) (Vector.basis (Sum.inr i)) =
2hfderiv d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0) (Sum.inl 0) *
(fderiv ℝ
(fun x =>
(x (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + x (Sum.inl 0) • Vector.coordCLM (Sum.inr i))
(Vector.basis (Sum.inr i)))
x)
(Vector.basis (Sum.inl 0)) -
η (Sum.inr i) (Sum.inr i) *
(fderiv ℝ
(fun x =>
(x (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + x (Sum.inl 0) • Vector.coordCLM (Sum.inr i))
(Vector.basis (Sum.inl 0)))
x)
(Vector.basis (Sum.inr i)) =
2]
simp only [_root_.add_apply, FunLike.coe_smul,
Pi.smul_apply, Lorentz.Vector.coordCLM_apply, smul_eq_mul, Lorentz.Vector.basis_apply] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0) (Sum.inl 0) *
(fderiv ℝ
(fun x => (x (Sum.inr i) * if Sum.inr i = Sum.inl 0 then 1 else 0) + x (Sum.inl 0) * if True then 1 else 0) x)
(Vector.basis (Sum.inl 0)) -
η (Sum.inr i) (Sum.inr i) *
(fderiv ℝ
(fun x => (x (Sum.inr i) * if True then 1 else 0) + x (Sum.inl 0) * if Sum.inl 0 = Sum.inr i then 1 else 0) x)
(Vector.basis (Sum.inr i)) =
2
simp only [mul_ite, mul_one, mul_zero, ite_add, zero_add, if_true] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ η (Sum.inl 0) (Sum.inl 0) *
(fderiv ℝ (fun x => if Sum.inr i = Sum.inl 0 then x (Sum.inr i) + x (Sum.inl 0) else x (Sum.inl 0)) x)
(Vector.basis (Sum.inl 0)) -
η (Sum.inr i) (Sum.inr i) *
(fderiv ℝ (fun x => x (Sum.inr i) + if Sum.inl 0 = Sum.inr i then x (Sum.inl 0) else 0) x)
(Vector.basis (Sum.inr i)) =
2
simp only [minkowskiMatrix.inl_0_inl_0, minkowskiMatrix.inr_i_inr_i] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ 1 *
(fderiv ℝ (fun x => if Sum.inr i = Sum.inl 0 then x (Sum.inr i) + x (Sum.inl 0) else x (Sum.inl 0)) x)
(Vector.basis (Sum.inl 0)) -
-1 *
(fderiv ℝ (fun x => x (Sum.inr i) + if Sum.inl 0 = Sum.inr i then x (Sum.inl 0) else 0) x)
(Vector.basis (Sum.inr i)) =
2
simp only [reduceCtorEq, ↓reduceIte, add_zero] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ 1 * (fderiv ℝ (fun x => x (Sum.inl 0)) x) (Vector.basis (Sum.inl 0)) -
-1 * (fderiv ℝ (fun x => x (Sum.inr i)) x) (Vector.basis (Sum.inr i)) =
2
simp only [Lorentz.Vector.fderiv_coord, Lorentz.Vector.coordCLM_apply,
Lorentz.Vector.basis_apply, ↓reduceIte] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }hχ:ContDiff ℝ 2 χhB:Differentiable ℝ B.valhfderiv:∀ (y : SpaceTime d),
fderiv ℝ χ y = y (Sum.inr i) • Vector.coordCLM (Sum.inl 0) + y (Sum.inl 0) • Vector.coordCLM (Sum.inr i)⊢ 1 * 1 - -1 * 1 = 2
norm_num All goals completed! 🐙
The field strength of the bare-gradient potential B^μ := ∂_μ χ for
χ(x) = x⁰·xⁱ is nonzero (follows from fieldStrengthMatrix_bareGradient_inl_inr).
lemma toFieldStrength_bareGradient_ne_zero {d : ℕ} (i : Fin d)
(x : SpaceTime d) :
let χ : SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)
let B : ElectromagneticPotential d := ⟨fun y μ => ∂_ μ χ y⟩
B.toFieldStrength x ≠ 0 := by d:ℕi:Fin dx:SpaceTime d⊢ let χ := fun y => y (Sum.inl 0) * y (Sum.inr i);
let B := { val := fun y μ => ∂_ μ χ y };
B.toFieldStrength x ≠ 0
intro χ B h d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0⊢ False
have h2 := fieldStrengthMatrix_bareGradient_inl_inr i x d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:have χ := fun y => y (Sum.inl 0) * y (Sum.inr i);
have B := { val := fun y μ => ∂_ μ χ y };
(B.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2⊢ False
dsimp only at h2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:({ val := fun y μ => ∂_ μ (fun y => y (Sum.inl 0) * y (Sum.inr i)) y }.fieldStrengthMatrix x) (Sum.inl 0, Sum.inr i) = 2⊢ False
rw [fieldStrengthMatrix_eq, d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:((CoVector.basis.tensorProduct Vector.basis).repr
({ val := fun y μ => ∂_ μ (fun y => y (Sum.inl 0) * y (Sum.inr i)) y }.toFieldStrength x))
(Sum.inl 0, Sum.inr i) =
2⊢ False d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:((CoVector.basis.tensorProduct Vector.basis).repr 0) (Sum.inl 0, Sum.inr i) = 2⊢ False h d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:((CoVector.basis.tensorProduct Vector.basis).repr 0) (Sum.inl 0, Sum.inr i) = 2⊢ False d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:((CoVector.basis.tensorProduct Vector.basis).repr 0) (Sum.inl 0, Sum.inr i) = 2⊢ False] at h2 d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:((CoVector.basis.tensorProduct Vector.basis).repr 0) (Sum.inl 0, Sum.inr i) = 2⊢ False
have h3 : ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr
(0 : Lorentz.CoVector d ⊗[ℝ] Lorentz.Vector d)) = 0 := map_zero _ d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:((CoVector.basis.tensorProduct Vector.basis).repr 0) (Sum.inl 0, Sum.inr i) = 2h3:(CoVector.basis.tensorProduct Vector.basis).repr 0 = 0⊢ False
erw [h3, d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:0 (Sum.inl 0, Sum.inr i) = 2h3:(CoVector.basis.tensorProduct Vector.basis).repr 0 = 0⊢ False Finsupp.zero_apply d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:0 = 2h3:(CoVector.basis.tensorProduct Vector.basis).repr 0 = 0⊢ False] d:ℕi:Fin dx:SpaceTime dχ:SpaceTime d → ℝ := fun y => y (Sum.inl 0) * y (Sum.inr i)B:ElectromagneticPotential d := { val := fun y μ => ∂_ μ χ y }h:B.toFieldStrength x = 0h2:0 = 2h3:(CoVector.basis.tensorProduct Vector.basis).repr 0 = 0⊢ False at h2
norm_num at h2 All goals completed! 🐙