Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
module
public import Physlib.Electromagnetism.Distributional.Dynamics.CurrentDensity
public import Physlib.Electromagnetism.Distributional.Dynamics.KineticTerm
public import Physlib.Relativity.Tensors.RealTensor.Vector.MinkowskiProductThe Lagrangian in electromagnetism
i. Overview
In this module we define the Lagrangian density for the electromagnetic field in presence of a current density. We prove properties of this lagrangian density, and find it's variational gradient.
The lagrangian density is given by
L = -1/(4 μ₀) F_{μν} F^{μν} - A_μ J^μ
In this implementation we set μ₀ = 1. It is a TODO to introduce this constant.
ii. Key results
gradFreeCurrentPotential : The variational gradient of the free current potential.
gradLagrangian : The variational gradient of the lagrangian density.
iii. Table of contents
A. The gradient of the lagrangian density for distributions
A.1. The gradient of the free current potential
A.1.1. Free current potential as a tensor
A.2. The gradient of the lagrangian density
A.2.1. The lagrangian gradient as a tensor
iv. References
https://quantummechanics.ucsd.edu/ph130a/130_notes/node452.html
https://ph.qmul.ac.uk/sites/default/files/EMT10new.pdf
@[expose] public sectionA. The gradient of the lagrangian density for distributions
attribute [-simp] Fintype.sum_sum_typeattribute [-simp] Nat.succ_eq_add_oneA.1. The gradient of the free current potential
We define this through the lemma gradFreeCurrentPotential_eq_sum_basis
lemma gradFreeCurrentPotential_eq_sum_basis {d}
(J : DistLorentzCurrentDensity d) (ε : 𝓢(SpaceTime d, ℝ)) :
(gradFreeCurrentPotential J) ε =
(∑ μ, (η μ μ • (J ε μ) • Lorentz.Vector.basis μ)) := rfl𝓕:FreeSpaced:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)⊢ J ε (Sum.inl 0) = ((distTimeSlice 𝓕.c).symm ((distTimeSlice 𝓕.c) J)) ε (Sum.inl 0)
simp All goals completed! 🐙
lemma gradFreeCurrentPotential_sum_inr_i (𝓕 : FreeSpace) {d}
(J : DistLorentzCurrentDensity d) (ε : 𝓢(SpaceTime d, ℝ)) (i : Fin d) :
(gradFreeCurrentPotential J) ε (Sum.inr i) =
- (distTimeSlice 𝓕.c).symm (J.currentDensity 𝓕.c) ε i := by 𝓕:FreeSpaced:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)i:Fin d⊢ (gradFreeCurrentPotential J) ε (Sum.inr i) =
-(((distTimeSlice 𝓕.c).symm ((DistLorentzCurrentDensity.currentDensity 𝓕.c) J)) ε).ofLp i
simp only [gradFreeCurrentPotential, LinearMap.coe_mk, AddHom.coe_mk, ContinuousLinearMap.coe_mk',
apply_sum, apply_smul, Lorentz.Vector.basis_apply, mul_ite, mul_one, mul_zero,
Finset.sum_ite_eq', Finset.mem_univ, ↓reduceIte, inr_i_inr_i,
DistLorentzCurrentDensity.currentDensity, spatialCLM, distTimeSlice_symm_apply,
ContinuousLinearMap.coe_comp, Function.comp_apply] 𝓕:FreeSpaced:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)i:Fin d⊢ -1 * J ε (Sum.inr i) =
-((distTimeSlice 𝓕.c) J) ((compCLMOfContinuousLinearEquiv ℝ (toTimeAndSpace 𝓕.c).symm) ε) (Sum.inr i)
rw [← distTimeSlice_symm_apply 𝓕:FreeSpaced:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)i:Fin d⊢ -1 * J ε (Sum.inr i) = -((distTimeSlice 𝓕.c).symm ((distTimeSlice 𝓕.c) J)) ε (Sum.inr i) 𝓕:FreeSpaced:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)i:Fin d⊢ -1 * J ε (Sum.inr i) = -((distTimeSlice 𝓕.c).symm ((distTimeSlice 𝓕.c) J)) ε (Sum.inr i)] 𝓕:FreeSpaced:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)i:Fin d⊢ -1 * J ε (Sum.inr i) = -((distTimeSlice 𝓕.c).symm ((distTimeSlice 𝓕.c) J)) ε (Sum.inr i)
simp All goals completed! 🐙A.1.1. Free current potential as a tensor
lemma gradFreeCurrentPotential_eq_tensor {d}
(J : DistLorentzCurrentDensity d) (ε : 𝓢(SpaceTime d, ℝ))
(ν : Fin 1 ⊕ Fin d) :
gradFreeCurrentPotential J ε ν = η ν ν * ((Tensorial.toTensor (M := Lorentz.Vector d)).symm
(permT id (IsReindexing.auto) {J ε | ν'}ᵀ)) ν:= by d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (gradFreeCurrentPotential J) ε ν = η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) ν
trans η ν ν * (Lorentz.Vector.basis.repr ((Tensorial.toTensor (M := Lorentz.Vector d)).symm
(permT id (IsReindexing.auto) {J ε | ν'}ᵀ))) ν d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (gradFreeCurrentPotential J) ε ν =
η ν ν * (Lorentz.Vector.basis.repr (Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))))) νd:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν * (Lorentz.Vector.basis.repr (Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))))) ν =
η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) ν
swap d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν * (Lorentz.Vector.basis.repr (Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))))) ν =
η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) νd:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (gradFreeCurrentPotential J) ε ν =
η ν ν * (Lorentz.Vector.basis.repr (Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))))) ν
· d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν * (Lorentz.Vector.basis.repr (Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))))) ν =
η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) ν simp [Lorentz.Vector.basis_repr_apply] All goals completed! 🐙
simp [Lorentz.Vector.basis_repr_apply] d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (gradFreeCurrentPotential J) ε ν = η ν ν * J ε ν
rw [gradFreeCurrentPotential_eq_sum_basis d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (∑ μ, η μ μ • J ε μ • Lorentz.Vector.basis μ) ν = η ν ν * J ε ν d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (∑ μ, η μ μ • J ε μ • Lorentz.Vector.basis μ) ν = η ν ν * J ε ν] d:ℕJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (∑ μ, η μ μ • J ε μ • Lorentz.Vector.basis μ) ν = η ν ν * J ε ν
simp [Lorentz.Vector.apply_sum] All goals completed! 🐙D.2. The gradient of the lagrangian density
Defined through gradLagrangian_eq_kineticTerm_sub.
lemma gradLagrangian_sum_inl_0 {𝓕 : FreeSpace}
(A : DistElectromagneticPotential d) (J : DistLorentzCurrentDensity d)
(ε : 𝓢(SpaceTime d, ℝ)) :
A.gradLagrangian 𝓕 J ε (Sum.inl 0) =
(1/(𝓕.μ₀ * 𝓕.c) * (distTimeSlice 𝓕.c).symm (Space.distSpaceDiv (A.electricField 𝓕.c)) ε)
- 𝓕.c * (distTimeSlice 𝓕.c).symm (J.chargeDensity 𝓕.c) ε := by d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)⊢ (gradLagrangian 𝓕 A J) ε (Sum.inl 0) =
1 / (𝓕.μ₀ * 𝓕.c.val) * ((distTimeSlice 𝓕.c).symm (Space.distSpaceDiv ((electricField 𝓕.c) A))) ε -
𝓕.c.val * ((distTimeSlice 𝓕.c).symm ((DistLorentzCurrentDensity.chargeDensity 𝓕.c) J)) ε
simp [gradLagrangian, gradKineticTerm_sum_inl_eq, gradFreeCurrentPotential_sum_inl_0 𝓕] All goals completed! 🐙lemma gradLagrangian_sum_inr_i {𝓕 : FreeSpace}
(A : DistElectromagneticPotential d) (J : DistLorentzCurrentDensity d)
(ε : 𝓢(SpaceTime d, ℝ)) (i : Fin d) :
A.gradLagrangian 𝓕 J ε (Sum.inr i) =
𝓕.μ₀⁻¹ * (1 / 𝓕.c ^ 2 *
(distTimeSlice 𝓕.c).symm (Space.distTimeDeriv (A.electricField 𝓕.c)) ε i -
∑ j, ((PiLp.basisFun 2 ℝ (Fin d)).tensorProduct (PiLp.basisFun 2 ℝ (Fin d))).repr
((distTimeSlice 𝓕.c).symm (Space.distSpaceDeriv j (A.magneticFieldMatrix 𝓕.c)) ε) (j, i)) +
(distTimeSlice 𝓕.c).symm (J.currentDensity 𝓕.c) ε i := by d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)i:Fin d⊢ (gradLagrangian 𝓕 A J) ε (Sum.inr i) =
𝓕.μ₀⁻¹ *
(1 / 𝓕.c.val ^ 2 * (((distTimeSlice 𝓕.c).symm (Space.distTimeDeriv ((electricField 𝓕.c) A))) ε).ofLp i -
∑ j,
(((PiLp.basisFun 2 ℝ (Fin d)).tensorProduct (PiLp.basisFun 2 ℝ (Fin d))).repr
(((distTimeSlice 𝓕.c).symm ((Space.distSpaceDeriv j) ((magneticFieldMatrix 𝓕.c) A))) ε))
(j, i)) +
(((distTimeSlice 𝓕.c).symm ((DistLorentzCurrentDensity.currentDensity 𝓕.c) J)) ε).ofLp i
simp [gradLagrangian, gradKineticTerm_sum_inr_eq, gradFreeCurrentPotential_sum_inr_i 𝓕] All goals completed! 🐙A.2.1. The lagrangian gradient as a tensor
attribute [-simp] Nat.reduceAdd Nat.reduceSucc Fin.isValue in
lemma gradLagrangian_eq_tensor {𝓕 : FreeSpace}
(A : DistElectromagneticPotential d) (J : DistLorentzCurrentDensity d)
(ε : 𝓢(SpaceTime d, ℝ)) (ν : Fin 1 ⊕ Fin d) :
A.gradLagrangian 𝓕 J ε ν =
η ν ν * ((Tensorial.toTensor (M := Lorentz.Vector d)).symm
(permT id (IsReindexing.auto) {((1/ 𝓕.μ₀ : ℝ) • (distTensorDeriv A.fieldStrength ε) | κ κ ν') +
- (J ε | ν')}ᵀ)) ν := by d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ (gradLagrangian 𝓕 A J) ε ν =
η ν ν *
Tensorial.toTensor.symm
((permT id ⋯)
((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)) +
(permT ![0] ⋯) (-Tensorial.toTensor (J ε))))
ν
rw [gradLagrangian d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ((gradKineticTerm 𝓕) A - gradFreeCurrentPotential J) ε ν =
η ν ν *
Tensorial.toTensor.symm
((permT id ⋯)
((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)) +
(permT ![0] ⋯) (-Tensorial.toTensor (J ε))))
ν d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ((gradKineticTerm 𝓕) A - gradFreeCurrentPotential J) ε ν =
η ν ν *
Tensorial.toTensor.symm
((permT id ⋯)
((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)) +
(permT ![0] ⋯) (-Tensorial.toTensor (J ε))))
ν] d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ((gradKineticTerm 𝓕) A - gradFreeCurrentPotential J) ε ν =
η ν ν *
Tensorial.toTensor.symm
((permT id ⋯)
((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)) +
(permT ![0] ⋯) (-Tensorial.toTensor (J ε))))
ν
simp only [FunLike.coe_sub, Pi.sub_apply, apply_sub, one_div,
map_smul, map_neg, map_add, permT_permT, CompTriple.comp_eq, apply_add,
apply_smul, Lorentz.Vector.neg_apply] d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ((gradKineticTerm 𝓕) A) ε ν - (gradFreeCurrentPotential J) ε ν =
η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν +
-Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν)
rw [gradKineticTerm_eq_distTensorDeriv, d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)))) ν -
(gradFreeCurrentPotential J) ε ν =
η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν +
-Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν) d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)))) ν -
η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) ν =
η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν +
-Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν) gradFreeCurrentPotential_eq_tensor J ε ν d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)))) ν -
η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) ν =
η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν +
-Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν) d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)))) ν -
η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) ν =
η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν +
-Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν)] d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((1 / 𝓕.μ₀) • (distTensorDeriv (fieldStrength A)) ε)))) ν -
η ν ν * Tensorial.toTensor.symm ((permT id ⋯) (Tensorial.toTensor (J ε))) ν =
η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν +
-Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν)
simp only [one_div, map_smul, apply_smul,
permT_id_self, LinearEquiv.symm_apply_apply] d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν) -
η ν ν * J ε ν =
η ν ν *
(𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν +
-Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν)
ring_nf d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ η ν ν * 𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν -
η ν ν * J ε ν =
η ν ν * 𝓕.μ₀⁻¹ *
Tensorial.toTensor.symm
((permT id ⋯) ((contrT 1 0 1 ⋯) (Tensorial.toTensor ((distTensorDeriv (fieldStrength A)) ε)))) ν -
η ν ν * Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν
congr e_a.e_a d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ J ε ν = Tensorial.toTensor.symm ((permT ![0] ⋯) (Tensorial.toTensor (J ε))) ν
rw [permT_congr_eq_id e_a.e_a d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ J ε ν = Tensorial.toTensor.symm (Tensorial.toTensor (J ε)) νe_a.e_a.h d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ![0] = id e_a.e_a d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ J ε ν = Tensorial.toTensor.symm (Tensorial.toTensor (J ε)) νe_a.e_a.h d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ![0] = id]e_a.e_a d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ J ε ν = Tensorial.toTensor.symm (Tensorial.toTensor (J ε)) νe_a.e_a.h d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ![0] = id
simp only [LinearEquiv.symm_apply_apply] e_a.e_a.h d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ![0] = id
funext i e_a.e_a.h d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin di:Fin (Nat.succ 0)⊢ ![0] i = id i
fin_cases i e_a.e_a.h.«_@»._internal._hyg.0.«0» d:ℕ𝓕:FreeSpaceA:DistElectromagneticPotential dJ:DistLorentzCurrentDensity dε:𝓢(SpaceTime d, ℝ)ν:Fin 1 ⊕ Fin d⊢ ![0] ((fun i => i) ⟨0, ⋯⟩) = id ((fun i => i) ⟨0, ⋯⟩)
simp All goals completed! 🐙