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.MagneticField public import Physlib.Electromagnetism.Dynamics.Basic public import Physlib.Mathematics.VariationalCalculus.HasVarGradient

The kinetic term

i. Overview

The kinetic term of the electromagnetic field is - 1/(4 μ₀) F_μν F^μν. We define this, show it is invariant under Lorentz transformations, and show properties of its variational gradient.

In particular the variational gradient gradKineticTerm of the kinetic term is directly related to Gauss's law and the Ampere law.

In this implementation we have set μ₀ = 1. It is a TODO to introduce this constant.

ii. Key results

    DistElectromagneticPotential.gradKineticTerm is the variational gradient of the kinetic term for distributional electromagnetic potentials.

iii. Table of contents

    A. The gradient of the kinetic term for distributions

      A.1. The gradient of the kinetic term as a tensor

iv. References

    https://quantummechanics.ucsd.edu/ph130a/130_notes/node452.html

@[expose] public section

A. The gradient of the kinetic term for distributions

For distributions we define the gradient of the kinetic term directly using ElectromagneticPotential.gradKineticTerm_eq_sum_sum as the defining formula.

attribute [-simp] Fintype.sum_sum_typeattribute [-simp] Nat.succ_eq_add_onelemma gradKineticTerm_eq_sum_sum {d} {𝓕 : FreeSpace} (A : DistElectromagneticPotential d) (ε : 𝓢(SpaceTime d, )) : A.gradKineticTerm 𝓕 ε = ν, μ, (1 / (𝓕.μ₀) * (η μ μ * η ν ν * distDeriv μ (distDeriv μ A) ε ν - distDeriv μ (distDeriv ν A) ε μ)) Lorentz.Vector.basis ν := rfld:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝:ν Finset.univ i, (η i i * η ν ν * ((distDeriv i) ((distDeriv i) A)) ε ν - ((distDeriv i) ((distDeriv ν) A)) ε i) = i, η ν ν * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv i) (fieldStrength A)) ε)) (i, ν) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univη μ μ * η ν ν * ((distDeriv μ) ((distDeriv μ) A)) ε ν - ((distDeriv μ) ((distDeriv ν) A)) ε μ = η ν ν * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv μ) (fieldStrength A)) ε)) (μ, ν) conv_rhs => d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univ| η ν ν * (-(Vector.basis.tensorProduct Vector.basis).repr ((fieldStrength A) ((SchwartzMap.evalCLM (SpaceTime d) (Vector.basis μ)) ((fderivCLM (SpaceTime d) ) ε)))) (μ, ν) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univ| -(η ν ν * ((Vector.basis.tensorProduct Vector.basis).repr ((fieldStrength A) ((SchwartzMap.evalCLM (SpaceTime d) (Vector.basis μ)) ((fderivCLM (SpaceTime d) ) ε)))) (μ, ν)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univ| -(η ν ν * (η (μ, ν).1 (μ, ν).1 * ((distDeriv (μ, ν).1) A) ((SchwartzMap.evalCLM (SpaceTime d) (Vector.basis μ)) ((fderivCLM (SpaceTime d) ) ε)) (μ, ν).2 - η (μ, ν).2 (μ, ν).2 * ((distDeriv (μ, ν).2) A) ((SchwartzMap.evalCLM (SpaceTime d) (Vector.basis μ)) ((fderivCLM (SpaceTime d) ) ε)) (μ, ν).1)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univ| -(η ν ν * (η μ μ * ((distDeriv μ) A) ((SchwartzMap.evalCLM (SpaceTime d) (Vector.basis μ)) ((fderivCLM (SpaceTime d) ) ε)) ν - η ν ν * ((distDeriv ν) A) ((SchwartzMap.evalCLM (SpaceTime d) (Vector.basis μ)) ((fderivCLM (SpaceTime d) ) ε)) μ)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univ| -(η ν ν * (η μ μ * (-((distDeriv μ) ((distDeriv μ) A)) ε) ν - η ν ν * (-((distDeriv μ) ((distDeriv ν) A)) ε) μ)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univ| -(η ν ν * (-(η μ μ * ((distDeriv μ) ((distDeriv μ) A)) ε ν) + η ν ν * ((distDeriv μ) ((distDeriv ν) A)) ε μ)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dx✝¹:ν Finset.univμ:Fin 1 Fin dx✝:μ Finset.univη μ μ * η ν ν * ((distDeriv μ) ((distDeriv μ) A)) ε ν - ((distDeriv μ) ((distDeriv ν) A)) ε μ = η μ μ * η ν ν * ((distDeriv μ) ((distDeriv μ) A)) ε ν - η ν ν ^ 2 * ((distDeriv μ) ((distDeriv ν) A)) ε μ All goals completed! 🐙d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ𝓕.μ₀⁻¹ * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inr ν)) (fieldStrength A)) ε)) (Sum.inr ν, Sum.inl 0) = 𝓕.c.val⁻¹ * 𝓕.μ₀⁻¹ * (((distTimeSlice 𝓕.c).symm ((Space.distSpaceDeriv ν) ((electricField 𝓕.c) A))) ε).ofLp ν conv_rhs => d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| (((distTimeSlice 𝓕.c).symm ((Space.distSpaceDeriv ν) ((electricField 𝓕.c) A))) ε).ofLp ν d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| (-((electricField 𝓕.c) A) ((SchwartzMap.evalCLM (Time × Space d) (0, Space.basis ν)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε)))).ofLp ν d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| -(((electricField 𝓕.c) A) ((SchwartzMap.evalCLM (Time × Space d) (0, Space.basis ν)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε)))).ofLp ν d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| -(-𝓕.c.val * ((Vector.basis.tensorProduct Vector.basis).repr ((fieldStrength A) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c)) ((SchwartzMap.evalCLM (Time × Space d) (0, Space.basis ν)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε)))))) (Sum.inl 0, Sum.inr ν)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| 𝓕.c.val * ((Vector.basis.tensorProduct Vector.basis).repr ((fieldStrength A) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c)) ((SchwartzMap.evalCLM (Time × Space d) (0, Space.basis ν)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε)))))) (Sum.inl 0, Sum.inr ν) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| 𝓕.c.val * -((Vector.basis.tensorProduct Vector.basis).repr ((fieldStrength A) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c)) ((SchwartzMap.evalCLM (Time × Space d) (0, Space.basis ν)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε)))))) (Sum.inr ν, Sum.inl 0) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| 𝓕.c.val * -((Vector.basis.tensorProduct Vector.basis).repr (-((distTimeSlice 𝓕.c).symm ((distTimeSlice 𝓕.c) ((distDeriv (Sum.inr ν)) (fieldStrength A)))) ε)) (Sum.inr ν, Sum.inl 0) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin dx✝:ν Finset.univ| 𝓕.c.val * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inr ν)) (fieldStrength A)) ε)) (Sum.inr ν, Sum.inl 0) All goals completed! 🐙lemma gradKineticTerm_sum_inr_eq {d} {𝓕 : FreeSpace} (A : DistElectromagneticPotential d) (ε : 𝓢(SpaceTime d, )) (i : Fin d) : A.gradKineticTerm 𝓕 ε (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))) := d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d((gradKineticTerm 𝓕) A) ε (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)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d-(𝓕.μ₀⁻¹ * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inl 0)) (fieldStrength A)) ε)) (Sum.inl 0, Sum.inr i)) + -(𝓕.μ₀⁻¹ * a₂, ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inr a₂)) (fieldStrength A)) ε)) (Sum.inr a₂, Sum.inr i)) = 𝓕.μ₀⁻¹ * ((𝓕.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)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d-(𝓕.μ₀⁻¹ * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inl 0)) (fieldStrength A)) ε)) (Sum.inl 0, Sum.inr i)) = 𝓕.μ₀⁻¹ * ((𝓕.c.val ^ 2)⁻¹ * (((distTimeSlice 𝓕.c).symm (Space.distTimeDeriv ((electricField 𝓕.c) A))) ε).ofLp i)d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d(fun a₂ => ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inr a₂)) (fieldStrength A)) ε)) (Sum.inr a₂, Sum.inr i)) = fun j => (((PiLp.basisFun 2 (Fin d)).tensorProduct (PiLp.basisFun 2 (Fin d))).repr (((distTimeSlice 𝓕.c).symm ((Space.distSpaceDeriv j) ((magneticFieldMatrix 𝓕.c) A))) ε)) (j, i) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d-(𝓕.μ₀⁻¹ * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inl 0)) (fieldStrength A)) ε)) (Sum.inl 0, Sum.inr i)) = 𝓕.μ₀⁻¹ * ((𝓕.c.val ^ 2)⁻¹ * (((distTimeSlice 𝓕.c).symm (Space.distTimeDeriv ((electricField 𝓕.c) A))) ε).ofLp i) conv_rhs => d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d| (((distTimeSlice 𝓕.c).symm (Space.distTimeDeriv ((electricField 𝓕.c) A))) ε).ofLp i d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d| (-((electricField 𝓕.c) A) ((SchwartzMap.evalCLM (Time × Space d) (1, 0)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε)))).ofLp i d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d| -(((electricField 𝓕.c) A) ((SchwartzMap.evalCLM (Time × Space d) (1, 0)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε)))).ofLp i d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d| -(-𝓕.c.val * ((Vector.basis.tensorProduct Vector.basis).repr (-((distTimeSlice 𝓕.c).symm (Space.distTimeDeriv ((distTimeSlice 𝓕.c) (fieldStrength A)))) ε)) (Sum.inl 0, Sum.inr i)) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d| -(𝓕.c.val * (𝓕.c.val * ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inl 0)) (fieldStrength A)) ε)) (Sum.inl 0, Sum.inr i))) All goals completed! 🐙 d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin d(fun a₂ => ((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inr a₂)) (fieldStrength A)) ε)) (Sum.inr a₂, Sum.inr i)) = fun j => (((PiLp.basisFun 2 (Fin d)).tensorProduct (PiLp.basisFun 2 (Fin d))).repr (((distTimeSlice 𝓕.c).symm ((Space.distSpaceDeriv j) ((magneticFieldMatrix 𝓕.c) A))) ε)) (j, i) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin dk:Fin d((Vector.basis.tensorProduct Vector.basis).repr (((distDeriv (Sum.inr k)) (fieldStrength A)) ε)) (Sum.inr k, Sum.inr i) = (((PiLp.basisFun 2 (Fin d)).tensorProduct (PiLp.basisFun 2 (Fin d))).repr (((distTimeSlice 𝓕.c).symm ((Space.distSpaceDeriv k) ((magneticFieldMatrix 𝓕.c) A))) ε)) (k, i) conv_rhs => d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin dk:Fin d| (((PiLp.basisFun 2 (Fin d)).tensorProduct (PiLp.basisFun 2 (Fin d))).repr (-((magneticFieldMatrix 𝓕.c) A) ((SchwartzMap.evalCLM (Time × Space d) (0, Space.basis k)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε))))) (k, i) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin dk:Fin d| -(((PiLp.basisFun 2 (Fin d)).tensorProduct (PiLp.basisFun 2 (Fin d))).repr (((magneticFieldMatrix 𝓕.c) A) ((SchwartzMap.evalCLM (Time × Space d) (0, Space.basis k)) ((fderivCLM (Time × Space d) ) ((compCLMOfContinuousLinearEquiv (toTimeAndSpace 𝓕.c).symm) ε))))) (k, i) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )i:Fin dk:Fin d| -((Vector.basis.tensorProduct Vector.basis).repr (-((distTimeSlice 𝓕.c).symm ((Space.distSpaceDeriv k) ((distTimeSlice 𝓕.c) (fieldStrength A)))) ε)) (Sum.inr k, Sum.inr i) All goals completed! 🐙

A.1. The gradient of the kinetic term as a tensor

d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univt:TensorProduct (Lorentz.Vector d) (Lorentz.Vector d)hb:(Vector.basis.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm) = (Vector.basis.tensorProduct Vector.basis).reindex (Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm)((Vector.basis.tensorProduct Vector.basis).repr t) (μ, ν) = ((Vector.basis.tensorProduct Vector.basis).repr t) ((Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm).symm (ComponentIdx.prod fun x => match x with | 0 => μ | 1 => ν)) All goals completed! 🐙 d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ((basis (Fin.append ![Color.up] ![Color.up])).repr (Tensorial.toTensor (((distDeriv μ) (fieldStrength A)) ε))) = ((basis (Fin.append ![Color.up] ![Color.up])).repr (Tensorial.toTensor (((distDeriv (CoVector.indexEquiv (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).1)) (fieldStrength A)) ε)))d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ(fun x => match x with | 0 => μ | 1 => ν) = (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).2 d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ((basis (Fin.append ![Color.up] ![Color.up])).repr (Tensorial.toTensor (((distDeriv μ) (fieldStrength A)) ε))) = ((basis (Fin.append ![Color.up] ![Color.up])).repr (Tensorial.toTensor (((distDeriv (CoVector.indexEquiv (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).1)) (fieldStrength A)) ε))) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ((distDeriv μ) (fieldStrength A)) ε = ((distDeriv (CoVector.indexEquiv (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).1)) (fieldStrength A)) ε All goals completed! 🐙 d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univx:Fin (Nat.succ 0 + Nat.succ 0)(match x with | 0 => μ | 1 => ν) = (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).2 x d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ(match (fun i => i) 0, with | 0 => μ | 1 => ν) = (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).2 ((fun i => i) 0, )d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ(match (fun i => i) 1, with | 0 => μ | 1 => ν) = (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).2 ((fun i => i) 1, ) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ(match (fun i => i) 0, with | 0 => μ | 1 => ν) = (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).2 ((fun i => i) 0, )d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ(match (fun i => i) 1, with | 0 => μ | 1 => ν) = (ComponentIdx.prod ((ComponentIdx.DropPairSection.ofFinEquiv fun i => (basisIdxCongr ) (Vector.indexEquiv.symm ν (IsReindexing.inv id i))) (μ, μ))).2 ((fun i => i) 1, ) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univν = if h : Fin.natAdd (Nat.succ 0) 1 = 0 then μ else if h : Fin.natAdd (Nat.succ 0) 1 = 1 then μ else Vector.indexEquiv.symm ν (IsReindexing.inv id (Fin.predPredAbove 0 1 (Fin.natAdd (Nat.succ 0) 1) )) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univ (h : ¬Fin.natAdd (Nat.succ 0) 0 = 0) (h_1 : ¬Fin.natAdd (Nat.succ 0) 0 = 1), μ = Vector.indexEquiv.symm ν (IsReindexing.inv id (Fin.predPredAbove 0 1 (Fin.natAdd (Nat.succ 0) 0) )) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh✝:¬Fin.natAdd (Nat.succ 0) 0 = 0h:¬Fin.natAdd (Nat.succ 0) 0 = 1μ = Vector.indexEquiv.symm ν (IsReindexing.inv id (Fin.predPredAbove 0 1 (Fin.natAdd (Nat.succ 0) 0) )) exact absurd (d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh✝:¬Fin.natAdd (Nat.succ 0) 0 = 0h:¬Fin.natAdd (Nat.succ 0) 0 = 1Fin.natAdd (Nat.succ 0) 0 = 1 All goals completed! 🐙) h d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univν = if h : Fin.natAdd (Nat.succ 0) 1 = 0 then μ else if h : Fin.natAdd (Nat.succ 0) 1 = 1 then μ else Vector.indexEquiv.symm ν (IsReindexing.inv id (Fin.predPredAbove 0 1 (Fin.natAdd (Nat.succ 0) 1) )) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:Fin.natAdd (Nat.succ 0) 1 = 0ν = μd:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:¬Fin.natAdd (Nat.succ 0) 1 = 0h2:Fin.natAdd (Nat.succ 0) 1 = 1ν = μd:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:¬Fin.natAdd (Nat.succ 0) 1 = 0h2:¬Fin.natAdd (Nat.succ 0) 1 = 1ν = Vector.indexEquiv.symm ν (IsReindexing.inv id (Fin.predPredAbove 0 1 (Fin.natAdd (Nat.succ 0) 1) )) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:Fin.natAdd (Nat.succ 0) 1 = 0ν = μ exact absurd h1 (d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:Fin.natAdd (Nat.succ 0) 1 = 0¬Fin.natAdd (Nat.succ 0) 1 = 0 All goals completed! 🐙) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:¬Fin.natAdd (Nat.succ 0) 1 = 0h2:Fin.natAdd (Nat.succ 0) 1 = 1ν = μ exact absurd h2 (d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:¬Fin.natAdd (Nat.succ 0) 1 = 0h2:Fin.natAdd (Nat.succ 0) 1 = 1¬Fin.natAdd (Nat.succ 0) 1 = 1 All goals completed! 🐙) d:𝓕:FreeSpaceA:DistElectromagneticPotential dε:𝓢(SpaceTime d, )ν:Fin 1 Fin dμ:Fin 1 Fin dx✝:μ Finset.univh1:¬Fin.natAdd (Nat.succ 0) 1 = 0h2:¬Fin.natAdd (Nat.succ 0) 1 = 1ν = Vector.indexEquiv.symm ν (IsReindexing.inv id (Fin.predPredAbove 0 1 (Fin.natAdd (Nat.succ 0) 1) )) All goals completed! 🐙