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.Dynamics.IsExtrema

The constant electric and magnetic fields

i. Overview

In this module we define the electromagnetic potential which gives rise to a given constant electric and magnetic field matrix.

We will show that this electromagnetic potential is an extrema of the free-space electromagnetic action.

ii. Key results

iii. Table of contents

    A. The definition of the potential

    B. Smoothness of the potential

    C. The scalar potential

    D. The vector potential

      D.1. Time derivative of the vector potential

      D.2. Space derivative of the vector potential

    E. The electric field

    F. The magnetic field

    G. Is extrema

iv. References

@[expose] public sectionattribute [-simp] Fintype.sum_sum_typeattribute [-simp] Nat.succ_eq_add_one

A. The definition of the potential

The electromagnetic potential which gives rise to a constant electric field E₀ and a constant magnetic field matrix B₀.

set_option linter.unusedVariables false

An electric potential which gives a given constant E-field and B-field.

@[nolint unusedArguments] noncomputable def constantEB {d : ℕ} (c : SpeedOfLight) (E₀ : EuclideanSpace ℝ (Fin d)) (B₀ : Fin d × Fin d → ℝ) (B₀_antisymm : ∀ i j, B₀ (i, j) = - B₀ (j, i)) : ElectromagneticPotential d where val := fun x μ => match μ with | Sum.inl _ => - (1/c) * ⟪E₀, Space.basis.repr x.space⟫_ℝ | Sum.inr i => (1/2) * ∑ j, B₀ (i, j) * x.space j

B. Smoothness of the potential

The potential is smooth.

d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ ∀ (i : Fin 1 ⊕ Fin d), ContDiff ℝ ∞ fun x => (constantEB c E₀ B₀ B₀_antisymm).val x i d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ ∞ fun x => (constantEB c E₀ B₀ B₀_antisymm).val x μ match μ with d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => (constantEB c E₀ B₀ B₀_antisymm).val x (Sum.inl val✝) d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => -(c.val⁻¹ * ⟪E₀, Space.basis.repr (space x)⟫_ℝ) d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => c.val⁻¹ * ⟪E₀, Space.basis.repr (space x)⟫_ℝ d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => c.val⁻¹d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => ⟪E₀, Space.basis.repr (space x)⟫_ℝ d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => c.val⁻¹ All goals completed! 🐙 d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => E₀d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => Space.basis.repr (space x) d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => E₀ All goals completed! 🐙 d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin dval✝:Fin 1⊢ ContDiff ℝ ∞ fun x => Space.basis.repr (space x) All goals completed! 🐙 d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin d⊢ ContDiff ℝ ∞ fun x => (constantEB c E₀ B₀ B₀_antisymm).val x (Sum.inr i) d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin d⊢ ContDiff ℝ ∞ fun x => 2⁻¹ * ∑ j, B₀ (i, j) * (space x).val j d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin d⊢ ContDiff ℝ ∞ fun x => 2⁻¹d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin d⊢ ContDiff ℝ ∞ fun x => ∑ j, B₀ (i, j) * (space x).val j d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin d⊢ ContDiff ℝ ∞ fun x => 2⁻¹ All goals completed! 🐙 d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin d⊢ ContDiff ℝ ∞ fun x => ∑ j, B₀ (i, j) * (space x).val j d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin d⊢ ∀ i_1 ∈ Finset.univ, ContDiff ℝ ∞ fun x => B₀ (i, i_1) * (space x).val i_1 d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin dj:Fin da✝:j ∈ Finset.univ⊢ ContDiff ℝ ∞ fun x => B₀ (i, j) * (space x).val j d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin dj:Fin da✝:j ∈ Finset.univ⊢ ContDiff ℝ ∞ fun x => B₀ (i, j)d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin dj:Fin da✝:j ∈ Finset.univ⊢ ContDiff ℝ ∞ fun x => (space x).val j d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)μ:Fin 1 ⊕ Fin di:Fin dj:Fin da✝:j ∈ Finset.univ⊢ ContDiff ℝ ∞ fun x => B₀ (i, j) All goals completed! 🐙 All goals completed! 🐙

C. The scalar potential

The scalar potential of the electromagnetic potential is given by -⟪E₀, x⟫.

lemma constantEB_scalarPotential {c : SpeedOfLight} {E₀ : EuclideanSpace ℝ (Fin d)} {B₀ : Fin d × Fin d → ℝ} {B₀_antisymm : ∀ i j, B₀ (i, j) = - B₀ (j, i)} : (constantEB c E₀ B₀ B₀_antisymm).scalarPotential c = fun _ x => -⟪E₀, Space.basis.repr x⟫_ℝ := d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ scalarPotential c (constantEB c E₀ B₀ B₀_antisymm) = fun x x_1 => -⟪E₀, Space.basis.repr x_1⟫_ℝ d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space d⊢ scalarPotential c (constantEB c E₀ B₀ B₀_antisymm) t x = -⟪E₀, Space.basis.repr x⟫_ℝ All goals completed! 🐙

D. The vector potential

The vector potential of the electromagnetic potential is (1 / 2) * ∑ j, B₀ (i, j) * x j .

lemma constantEB_vectorPotential {c : SpeedOfLight} {E₀ : EuclideanSpace ℝ (Fin d)} {B₀ : Fin d × Fin d → ℝ} {B₀_antisymm : ∀ i j, B₀ (i, j) = - B₀ (j, i)} : (constantEB c E₀ B₀ B₀_antisymm).vectorPotential c = fun _ x => WithLp.toLp 2 fun i => (1 / 2) * ∑ j, B₀ (i, j) * x j := d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ vectorPotential c (constantEB c E₀ B₀ B₀_antisymm) = fun x x_1 => WithLp.toLp 2 fun i => 1 / 2 * ∑ j, B₀ (i, j) * x_1.val j d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di:Fin d⊢ (vectorPotential c (constantEB c E₀ B₀ B₀_antisymm) t x).ofLp i = (WithLp.toLp 2 fun i => 1 / 2 * ∑ j, B₀ (i, j) * x.val j).ofLp i All goals completed! 🐙

D.1. Time derivative of the vector potential

d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space d⊢ ∂ₜ (fun x_1 => (fun x x_2 => WithLp.toLp 2 fun i => 1 / 2 * ∑ j, B₀ (i, j) * x_2.val j) x_1 x) t = 0 All goals completed! 🐙

D.2. Space derivative of the vector potential

d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di:Fin dj:Fin dk:Fin da✝:k ∈ Finset.univhk:k ≠ i⊢ B₀ (j, k) = 0 ∨ 0 = 0d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di:Fin dj:Fin dk:Fin da✝:k ∈ Finset.univhk:k ≠ i⊢ i ≠ k d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di:Fin dj:Fin dk:Fin da✝:k ∈ Finset.univhk:k ≠ i⊢ i ≠ k All goals completed! 🐙 d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di:Fin dj:Fin d⊢ i ∉ Finset.univ → (fderiv ℝ (fun x => B₀ (j, i) * x.val i) x) (Space.basis i) = 0 All goals completed! 🐙

E. The electric field

d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space d⊢ -(-fun x => Space.basis.repr (Space.basis.repr.symm E₀)) x = E₀ All goals completed! 🐙

F. The magnetic field

d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di✝:Fin d × Fin di:Fin dj:Fin d⊢ 1 / 2 * B₀ (i, j) - 1 / 2 * B₀ (j, i) = B₀ (i, j)d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di✝:Fin d × Fin di:Fin dj:Fin d⊢ Differentiable ℝ (constantEB c E₀ B₀ B₀_antisymm).val conv_lhs => d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di✝:Fin d × Fin di:Fin dj:Fin d| 1 / 2 * B₀ (j, i) d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di✝:Fin d × Fin di:Fin dj:Fin d| 1 / 2 * -B₀ (i, j) d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di✝:Fin d × Fin di:Fin dj:Fin d⊢ Differentiable ℝ (constantEB c E₀ B₀ B₀_antisymm).val apply constantEB_smooth.differentiable (d:ℕc:SpeedOfLightE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space di✝:Fin d × Fin di:Fin dj:Fin d⊢ ∞ ≠ 0 All goals completed! 🐙)

G. Is extrema

d:ℕ𝓕:FreeSpaceE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ ∀ (t : Time) (x : Space d), Space.div (electricField 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t) x = LorentzCurrentDensity.chargeDensity 𝓕.c 0 t x / 𝓕.ε₀ ∧ ∀ (i : Fin d), 𝓕.μ₀ * 𝓕.ε₀ * (∂ₜ (fun t => electricField 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t x) t).ofLp i = ∑ j, Space.deriv j (fun x => magneticFieldMatrix 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t x (j, i)) x - 𝓕.μ₀ * (LorentzCurrentDensity.currentDensity 𝓕.c 0 t x).ofLp id:ℕ𝓕:FreeSpaceE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ ContDiff ℝ ∞ (constantEB 𝓕.c E₀ B₀ B₀_antisymm).vald:ℕ𝓕:FreeSpaceE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ ContDiff ℝ ∞ 0 d:ℕ𝓕:FreeSpaceE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ ∀ (t : Time) (x : Space d), Space.div (electricField 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t) x = LorentzCurrentDensity.chargeDensity 𝓕.c 0 t x / 𝓕.ε₀ ∧ ∀ (i : Fin d), 𝓕.μ₀ * 𝓕.ε₀ * (∂ₜ (fun t => electricField 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t x) t).ofLp i = ∑ j, Space.deriv j (fun x => magneticFieldMatrix 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t x (j, i)) x - 𝓕.μ₀ * (LorentzCurrentDensity.currentDensity 𝓕.c 0 t x).ofLp i d:ℕ𝓕:FreeSpaceE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)t:Timex:Space d⊢ Space.div (electricField 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t) x = LorentzCurrentDensity.chargeDensity 𝓕.c 0 t x / 𝓕.ε₀ ∧ ∀ (i : Fin d), 𝓕.μ₀ * 𝓕.ε₀ * (∂ₜ (fun t => electricField 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t x) t).ofLp i = ∑ j, Space.deriv j (fun x => magneticFieldMatrix 𝓕.c (constantEB 𝓕.c E₀ B₀ B₀_antisymm) t x (j, i)) x - 𝓕.μ₀ * (LorentzCurrentDensity.currentDensity 𝓕.c 0 t x).ofLp i All goals completed! 🐙 d:ℕ𝓕:FreeSpaceE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ ContDiff ℝ ∞ (constantEB 𝓕.c E₀ B₀ B₀_antisymm).val All goals completed! 🐙 d:ℕ𝓕:FreeSpaceE₀:EuclideanSpace ℝ (Fin d)B₀:Fin d × Fin d → ℝB₀_antisymm:∀ (i j : Fin d), B₀ (i, j) = -B₀ (j, i)⊢ ContDiff ℝ ∞ 0 All goals completed! 🐙