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.Mathematics.VariationalCalculus.HasVarAdjDeriv public import Physlib.SpaceAndTime.SpaceTime.TimeSlice public import Physlib.Mathematics.Calculus.ParametricIntegration

The Electromagnetic Potential

i. Overview

The electromagnetic potential A^μ is the fundamental objects in electromagnetism. Mathematically it is related to a connection on a U(1)-bundle.

We define the electromagnetic potential as a function from spacetime to contravariant Lorentz vectors.

ii. Key results

    ElectromagneticPotential : is the type of electromagnetic potentials.

    ElectromagneticPotential.deriv : the derivative tensor ∂_μ A^ν.

iii. Table of contents

    A. The electromagnetic potential

      A.1. Basic instances on the type of electromagnetic potentials

      A.2. Basic constructors of the electromagnetic potential

      A.3. The group action on the ElectromagneticPotential

      A.4. Differentiability

      A.5. The action on the space-time derivatives

      A.6. Variational adjoint derivative of component

      A.7. Variational adjoint derivative of derivatives of the potential

    B. The derivative tensor of the electromagnetic potential

      B.1. Equivariance of the derivative tensor

      B.2. The elements of the derivative tensor in terms of the basis

iv. References

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

    https://ph.qmul.ac.uk/sites/default/files/EMT10new.pdf

@[expose] public section

A. The electromagnetic potential

We define the electromagnetic potential as a function from spacetime to contravariant Lorentz vectors, and prove some simple results about it.

The electromagnetic potential is a tensor A^μ.

The underlying map from SpaceTime d to Lorentz.Vector d associated with an electromagnetic potential.

structure ElectromagneticPotential (d : ℕ := 3) where val : SpaceTime d → Lorentz.Vector d
attribute [-simp] Fintype.sum_sum_typeattribute [-simp] Nat.succ_eq_add_one@[ext] lemma eq_of_val_eq (A B : ElectromagneticPotential d) (h : A.val = B.val) : A = B := congrArg ElectromagneticPotential.mk h

A.1. Basic instances on the type of electromagnetic potentials

instance {d} : CoeFun (ElectromagneticPotential d) (fun _ => SpaceTime d → Lorentz.Vector d) where coe A := A.valinstance {d} : Zero (ElectromagneticPotential d) where zero := ⟨fun _ => 0⟩@[simp] lemma zero_val {d} : (0 : ElectromagneticPotential d).val = 0 := rfl@[simp] lemma zero_apply {d} (x : SpaceTime d) : (0 : ElectromagneticPotential d) x = 0 := rflinstance {d} : Add (ElectromagneticPotential d) where add A B := ⟨fun x => A x + B x⟩@[simp] lemma add_val {d} (A B : ElectromagneticPotential d) : (A + B).val = A.val + B.val := rfl@[simp] lemma add_apply {d} (A B : ElectromagneticPotential d) (x : SpaceTime d) : (A + B) x = A x + B x := d:ℕA:ElectromagneticPotential dB:ElectromagneticPotential dx:SpaceTime d⊢ (A + B).val x = A.val x + B.val x All goals completed! 🐙instance {d} : Neg (ElectromagneticPotential d) where neg A := ⟨fun x => - A x⟩@[simp] lemma neg_val {d} (A : ElectromagneticPotential d) : (- A).val = - A.val := rfl@[simp] lemma neg_apply {d} (A : ElectromagneticPotential d) (x : SpaceTime d) : (- A) x = - A x := rflinstance {d} : Sub (ElectromagneticPotential d) where sub A B := ⟨fun x => A x - B x⟩@[simp] lemma sub_val {d} (A B : ElectromagneticPotential d) : (A - B).val = A.val - B.val := rfl@[simp] lemma sub_apply {d} (A B : ElectromagneticPotential d) (x : SpaceTime d) : (A - B) x = A x - B x := rflinstance {d} : AddCommGroup (ElectromagneticPotential d) where add_assoc A B C := d:ℕA:ElectromagneticPotential dB:ElectromagneticPotential dC:ElectromagneticPotential d⊢ A + B + C = A + (B + C) d:ℕA:ElectromagneticPotential dB:ElectromagneticPotential dC:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A + B + C).val x μ = (A + (B + C)).val x μ All goals completed! 🐙 zero_add A := d:ℕA:ElectromagneticPotential d⊢ 0 + A = A d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (0 + A).val x μ = A.val x μ All goals completed! 🐙 add_zero A := d:ℕA:ElectromagneticPotential d⊢ A + 0 = A d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A + 0).val x μ = A.val x μ All goals completed! 🐙 neg_add_cancel A := d:ℕA:ElectromagneticPotential d⊢ -A + A = 0 d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (-A + A).val x μ = val 0 x μ All goals completed! 🐙 add_comm A B := d:ℕA:ElectromagneticPotential dB:ElectromagneticPotential d⊢ A + B = B + A d:ℕA:ElectromagneticPotential dB:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A + B).val x μ = (B + A).val x μ All goals completed! 🐙 nsmul := nsmulRec zsmul := zsmulRec@[simp] lemma smul_val {d} (r : ℝ) (A : ElectromagneticPotential d) : (r • A).val = r • A.val := rfl@[simp] lemma smul_apply {d} (r : ℝ) (A : ElectromagneticPotential d) (x : SpaceTime d) : (r • A) x = r • A x := d:ℕr:ℝA:ElectromagneticPotential dx:SpaceTime d⊢ (r • A).val x = r • A.val x All goals completed! 🐙

A.2. Basic constructors of the electromagnetic potential

lemma ofPotentials_eq_add {d} (c : SpeedOfLight) (ϕ : Time → Space d → ℝ) (A : Time → Space d → EuclideanSpace ℝ (Fin d)) : ofPotentials c ϕ A = ofScalarPotential c ϕ + ofVectorPotential c A := d:ℕc:SpeedOfLightϕ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)⊢ ofPotentials c ϕ A = ofScalarPotential c ϕ + ofVectorPotential c A d:ℕc:SpeedOfLightϕ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)⊢ (ofPotentials c ϕ A).val = (ofScalarPotential c ϕ + ofVectorPotential c A).val d:ℕc:SpeedOfLightϕ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)x:SpaceTime d⊢ (ofPotentials c ϕ A).val x = (ofScalarPotential c ϕ + ofVectorPotential c A).val x d:ℕc:SpeedOfLightϕ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)x:SpaceTime di:Fin 1 ⊕ Fin d⊢ (ofPotentials c ϕ A).val x i = (ofScalarPotential c ϕ + ofVectorPotential c A).val x i match i with d:ℕc:SpeedOfLightϕ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)x:SpaceTime di:Fin 1 ⊕ Fin dval✝:Fin d⊢ (ofPotentials c ϕ A).val x (Sum.inr val✝) = (ofScalarPotential c ϕ + ofVectorPotential c A).val x (Sum.inr val✝)d:ℕc:SpeedOfLightϕ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)x:SpaceTime di:Fin 1 ⊕ Fin d⊢ (ofPotentials c ϕ A).val x (Sum.inl 0) = (ofScalarPotential c ϕ + ofVectorPotential c A).val x (Sum.inl 0) All goals completed! 🐙lemma ofStaticPotentials_eq_ofPotentials {d} (c : SpeedOfLight) (ϕ : Space d → ℝ) (A : Space d → EuclideanSpace ℝ (Fin d)) : ofStaticPotentials c ϕ A = ofPotentials c (fun _ => ϕ) (fun _ => A) := d:ℕc:SpeedOfLightϕ:Space d → ℝA:Space d → EuclideanSpace ℝ (Fin d)⊢ ofStaticPotentials c ϕ A = ofPotentials c (fun x => ϕ) fun x => A All goals completed! 🐙TODO "Write lemmas for the various properties (e.g. the electric field) of the electromagnetic potential from the various constructors."

A.3. The group action on the ElectromagneticPotential

lemma action_val {d} (Λ : LorentzGroup d) (A : ElectromagneticPotential d) : (Λ • A).val = fun x => Λ • A (Λ⁻¹ • x) := rfl@[simp] lemma action_apply {d} (Λ : LorentzGroup d) (A : ElectromagneticPotential d) (x : SpaceTime d) : (Λ • A) x = Λ • A (Λ⁻¹ • x) := rfl

A.4. Differentiability

We show that the components of field strength tensor are differentiable if the potential is.

@[fun_prop] lemma differentiable_component {d : ℕ} (A : ElectromagneticPotential d) (hA : Differentiable ℝ A) (μ : Fin 1 ⊕ Fin d) : Differentiable ℝ (fun x => A x μ) := d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => A.val x μ All goals completed! 🐙@[fun_prop] lemma differentiable_action {d} (Λ : LorentzGroup d) (A : ElectromagneticPotential d) (hA : Differentiable ℝ A) : Differentiable ℝ (fun x => Λ • A (Λ⁻¹ • x)) := d:ℕΛ:↑(LorentzGroup d)A:ElectromagneticPotential dhA:Differentiable ℝ A.val⊢ Differentiable ℝ fun x => Λ • A.val (Λ⁻¹ • x) All goals completed! 🐙@[fun_prop] lemma contDiff_action {d} (Λ : LorentzGroup d) (A : ElectromagneticPotential d) (hA : ContDiff ℝ n A) : ContDiff ℝ n (fun x => Λ • A (Λ⁻¹ • x)) := n:ℕ∞ωd:ℕΛ:↑(LorentzGroup d)A:ElectromagneticPotential dhA:ContDiff ℝ n A.val⊢ ContDiff ℝ n fun x => Λ • A.val (Λ⁻¹ • x) All goals completed! 🐙d:ℕA:ElectromagneticPotential dhA:ContDiff ℝ 2 A.valμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh:∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Lorentz.Vector.basis μ) ν⊢ Differentiable ℝ fun x => ∂_ μ A.val x ν All goals completed! 🐙@[fun_prop] lemma differentiable_deriv_of_smooth {d} {A : ElectromagneticPotential d} (hA : ContDiff ℝ ∞ A) (μ ν : Fin 1 ⊕ Fin d) : Differentiable ℝ (fun x => ∂_ μ A x ν) := d:ℕA:ElectromagneticPotential dhA:ContDiff ℝ ∞ A.valμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => ∂_ μ A.val x ν All goals completed! 🐙n:ℕ∞ωd:ℕA:ElectromagneticPotential dhA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh:∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Lorentz.Vector.basis μ) ν⊢ ContDiff ℝ n fun x => ∂_ μ A.val x ν All goals completed! 🐙TODO "Add results related to the differentiability of the derivative of the Electromagnetic potential."

A.5. Differentiablity in terms of constructors

d:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:Differentiable ℝ ↿φ⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => match ν with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0 d:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:Differentiable ℝ ↿φμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => match μ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0 match μ with d:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:Differentiable ℝ ↿φμ:Fin 1 ⊕ Fin dval✝:Fin d⊢ Differentiable ℝ fun x => match Sum.inr val✝ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0d:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:Differentiable ℝ ↿φμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => match Sum.inl 0 with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0 All goals completed! 🐙n:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:ContDiff ℝ n ↿φ⊢ ∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => match ν with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0 n:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:ContDiff ℝ n ↿φμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => match μ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0 match μ with n:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:ContDiff ℝ n ↿φμ:Fin 1 ⊕ Fin dval✝:Fin d⊢ ContDiff ℝ n fun x => match Sum.inr val✝ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0n:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝhϕ:ContDiff ℝ n ↿φμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => match Sum.inl 0 with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr val => 0 All goals completed! 🐙d:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:Differentiable ℝ ↿A⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => match ν with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp i d:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:Differentiable ℝ ↿Aμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => match μ with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp i match μ with d:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:Differentiable ℝ ↿Aμ:Fin 1 ⊕ Fin dval✝:Fin d⊢ Differentiable ℝ fun x => match Sum.inr val✝ with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp id:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:Differentiable ℝ ↿Aμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => match Sum.inl 0 with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp i All goals completed! 🐙n:ℕ∞ωd:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:ContDiff ℝ n ↿A⊢ ∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => match ν with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp i n:ℕ∞ωd:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:ContDiff ℝ n ↿Aμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => match μ with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp i match μ with n:ℕ∞ωd:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:ContDiff ℝ n ↿Aμ:Fin 1 ⊕ Fin dval✝:Fin d⊢ ContDiff ℝ n fun x => match Sum.inr val✝ with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp in:ℕ∞ωd:ℕc:SpeedOfLightA:Time → Space d → EuclideanSpace ℝ (Fin d)hA:ContDiff ℝ n ↿Aμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => match Sum.inl 0 with | Sum.inl 0 => 0 | Sum.inr i => ((timeSlice c).symm A x).ofLp i All goals completed! 🐙d:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:Differentiable ℝ ↿φhA:Differentiable ℝ ↿A⊢ ∀ (ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => match ν with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp i d:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:Differentiable ℝ ↿φhA:Differentiable ℝ ↿Aμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => match μ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp i match μ with d:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:Differentiable ℝ ↿φhA:Differentiable ℝ ↿Aμ:Fin 1 ⊕ Fin dval✝:Fin d⊢ Differentiable ℝ fun x => match Sum.inr val✝ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp id:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:Differentiable ℝ ↿φhA:Differentiable ℝ ↿Aμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => match Sum.inl 0 with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp i All goals completed! 🐙n:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:ContDiff ℝ n ↿φhA:ContDiff ℝ n ↿A⊢ ∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => match ν with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp i n:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:ContDiff ℝ n ↿φhA:ContDiff ℝ n ↿Aμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => match μ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp i match μ with n:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:ContDiff ℝ n ↿φhA:ContDiff ℝ n ↿Aμ:Fin 1 ⊕ Fin dval✝:Fin d⊢ ContDiff ℝ n fun x => match Sum.inr val✝ with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp in:ℕ∞ωd:ℕc:SpeedOfLightφ:Time → Space d → ℝA:Time → Space d → EuclideanSpace ℝ (Fin d)hϕ:ContDiff ℝ n ↿φhA:ContDiff ℝ n ↿Aμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => match Sum.inl 0 with | Sum.inl 0 => (timeSlice c).symm φ x / c.val | Sum.inr i => ((timeSlice c).symm A x).ofLp i All goals completed! 🐙

A.5. The action on the space-time derivatives

Given a ElectromagneticPotential A^μ, we can consider its derivative ∂_μ A^ν. Under a Lorentz transformation Λ, this transforms as ∂_ μ (Λ • A), we write an expression for this in terms of the tensor. ∂_ ρ A (Λ⁻¹ • x) κ.

d:ℕμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dx:SpaceTime dΛ:↑(LorentzGroup d)A:ElectromagneticPotential dhA:Differentiable ℝ A.valρ:Fin 1 ⊕ Fin dx✝:ρ ∈ Finset.univ⊢ ∑ i, ↑Λ⁻¹ ρ μ * (↑Λ ν i * ∂_ ρ A.val (Λ⁻¹ • x) i) = ∑ x_1, ↑Λ ν x_1 * ↑Λ⁻¹ ρ μ * ∂_ ρ A.val (Λ⁻¹ • x) x_1 d:ℕμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dx:SpaceTime dΛ:↑(LorentzGroup d)A:ElectromagneticPotential dhA:Differentiable ℝ A.valρ:Fin 1 ⊕ Fin dx✝¹:ρ ∈ Finset.univκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ↑Λ⁻¹ ρ μ * (↑Λ ν κ * ∂_ ρ A.val (Λ⁻¹ • x) κ) = ↑Λ ν κ * ↑Λ⁻¹ ρ μ * ∂_ ρ A.val (Λ⁻¹ • x) κ All goals completed! 🐙

A.6. Variational adjoint derivative of component

We find the variational adjoint derivative of the components of the potential. This will be used to find e.g. the variational derivative of the kinetic term, and derive the equations of motion.

lemma hasVarAdjDerivAt_component {d : ℕ} (μ : Fin 1 ⊕ Fin d) (A : SpaceTime d → Lorentz.Vector d) (hA : ContDiff ℝ ∞ A) : HasVarAdjDerivAt (fun (A' : SpaceTime d → Lorentz.Vector d) x => A' x μ) (fun (A' : SpaceTime d → ℝ) x => A' x • Lorentz.Vector.basis μ) A := d:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ A⊢ HasVarAdjDerivAt (fun A' x => A' x μ) (fun A' x => A' x • Lorentz.Vector.basis μ) A d:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μ⊢ HasVarAdjDerivAt (fun A' x => A' x μ) (fun A' x => A' x • Lorentz.Vector.basis μ) A d:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μ⊢ HasVarAdjDerivAt (fun A' x => A' x μ) (fun A' x => A' x • Lorentz.Vector.basis μ) A d:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μ⊢ HasVarAdjDerivAt (fun A' x => f x (A' x)) (fun ψ x => f' x (A x) (ψ x)) A d:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μ⊢ ContDiff ℝ ∞ Ad:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μ⊢ ContDiff ℝ ∞ ↿fd:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μ⊢ ∀ (x : SpaceTime d) (u : Lorentz.Vector d), HasAdjFDerivAt ℝ (f x) (f' x u) u d:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μ⊢ ContDiff ℝ ∞ A All goals completed! 🐙 d:ℕμ:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μ⊢ ContDiff ℝ ∞ ↿f All goals completed! 🐙 d:ℕμ:Fin 1 ⊕ Fin dA✝:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μx:SpaceTime dA:Lorentz.Vector d⊢ HasAdjFDerivAt ℝ (f x) (f' x A) A d:ℕμ:Fin 1 ⊕ Fin dA✝:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μx:SpaceTime dA:Lorentz.Vector d⊢ DifferentiableAt ℝ (f x) Ad:ℕμ:Fin 1 ⊕ Fin dA✝:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μx:SpaceTime dA:Lorentz.Vector d⊢ HasAdjoint ℝ (⇑(fderiv ℝ (f x) A)) (f' x A) d:ℕμ:Fin 1 ⊕ Fin dA✝:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μx:SpaceTime dA:Lorentz.Vector d⊢ DifferentiableAt ℝ (f x) A All goals completed! 🐙 d:ℕμ:Fin 1 ⊕ Fin dA✝:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μx:SpaceTime dA:Lorentz.Vector d⊢ ∀ (x_1 : Lorentz.Vector d) (y : ℝ), Inner.inner ℝ (f' x A y) x_1 = Inner.inner ℝ y ((fderiv ℝ (f x) A) x_1) d:ℕμ:Fin 1 ⊕ Fin dA✝:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μx:SpaceTime dA:Lorentz.Vector du:Lorentz.Vector dv:ℝ⊢ Inner.inner ℝ (f' x A v) u = Inner.inner ℝ v ((fderiv ℝ (f x) A) u) d:ℕμ:Fin 1 ⊕ Fin dA✝:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Af:SpaceTime d → Lorentz.Vector d → ℝ := fun x v => v μf':SpaceTime d → Lorentz.Vector d → ℝ → Lorentz.Vector d := fun x x_1 c => c • Lorentz.Vector.basis μx:SpaceTime dA:Lorentz.Vector du:Lorentz.Vector dv:ℝ⊢ v * u μ = u μ * v All goals completed! 🐙

A.7. Variational adjoint derivative of derivatives of the potential

We find the variational adjoint derivative of the derivatives of the components of the potential. This will again be used to find the variational derivative of the kinetic term, and derive the equations of motion (Maxwell's equations).

d:ℕμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Ah0':HasVarAdjDerivAt (fun φ x => (fderiv ℝ (fun x => φ x ν) x) (Lorentz.Vector.basis μ)) (fun ψ x => (fun x' => -(fderiv ℝ ψ x') (Lorentz.Vector.basis μ)) x • Lorentz.Vector.basis ν) Aφ:SpaceTime d → Lorentz.Vector dhφ:ContDiff ℝ ∞ φx:SpaceTime d⊢ Differentiable ℝ φ exact hφ.differentiable (d:ℕμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dA:SpaceTime d → Lorentz.Vector dhA:ContDiff ℝ ∞ Ah0':HasVarAdjDerivAt (fun φ x => (fderiv ℝ (fun x => φ x ν) x) (Lorentz.Vector.basis μ)) (fun ψ x => (fun x' => -(fderiv ℝ ψ x') (Lorentz.Vector.basis μ)) x • Lorentz.Vector.basis ν) Aφ:SpaceTime d → Lorentz.Vector dhφ:ContDiff ℝ ∞ φx:SpaceTime d⊢ ∞ ≠ 0 All goals completed! 🐙)

B. The derivative tensor of the electromagnetic potential

We define the derivative as a tensor in Lorentz.CoVector ⊗[ℝ] Lorentz.Vector for the electromagnetic potential A^μ. We then prove that this tensor transforms correctly under Lorentz transformations.

d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime de:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)μ:Fin 1 ⊕ Fin dx✝¹:μ ∈ Finset.univν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ Tensorial.toTensor.symm ((basis ![Color.down]) (Lorentz.CoVector.indexEquiv.symm μ)) ⊗ₜ[ℝ] Tensorial.toTensor.symm ((basis ![Color.up]) (Lorentz.Vector.indexEquiv.symm ν)) = ((((basis ![Color.down]).map Tensorial.toTensor.symm).tensorProduct ((basis ![Color.up]).map Tensorial.toTensor.symm)).reindex ComponentIdx.prod.symm) (e.symm (μ, ν)) All goals completed! 🐙

B.1. Equivariance of the derivative tensor

We show that the derivative tensor is equivariant under the action of the Lorentz group. That is, ∂_μ (fun x => Λ • A (Λ⁻¹ • x)) = Λ • (∂_μ A (Λ⁻¹ • x)), or in words: applying the Lorentz transformation to the potential and then taking the derivative is the same as taking the derivative and then applying the Lorentz transformation to the resulting tensor.

d:ℕx:SpaceTime dA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.val⊢ Differentiable ℝ A.vald:ℕx:SpaceTime dA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.val⊢ Differentiable ℝ A.vald:ℕx:SpaceTime dA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.val⊢ Differentiable ℝ (Λ • A).val all_goals All goals completed! 🐙

B.2. The elements of the derivative tensor in terms of the basis

We show that in the standard basis, the elements of the derivative tensor are just equal to ∂_ μ A x ν.

Evaluation of the tensor components of ∂_ μ A x ν.

d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex e⊢ ((match Fin.append ![Color.down] ![Color.up] 0 with | Color.up => Lorentz.contrBasis d | Color.down => Lorentz.coBasis d).repr (Pure.basisVector (Fin.append ![Color.down] ![Color.up]) b 0)) μ * ((Lorentz.contrBasis d).repr ((Lorentz.contrBasis d) (b 1))) ν = ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (toTensor.symm (Pure.basisVector (Fin.append ![Color.down] ![Color.up]) b).toTensor)) (μ, ν) d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex e⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0 d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:b 0 = μ⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:¬b 0 = μ⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0 d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:b 0 = μ⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:¬b 0 = μ⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0 d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:¬b 0 = μhν:b 1 = ν⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:¬b 0 = μhν:¬b 1 = ν⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0 d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:b 0 = μhν:b 1 = ν⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:b 0 = μhν:¬b 1 = ν⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:¬b 0 = μhν:b 1 = ν⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:ComponentIdx (Fin.append ![Color.down] ![Color.up])e:ComponentIdx (Fin.append ![Color.down] ![Color.up]) ≃ (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d) := ComponentIdx.prod.trans (Lorentz.CoVector.indexEquiv.prodCongr Lorentz.Vector.indexEquiv)h1:Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis = ((basis (Fin.append ![Color.down] ![Color.up])).map toTensor.symm).reindex ehμ:¬b 0 = μhν:¬b 1 = ν⊢ (if b 1 = ν then if b 0 = μ then 1 else 0 else 0) = if b = e.symm (μ, ν) then 1 else 0 All goals completed! 🐙 d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (toTensor.symm 0)))) = ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (toTensor.symm 0)) (μ, ν) All goals completed! 🐙 d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin da:ℝt:(realLorentzTensor d).Tensor (Fin.append ![Color.down] ![Color.up])h:toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (toTensor.symm t)))) = ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (toTensor.symm t)) (μ, ν)⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (toTensor.symm (a • t))))) = ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (toTensor.symm (a • t))) (μ, ν) All goals completed! 🐙 d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dt1:(realLorentzTensor d).Tensor (Fin.append ![Color.down] ![Color.up])t2:(realLorentzTensor d).Tensor (Fin.append ![Color.down] ![Color.up])h1:toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (toTensor.symm t1)))) = ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (toTensor.symm t1)) (μ, ν)h2:toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (toTensor.symm t2)))) = ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (toTensor.symm t2)) (μ, ν)⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (toTensor.symm (t1 + t2))))) = ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (toTensor.symm (t1 + t2))) (μ, ν) All goals completed! 🐙
@[simp] lemma deriv_basis_repr_apply {d} {μν : (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)} (A : ElectromagneticPotential d) (x : SpaceTime d) : (Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (deriv A x) μν = ∂_ μν.1 A x μν.2 := d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime d⊢ ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (A.deriv x)) μν = ∂_ μν.1 A.val x μν.2 d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (A.deriv x)) (μ, ν) = ∂_ (μ, ν).1 A.val x (μ, ν).2 All goals completed! 🐙d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.down] ![Color.up])hb:(Lorentz.CoVector.basis.reindex Lorentz.CoVector.indexEquiv.symm).tensorProduct (Lorentz.Vector.basis.reindex Lorentz.Vector.indexEquiv.symm) = (Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).reindex (Lorentz.CoVector.indexEquiv.symm.prodCongr Lorentz.Vector.indexEquiv.symm)⊢ ∂_ ((Lorentz.CoVector.indexEquiv.symm.prodCongr Lorentz.Vector.indexEquiv.symm).symm (ComponentIdx.prod b)).1 A.val x ((Lorentz.CoVector.indexEquiv.symm.prodCongr Lorentz.Vector.indexEquiv.symm).symm (ComponentIdx.prod b)).2 = ∂_ (b 0) A.val x (b 1) All goals completed! 🐙