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.Kinematics.EMPotential
public import Physlib.Relativity.Tensors.RealTensor.Metrics.Basic
public import Mathlib.Algebra.Order.Archimedean.Real.HomThe Field Strength Tensor
i. Overview
In this module we define the field strength tensor in terms of the electromagnetic potential.
We define a tensor version and a matrix version and prover various properties of these.
ii. Key results
toFieldStrength : The field strength tensor from an electromagnetic potential.
fieldStrengthMatrix : The field strength matrix from an electromagnetic potential
(matrix representation of the field strength tensor in the standard basis).
iii. Table of contents
A. The field strength tensor
A.1. Tensor equalities
A.2. Vector equalities
A.3. The group action acting on the field strength tensor
A.4. Differentiability and smoothness of the field strength tensor
A.5. Elements of the field strength tensor in terms of basis
A.5.1. Index evaluation
A.6. The field strength matrix
A.6.1. Differentiability of the field strength matrix
A.7. The antisymmetry of the field strength tensor
A.8. Equivariance of the field strength matrix
A.9. Linearity of the field strength tensor
iv. References
@[expose] public sectionattribute [-simp] Fintype.sum_sum_typeattribute [-simp] Nat.succ_eq_add_oneTODO "Currently the API for the field strength tensor has the definition
of `fieldStrengthMatrix`. This is now unneeded, and should be replaced with
`toField {A.toFieldStrength x| [μ] [ν]}ᵀ` and suitble API around that.
To undertake this TODO, it is likely easier to start building the API
around `toField {A.toFieldStrength x| [μ] [ν]}ᵀ` and then remove `fieldStrengthMatrix`
once the API is in place."A. The field strength tensor
We define the field strength tensor F^{μν} in terms of the derivative of the
electromagnetic potential A^μ. We then prove that this tensor transforms correctly
under Lorentz transformations.
A.1. Tensor equalities
These equalities for the field strength tensor are in terms of tensor expressions and index notation. In practice, we don't expect them to be used explicitly. They are useful for proving some of the API within this module.
All goals completed! 🐙
lemma toFieldStrength_eq_tensorDeriv {d} {A : ElectromagneticPotential d}
(hA : Differentiable ℝ A) (x : SpaceTime d) :
toFieldStrength A x =
Tensorial.toTensor.symm (permT id IsReindexing.auto {(η d | μ μ' ⊗ tensorDeriv A x | μ' ν)
+ - (η d | ν ν' ⊗ tensorDeriv A x | ν' μ)}ᵀ) := by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ A.toFieldStrength x =
toTensor.symm
((permT id ⋯)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))) +
(permT ![1, 0] ⋯) (-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))))))
rw [toFieldStrength_eq_deriv, d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id ⋯)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))) +
(permT ![1, 0] ⋯) (-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))))) =
toTensor.symm
((permT id ⋯)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))) +
(permT ![1, 0] ⋯) (-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x)))))) All goals completed! 🐙 deriv_eq_tensorDeriv _ hA d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id ⋯)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))) +
(permT ![1, 0] ⋯) (-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x)))))) =
toTensor.symm
((permT id ⋯)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))) +
(permT ![1, 0] ⋯) (-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x)))))) All goals completed! 🐙] All goals completed! 🐙lemma toFieldStrength_eq_add {d} (A : ElectromagneticPotential d) (x : SpaceTime d) :
toFieldStrength A x =
Tensorial.toTensor.symm (permT id (IsReindexing.auto) {(η d | μ μ' ⊗ A.deriv x | μ' ν)}ᵀ)
- Tensorial.toTensor.symm (permT ![1, 0] (IsReindexing.auto)
{(η d | μ μ' ⊗ A.deriv x | μ' ν)}ᵀ) := by d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ A.toFieldStrength x =
toTensor.symm ((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))) -
toTensor.symm ((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))))
simp only [toFieldStrength, map_add, map_neg, sub_eq_add_neg, permT_permT] d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))) +
-toTensor.symm ((permT (![1, 0] ∘ id) ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))) =
toTensor.symm ((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))) +
-toTensor.symm ((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))))
rfl All goals completed! 🐙lemma toFieldStrength_eq_sub_tensorDeriv {d} {A : ElectromagneticPotential d}
(hA : Differentiable ℝ A) (x : SpaceTime d) :
toFieldStrength A x =
Tensorial.toTensor.symm (permT id IsReindexing.auto {η d | μ μ' ⊗ tensorDeriv A x | μ' ν}ᵀ)
- Tensorial.toTensor.symm (permT ![1, 0] IsReindexing.auto
{η d | μ μ' ⊗ tensorDeriv A x | μ' ν}ᵀ) := by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ A.toFieldStrength x =
toTensor.symm ((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))))) -
toTensor.symm ((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x)))))
simp only [toFieldStrength_eq_tensorDeriv hA, map_add, map_neg, sub_eq_add_neg, permT_permT] d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm ((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))))) +
-toTensor.symm
((permT (![1, 0] ∘ id) ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))))) =
toTensor.symm ((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x))))) +
-toTensor.symm ((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (tensorDeriv A.val x)))))
rfl All goals completed! 🐙lemma toTensor_toFieldStrength {d} (A : ElectromagneticPotential d) (x : SpaceTime d) :
Tensorial.toTensor (toFieldStrength A x) =
(permT id (IsReindexing.auto) {(η d | μ μ' ⊗ A.deriv x | μ' ν)}ᵀ)
- (permT ![1, 0] (IsReindexing.auto) {(η d | μ μ' ⊗ A.deriv x | μ' ν)}ᵀ) := by d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ toTensor (A.toFieldStrength x) =
(permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))) -
(permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))
simp [toFieldStrength_eq_add] All goals completed! 🐙A.2. Vector equalities
These equalities for the field strength tensor are in terms of vector basis. They match some of the familiar forms one might expect to see the field strength tensor in.
The statement that F = F^{μν} eᵤ ⊗ eᵥ written explicitly, with
the components extracted via toField.
lemma toFieldStrength_eq_sum_basis_eval {d} {A : ElectromagneticPotential d} :
A.toFieldStrength = fun x => ∑ μ, ∑ ν, toField {A.toFieldStrength x| [μ] [ν]}ᵀ •
Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν := by d:ℕA:ElectromagneticPotential d⊢ A.toFieldStrength = fun x =>
∑ μ, ∑ ν, toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
ext x d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ A.toFieldStrength x =
∑ μ, ∑ ν, toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
exact prod_eq_sum_eval Vector.basis_eq_map_tensor_basis
Vector.basis_eq_map_tensor_basis (A.toFieldStrength x) All goals completed! 🐙
The statement that F = F^{μν} eᵤ ⊗ eᵥ written explicitly, with
the components given by ∑ κ, (η μ κ * ∂_ κ A x ν - η ν κ * ∂_ κ A x μ).
lemma toFieldStrength_eq_sum_basis {d} {A : ElectromagneticPotential d}
(hA : Differentiable ℝ A) (x : SpaceTime d) :
A.toFieldStrength x = ∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A x ν - η ν κ * ∂_ κ A x μ)) •
Lorentz.Vector.basis μ ⊗ₜ Lorentz.Vector.basis ν := by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ A.toFieldStrength x =
∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
apply (Lorentz.Vector.basis.tensorProduct Lorentz.Vector.basis).repr.injective d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ (Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x) =
(Vector.basis.tensorProduct Vector.basis).repr
(∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν)
ext ⟨μ, ν⟩ d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr
(∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν))
(μ, ν)
simp only [map_sum, map_smul, Finsupp.coe_finsetSum, Finsupp.coe_smul,
Finset.sum_apply, Pi.smul_apply, Basis.tensorProduct_repr_tmul_apply, Basis.repr_self,
Finsupp.single_apply, smul_eq_mul, mul_ite, mul_one, mul_zero, Finset.sum_ite_irrel,
Finset.sum_ite_eq', Finset.mem_univ, ↓reduceIte, Finset.sum_const_zero] d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)
simp only [prod_basis_of_map_reindex Vector.basis_eq_map_tensor_basis
Vector.basis_eq_map_tensor_basis,
toFieldStrength_eq_sub_tensorDeriv hA, ← deriv_eq_tensorDeriv _ hA, map_sub, Basis.repr_reindex,
Basis.map_repr, LinearEquiv.symm_symm, LinearEquiv.trans_apply, LinearEquiv.apply_symm_apply,
Finsupp.coe_sub, Pi.sub_apply, Finsupp.mapDomain_equiv_apply, permT_basis_repr_symm_apply,
Function.comp_apply, contrT_basis_repr_apply_eq_fin, prodT_basis_repr_apply,
contrMetric_repr_apply_eq_minkowskiMatrix,
prod_tensor_basis_eq_map_reindex CoVector.basis_eq_map_tensor_basis
Vector.basis_eq_map_tensor_basis,
LinearEquiv.symm_apply_apply, Equiv.symm_symm, deriv_basis_repr_apply, Finset.sum_sub_distrib] d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ x_1,
η
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv id ⋯ i)))
(x_1, x_1))).1
0)
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv id ⋯ i)))
(x_1, x_1))).1
1) *
∂_
((ComponentIdx.prod.trans (CoVector.indexEquiv.prodCongr Vector.indexEquiv))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv id ⋯ i)))
(x_1, x_1))).2).1
A.val x
((ComponentIdx.prod.trans (CoVector.indexEquiv.prodCongr Vector.indexEquiv))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv id ⋯ i)))
(x_1, x_1))).2).2 -
∑ x_1,
η
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1))).1
0)
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1))).1
1) *
∂_
((ComponentIdx.prod.trans (CoVector.indexEquiv.prodCongr Vector.indexEquiv))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1))).2).1
A.val x
((ComponentIdx.prod.trans (CoVector.indexEquiv.prodCongr Vector.indexEquiv))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i =>
(basisIdxCongr ⋯)
((ComponentIdx.prod.trans (Vector.indexEquiv.prodCongr Vector.indexEquiv)).symm (μ, ν)
(IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1))).2).2 =
∑ x_1, η μ x_1 * ∂_ x_1 A.val x ν - ∑ x_1, η ν x_1 * ∂_ x_1 A.val x μ
rfl All goals completed! 🐙
The statement that F = F^{μν} eᵤ ⊗ eᵥ written explicitly, with
with the components given by (η μ μ * ∂_ μ A x ν - η ν ν * ∂_ ν A x μ).
lemma toFieldStrength_eq_sum_basis_single {d} {A : ElectromagneticPotential d}
(hA : Differentiable ℝ A) (x : SpaceTime d) :
A.toFieldStrength x = ∑ μ, ∑ ν, (η μ μ * ∂_ μ A x ν - η ν ν * ∂_ ν A x μ) •
Lorentz.Vector.basis μ ⊗ₜ Lorentz.Vector.basis ν := by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ A.toFieldStrength x = ∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
rw [toFieldStrength_eq_sum_basis hA x d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν =
∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν =
∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν] d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν =
∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
apply (Lorentz.Vector.basis.tensorProduct Lorentz.Vector.basis).repr.injective d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime d⊢ (Vector.basis.tensorProduct Vector.basis).repr
(∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν) =
(Vector.basis.tensorProduct Vector.basis).repr
(∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν)
ext ⟨μ, ν⟩ d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((Vector.basis.tensorProduct Vector.basis).repr
(∑ μ, ∑ ν, (∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν))
(μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr
(∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν))
(μ, ν)
simp [Basis.tensorProduct_repr_tmul_apply, Finsupp.single_apply] d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ x_1, η μ x_1 * ∂_ x_1 A.val x ν - ∑ x_1, η ν x_1 * ∂_ x_1 A.val x μ = η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ
rw [Finset.sum_eq_single μ
(fun b _ hb => by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:Fin 1 ⊕ Fin dx✝:b ∈ Finset.univhb:b ≠ μ⊢ η μ b * ∂_ b A.val x ν = 0 All goals completed! 🐙 simp [minkowskiMatrix.off_diag_zero hb.symm] All goals completed! 🐙 All goals completed! 🐙) (by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ μ ∉ Finset.univ → η μ μ * ∂_ μ A.val x ν = 0 All goals completed! 🐙 simp All goals completed! 🐙 All goals completed! 🐙),
Finset.sum_eq_single ν
(fun b _ hb => by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin db:Fin 1 ⊕ Fin dx✝:b ∈ Finset.univhb:b ≠ ν⊢ η ν b * ∂_ b A.val x μ = 0 All goals completed! 🐙 simp [minkowskiMatrix.off_diag_zero hb.symm] All goals completed! 🐙 All goals completed! 🐙) (by d:ℕA:ElectromagneticPotential dhA:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ν ∉ Finset.univ → η ν ν * ∂_ ν A.val x μ = 0 All goals completed! 🐙 simp All goals completed! 🐙 All goals completed! 🐙)] All goals completed! 🐙A.3. The group action acting on the field strength tensor
We show that the field strength tensor is equivariant under the action of the Lorentz group. That is transforming the potential and then taking the field strength is the same as taking the field strength and then transforming the resulting tensor.
set_option backward.isDefEq.respectTransparency false in
lemma toFieldStrength_equivariant {d} (A : ElectromagneticPotential d) (Λ : LorentzGroup d)
(hf : Differentiable ℝ A) (x : SpaceTime d) :
(Λ • A).toFieldStrength x = Λ • A.toFieldStrength (Λ⁻¹ • x) := by d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ (Λ • A).toFieldStrength x = Λ • A.toFieldStrength (Λ⁻¹ • x)
rw [toFieldStrength, d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor ((Λ • A).deriv x))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor ((Λ • A).deriv x)))))) =
Λ • A.toFieldStrength (Λ⁻¹ • x) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ •
toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x))))))) deriv_equivariant A Λ hf, d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ • A.toFieldStrength (Λ⁻¹ • x) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ •
toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x))))))) ← actionT_contrMetric Λ, d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ • A.toFieldStrength (Λ⁻¹ • x) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ •
toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x))))))) toFieldStrength d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ •
toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x))))))) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ •
toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))))))] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (Λ • contrMetric d)) (toTensor (Λ • A.deriv (Λ⁻¹ • x))))))) =
Λ •
toTensor.symm
((permT id toFieldStrength._proof_3)
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))) +
(permT ![1, 0] toFieldStrength._proof_7)
(-(contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv (Λ⁻¹ • x)))))))
simp only [Tensorial.toTensor_smul, prodT_equivariant, contrT_equivariant, map_neg,
permT_equivariant, map_add, ← Tensorial.smul_toTensor_symm, smul_add, smul_neg] All goals completed! 🐙This lemma expresses the component form of the transformed field strength tensor: when a Lorentz transformation Λ acts on the potential A, the resulting field strength tensor's components are given by the standard tensor transformation rule involving the Lorentz matrix elements Λ^μ_κ and Λ^ν_ρ applied to the original field components.
lemma toFieldStrength_action_eq_sum {d} (A : ElectromagneticPotential d) (Λ : LorentzGroup d)
(hf : Differentiable ℝ A) (x : SpaceTime d) :
(Λ • A).toFieldStrength x = ∑ μ, ∑ ν,
(∑ κ, ∑ ρ, Λ.1 μ κ * Λ.1 ν ρ * toField {A.toFieldStrength (Λ⁻¹ • x) | [κ] [ρ]}ᵀ) •
Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν := by d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ (Λ • A).toFieldStrength x =
∑ μ,
∑ ν,
(∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * toField ((evalT 0 ρ) ((evalT 0 κ) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
conv_lhs => rw [toFieldStrength_equivariant A Λ hf x, toFieldStrength_eq_sum_basis_eval] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d| Λ •
(fun x =>
∑ μ,
∑ ν, toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν)
(Λ⁻¹ • x)
change Tensorial.smulLinearMap _ _ = _ d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ (smulLinearMap Λ)
((fun x =>
∑ μ,
∑ ν,
toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν)
(Λ⁻¹ • x)) =
∑ μ,
∑ ν,
(∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * toField ((evalT 0 ρ) ((evalT 0 κ) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
simp only [map_sum, map_smul] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ x_1,
∑ x_2,
toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) •
(smulLinearMap Λ) (Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2) =
∑ μ,
∑ ν,
(∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * toField ((evalT 0 ρ) ((evalT 0 κ) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
simp [smulLinearMap, smul_prod, Vector.smul_basis, tmul_sum, sum_tmul,
Finset.smul_sum, tmul_smul, smul_tmul, smul_smul] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ x_1,
∑ x_2,
∑ x_3,
∑ x_4,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) *
(↑Λ x_3 x_2 * ↑Λ x_4 x_1)) •
Vector.basis x_4 ⊗ₜ[ℝ] Vector.basis x_3 =
∑ x_1,
∑ x_2,
(∑ x_3,
∑ x_4,
↑Λ x_1 x_3 * ↑Λ x_2 x_4 *
toField ((evalT 0 x_4) ((evalT 0 x_3) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2
conv_lhs => enter [2, μ, 2, ν] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| ∑ x_1,
∑ x_2,
(toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_1 ν * ↑Λ x_2 μ)) •
Vector.basis x_2 ⊗ₜ[ℝ] Vector.basis x_1; rw [Finset.sum_comm] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| ∑ y,
∑ x_1,
(toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_1 ν * ↑Λ y μ)) •
Vector.basis y ⊗ₜ[ℝ] Vector.basis x_1
conv_lhs => enter [2, μ] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin d| ∑ ν,
∑ y,
∑ x_1,
(toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_1 ν * ↑Λ y μ)) •
Vector.basis y ⊗ₜ[ℝ] Vector.basis x_1; rw [Finset.sum_comm] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin d| ∑ y,
∑ x_1,
∑ x_2,
(toField ((evalT 0 x_1) ((evalT 0 μ) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_2 x_1 * ↑Λ y μ)) •
Vector.basis y ⊗ₜ[ℝ] Vector.basis x_2
rw [Finset.sum_comm d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ y,
∑ x_1,
∑ x_2,
∑ x_3,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_3 x_2 * ↑Λ y x_1)) •
Vector.basis y ⊗ₜ[ℝ] Vector.basis x_3 =
∑ x_1,
∑ x_2,
(∑ x_3,
∑ x_4,
↑Λ x_1 x_3 * ↑Λ x_2 x_4 *
toField ((evalT 0 x_4) ((evalT 0 x_3) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2 d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ y,
∑ x_1,
∑ x_2,
∑ x_3,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_3 x_2 * ↑Λ y x_1)) •
Vector.basis y ⊗ₜ[ℝ] Vector.basis x_3 =
∑ x_1,
∑ x_2,
(∑ x_3,
∑ x_4,
↑Λ x_1 x_3 * ↑Λ x_2 x_4 *
toField ((evalT 0 x_4) ((evalT 0 x_3) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime d⊢ ∑ y,
∑ x_1,
∑ x_2,
∑ x_3,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_3 x_2 * ↑Λ y x_1)) •
Vector.basis y ⊗ₜ[ℝ] Vector.basis x_3 =
∑ x_1,
∑ x_2,
(∑ x_3,
∑ x_4,
↑Λ x_1 x_3 * ↑Λ x_2 x_4 *
toField ((evalT 0 x_4) ((evalT 0 x_3) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2
refine Finset.sum_congr rfl (fun ν _ => ?_) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ ∑ x_1,
∑ x_2,
∑ x_3,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_3 x_2 * ↑Λ ν x_1)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis x_3 =
∑ x_1,
(∑ x_2,
∑ x_3,
↑Λ ν x_2 * ↑Λ x_1 x_3 * toField ((evalT 0 x_3) ((evalT 0 x_2) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis x_1
conv_lhs => enter [2, μ] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univμ:Fin 1 ⊕ Fin d| ∑ x_1,
∑ x_2,
(toField ((evalT 0 x_1) ((evalT 0 μ) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ x_2 x_1 * ↑Λ ν μ)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis x_2; rw [Finset.sum_comm] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univμ:Fin 1 ⊕ Fin d| ∑ y,
∑ x_1,
(toField ((evalT 0 x_1) ((evalT 0 μ) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ y x_1 * ↑Λ ν μ)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis y
rw [Finset.sum_comm d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ ∑ y,
∑ x_1,
∑ x_2,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ y x_2 * ↑Λ ν x_1)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis y =
∑ x_1,
(∑ x_2,
∑ x_3,
↑Λ ν x_2 * ↑Λ x_1 x_3 * toField ((evalT 0 x_3) ((evalT 0 x_2) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis x_1 d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ ∑ y,
∑ x_1,
∑ x_2,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ y x_2 * ↑Λ ν x_1)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis y =
∑ x_1,
(∑ x_2,
∑ x_3,
↑Λ ν x_2 * ↑Λ x_1 x_3 * toField ((evalT 0 x_3) ((evalT 0 x_2) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis x_1] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ ∑ y,
∑ x_1,
∑ x_2,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ y x_2 * ↑Λ ν x_1)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis y =
∑ x_1,
(∑ x_2,
∑ x_3,
↑Λ ν x_2 * ↑Λ x_1 x_3 * toField ((evalT 0 x_3) ((evalT 0 x_2) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis x_1
refine Finset.sum_congr rfl (fun μ _ => ?_) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝¹:ν ∈ Finset.univμ:Fin 1 ⊕ Fin dx✝:μ ∈ Finset.univ⊢ ∑ x_1,
∑ x_2,
(toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ μ x_2 * ↑Λ ν x_1)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis μ =
(∑ x_1,
∑ x_2, ↑Λ ν x_1 * ↑Λ μ x_2 * toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis μ
simp [← Finset.sum_smul] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝¹:ν ∈ Finset.univμ:Fin 1 ⊕ Fin dx✝:μ ∈ Finset.univ⊢ (∑ i, ∑ i_1, toField ((evalT 0 i_1) ((evalT 0 i) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ μ i_1 * ↑Λ ν i)) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis μ =
(∑ x_1,
∑ x_2, ↑Λ ν x_1 * ↑Λ μ x_2 * toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))) •
Vector.basis ν ⊗ₜ[ℝ] Vector.basis μ
congr 1 e_a d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝¹:ν ∈ Finset.univμ:Fin 1 ⊕ Fin dx✝:μ ∈ Finset.univ⊢ ∑ i, ∑ i_1, toField ((evalT 0 i_1) ((evalT 0 i) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ μ i_1 * ↑Λ ν i) =
∑ x_1, ∑ x_2, ↑Λ ν x_1 * ↑Λ μ x_2 * toField ((evalT 0 x_2) ((evalT 0 x_1) (toTensor (A.toFieldStrength (Λ⁻¹ • x)))))
exact Finset.sum_congr rfl (fun κ _ => Finset.sum_congr rfl (fun κ _ => by d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dν:Fin 1 ⊕ Fin dx✝³:ν ∈ Finset.univμ:Fin 1 ⊕ Fin dx✝²:μ ∈ Finset.univκ✝:Fin 1 ⊕ Fin dx✝¹:κ✝ ∈ Finset.univκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ toField ((evalT 0 κ) ((evalT 0 κ✝) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) * (↑Λ μ κ * ↑Λ ν κ✝) =
↑Λ ν κ✝ * ↑Λ μ κ * toField ((evalT 0 κ) ((evalT 0 κ✝) (toTensor (A.toFieldStrength (Λ⁻¹ • x))))) ring All goals completed! 🐙))A.4. Differentiability and smoothness of the field strength tensor
@[fun_prop]
lemma differentiable_toFieldStrength {d} {A : ElectromagneticPotential d} (hA : ContDiff ℝ 2 A) :
Differentiable ℝ A.toFieldStrength := by d:ℕA:ElectromagneticPotential dhA:ContDiff ℝ 2 A.val⊢ Differentiable ℝ A.toFieldStrength
change Differentiable ℝ (A.toFieldStrength ·) d:ℕA:ElectromagneticPotential dhA:ContDiff ℝ 2 A.val⊢ Differentiable ℝ fun x => A.toFieldStrength x
simp only [toFieldStrength_eq_sum_basis_single (hA.differentiable (by simp))] d:ℕA:ElectromagneticPotential dhA:ContDiff ℝ 2 A.val⊢ Differentiable ℝ fun x =>
∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
fun_prop All goals completed! 🐙@[fun_prop]
lemma differentiable_toFieldStrength_of_smooth {d}
{A : ElectromagneticPotential d} (hA : ContDiff ℝ ∞ A) :
Differentiable ℝ A.toFieldStrength :=
differentiable_toFieldStrength (hA.of_le (ENat.LEInfty.out))@[fun_prop]
lemma contDiff_toFieldStrength {d} {n : WithTop ℕ∞} {A : ElectromagneticPotential d}
(hA : ContDiff ℝ (n + 1) A) : ContDiff ℝ n A.toFieldStrength := by d:ℕn:ℕ∞ωA:ElectromagneticPotential dhA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n A.toFieldStrength
change ContDiff ℝ n (A.toFieldStrength ·) d:ℕn:ℕ∞ωA:ElectromagneticPotential dhA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => A.toFieldStrength x
simp only [toFieldStrength_eq_sum_basis_single (hA.differentiable (by simp))] d:ℕn:ℕ∞ωA:ElectromagneticPotential dhA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => ∑ μ, ∑ ν, (η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
fun_prop All goals completed! 🐙A.5. Elements of the field strength tensor in terms of basis
TODO "For the electromagnetic field strength, we have lots of lemmas related
to the components of the field strength tensor in terms of the basis. For example,
`toTensor_toFieldStrength_basis_repr`, these should be removed. They are used
downstream, so there use there should be refactored."
lemma toTensor_toFieldStrength_basis_repr {d} (A : ElectromagneticPotential d) (x : SpaceTime d)
(b : ComponentIdx (S := realLorentzTensor d) (Fin.append ![Color.up] ![Color.up])) :
(Tensor.basis _).repr (Tensorial.toTensor (toFieldStrength A x)) b =
∑ κ, (η (b 0) κ * ∂_ κ A x (b 1) - η (b 1) κ * ∂_ κ A x (b 0)) := by d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))
rw [toTensor_toFieldStrength d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))) -
(permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))) -
(permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))) -
(permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))
simp only [map_sub, Finsupp.coe_sub, Pi.sub_apply] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT id ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b -
((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))
rw [Tensor.permT_basis_repr_symm_apply, d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]) ∘ Fin.succSuccAbove 1 2)).repr
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i))) -
((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(x_1, x_1)) -
((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) contrT_basis_repr_apply_eq_fin d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(x_1, x_1)) -
((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(x_1, x_1)) -
((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(x_1, x_1)) -
((basis (Fin.append ![Color.up] ![Color.up])).repr
((permT ![1, 0] ⋯) ((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x))))))
b =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))
conv_lhs =>
enter [1, 2, n] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i))) (n, n))
rw [Tensor.prodT_basis_repr_apply, contrMetric_repr_apply_eq_minkowskiMatrix] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| η
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(n, n))).1
0)
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(n, n))).1
1) *
((basis (Fin.append ![Color.down] ![Color.up])).repr (toTensor (A.deriv x)))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(n, n))).2
enter [1] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| η
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(n, n))).1
0)
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(n, n))).1
1)
change η (b 0) (n) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| η (b 0) n
conv_lhs =>
enter [1, 2, n, 2] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ((basis (Fin.append ![Color.down] ![Color.up])).repr (toTensor (A.deriv x)))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i))) (n, n))).2
rw [toTensor_deriv_basis_repr_apply] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ∂_
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(n, n))).2
0)
A.val x
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id ⋯ i)))
(n, n))).2
1)
change ∂_ (n) A x (b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ∂_ n A.val x (b 1)
rw [Tensor.permT_basis_repr_symm_apply, d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (∑ n, η (b 0) n * ∂_ n A.val x (b 1) -
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]) ∘ Fin.succSuccAbove 1 2)).repr
((contrT 2 1 2 ⋯) ((prodT (contrMetric d)) (toTensor (A.deriv x)))))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i))) =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ n, η (b 0) n * ∂_ n A.val x (b 1) -
∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1)) =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) contrT_basis_repr_apply_eq_fin d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ n, η (b 0) n * ∂_ n A.val x (b 1) -
∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1)) =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ n, η (b 0) n * ∂_ n A.val x (b 1) -
∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1)) =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ n, η (b 0) n * ∂_ n A.val x (b 1) -
∑ x_1,
((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(x_1, x_1)) =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0))
conv_lhs =>
enter [2, 2, n] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ((basis (Fin.append ![Color.up, Color.up] (Fin.append ![Color.down] ![Color.up]))).repr
((prodT (contrMetric d)) (toTensor (A.deriv x))))
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i))) (n, n))
rw [Tensor.prodT_basis_repr_apply, contrMetric_repr_apply_eq_minkowskiMatrix] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| η
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).1
0)
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).1
1) *
((basis (Fin.append ![Color.down] ![Color.up])).repr (toTensor (A.deriv x)))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).2
enter [1] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| η
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).1
0)
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).1
1)
change η (b 1) (n) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| η (b 1) n
conv_lhs =>
enter [2, 2, n, 2] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ((basis (Fin.append ![Color.down] ![Color.up])).repr (toTensor (A.deriv x)))
(ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).2
rw [toTensor_deriv_basis_repr_apply] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ∂_
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).2
0)
A.val x
((ComponentIdx.prod
↑((ComponentIdx.DropPairSection.ofFinEquiv ⋯ fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)))
(n, n))).2
1)
change ∂_ (n) A x (b 0) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])n:Fin 1 ⊕ Fin d| ∂_ n A.val x (b 0)
rw [← Finset.sum_sub_distrib d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ x_1, (η (b 0) x_1 * ∂_ x_1 A.val x (b 1) - η (b 1) x_1 * ∂_ x_1 A.val x (b 0)) =
∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) All goals completed! 🐙] All goals completed! 🐙
lemma toFieldStrength_tensor_basis_eq_basis {d} (A : ElectromagneticPotential d) (x : SpaceTime d)
(b : ComponentIdx (S := realLorentzTensor d) (Fin.append ![Color.up] ![Color.up])) :
(Tensor.basis _).repr (Tensorial.toTensor (toFieldStrength A x)) b =
(Lorentz.Vector.basis.tensorProduct Lorentz.Vector.basis).repr (toFieldStrength A x)
(b 0, b 1) := by d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) b =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
rw [Tensorial.basis_toTensor_apply, d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((basis (Fin.append ![Color.up] ![Color.up])).map toTensor.symm).repr (A.toFieldStrength x)) b =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((((basis ![Color.up]).map toTensor.symm).tensorProduct ((basis ![Color.up]).map toTensor.symm)).reindex
ComponentIdx.prod.symm).repr
(A.toFieldStrength x))
b =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) Tensorial.basis_map_prod d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((((basis ![Color.up]).map toTensor.symm).tensorProduct ((basis ![Color.up]).map toTensor.symm)).reindex
ComponentIdx.prod.symm).repr
(A.toFieldStrength x))
b =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((((basis ![Color.up]).map toTensor.symm).tensorProduct ((basis ![Color.up]).map toTensor.symm)).reindex
ComponentIdx.prod.symm).repr
(A.toFieldStrength x))
b =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((((basis ![Color.up]).map toTensor.symm).tensorProduct ((basis ![Color.up]).map toTensor.symm)).reindex
ComponentIdx.prod.symm).repr
(A.toFieldStrength x))
b =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
simp only [Nat.reduceSucc, Nat.reduceAdd, Basis.repr_reindex, Finsupp.mapDomain_equiv_apply,
Equiv.symm_symm, Fin.isValue] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((((basis ![Color.up]).map toTensor.symm).tensorProduct ((basis ![Color.up]).map toTensor.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
rw [Lorentz.Vector.tensor_basis_map_eq_basis_reindex d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((Vector.basis.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((Vector.basis.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ (((Vector.basis.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
have hb : (((Lorentz.Vector.basis (d := d)).reindex Lorentz.Vector.indexEquiv.symm).tensorProduct
(Lorentz.Vector.basis.reindex Lorentz.Vector.indexEquiv.symm)) =
((Lorentz.Vector.basis (d := d)).tensorProduct (Lorentz.Vector.basis (d := d))).reindex
(Lorentz.Vector.indexEquiv.symm.prodCongr Lorentz.Vector.indexEquiv.symm) := by d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) b =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
ext b d:ℕA:ElectromagneticPotential dx:SpaceTime db✝:ComponentIdx (Fin.append ![Color.up] ![Color.up])b:ComponentIdx ![Color.up] × ComponentIdx ![Color.up]⊢ ((Vector.basis.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)) b =
((Vector.basis.tensorProduct Vector.basis).reindex (Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm)) b d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
match b with
| ⟨i, j⟩ => d:ℕA:ElectromagneticPotential dx:SpaceTime db✝:ComponentIdx (Fin.append ![Color.up] ![Color.up])b:ComponentIdx ![Color.up] × ComponentIdx ![Color.up]i:ComponentIdx ![Color.up]j:ComponentIdx ![Color.up]⊢ ((Vector.basis.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)) (i, j) =
((Vector.basis.tensorProduct Vector.basis).reindex (Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm)) (i, j) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
simp d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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.reindex Vector.indexEquiv.symm).tensorProduct (Vector.basis.reindex Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
rw [hb, d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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).reindex (Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm)).repr
(A.toFieldStrength x))
(ComponentIdx.prod b) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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 (A.toFieldStrength x))
((Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm).symm (ComponentIdx.prod b)) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) Module.Basis.repr_reindex_apply d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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 (A.toFieldStrength x))
((Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm).symm (ComponentIdx.prod b)) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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 (A.toFieldStrength x))
((Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm).symm (ComponentIdx.prod b)) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])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 (A.toFieldStrength x))
((Vector.indexEquiv.symm.prodCongr Vector.indexEquiv.symm).symm (ComponentIdx.prod b)) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (b 0, b 1)
congr 1 All goals completed! 🐙
lemma toFieldStrength_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 (A.toFieldStrength x) μν =
∑ κ, ((η μν.1 κ * ∂_ κ A x μν.2) - η μν.2 κ * ∂_ κ A x μν.1) := by d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) μν =
∑ κ, (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1)
match μν with
| (μ, ν) => d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1)
trans (Tensor.basis _).repr (Tensorial.toTensor (toFieldStrength A x))
(fun | 0 => μ | 1 => ν) d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun x =>
match x with
| 0 => μ
| 1 => νd:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun x =>
match x with
| 0 => μ
| 1 => ν) =
∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1); swap d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun x =>
match x with
| 0 => μ
| 1 => ν) =
∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1)d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun x =>
match x with
| 0 => μ
| 1 => ν
· d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun x =>
match x with
| 0 => μ
| 1 => ν) =
∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) rw [toTensor_toFieldStrength_basis_repr d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ,
(η
(match 0 with
| 0 => μ
| 1 => ν)
κ *
∂_ κ A.val x
(match 1 with
| 0 => μ
| 1 => ν) -
η
(match 1 with
| 0 => μ
| 1 => ν)
κ *
∂_ κ A.val x
(match 0 with
| 0 => μ
| 1 => ν)) =
∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) All goals completed! 🐙] All goals completed! 🐙
rw [toFieldStrength_tensor_basis_eq_basis d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x))
(match 0 with
| 0 => μ
| 1 => ν,
match 1 with
| 0 => μ
| 1 => ν) d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x))
(match 0 with
| 0 => μ
| 1 => ν,
match 1 with
| 0 => μ
| 1 => ν)] d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x))
(match 0 with
| 0 => μ
| 1 => ν,
match 1 with
| 0 => μ
| 1 => ν)
rfl All goals completed! 🐙
lemma toFieldStrength_basis_repr_apply_eq_single {d} {μν : (Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)}
(A : ElectromagneticPotential d) (x : SpaceTime d) :
(Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (A.toFieldStrength x) μν =
((η μν.1 μν.1 * ∂_ μν.1 A x μν.2) - η μν.2 μν.2 * ∂_ μν.2 A x μν.1) := by d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) μν =
η μν.1 μν.1 * ∂_ μν.1 A.val x μν.2 - η μν.2 μν.2 * ∂_ μν.2 A.val x μν.1
rw [toFieldStrength_basis_repr_apply, d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime d⊢ ∑ κ, (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1) =
η μν.1 μν.1 * ∂_ μν.1 A.val x μν.2 - η μν.2 μν.2 * ∂_ μν.2 A.val x μν.1 All goals completed! 🐙 Finset.sum_sub_distrib, d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime d⊢ ∑ x_1, η μν.1 x_1 * ∂_ x_1 A.val x μν.2 - ∑ x_1, η μν.2 x_1 * ∂_ x_1 A.val x μν.1 =
η μν.1 μν.1 * ∂_ μν.1 A.val x μν.2 - η μν.2 μν.2 * ∂_ μν.2 A.val x μν.1 All goals completed! 🐙
Finset.sum_eq_single μν.1
(fun b _ hb => by d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime db:Fin 1 ⊕ Fin dx✝:b ∈ Finset.univhb:b ≠ μν.1⊢ η μν.1 b * ∂_ b A.val x μν.2 = 0 All goals completed! 🐙 simp [minkowskiMatrix.off_diag_zero hb.symm] All goals completed! 🐙 All goals completed! 🐙) (by d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime d⊢ μν.1 ∉ Finset.univ → η μν.1 μν.1 * ∂_ μν.1 A.val x μν.2 = 0 All goals completed! 🐙 simp All goals completed! 🐙 All goals completed! 🐙),
Finset.sum_eq_single μν.2
(fun b _ hb => by d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime db:Fin 1 ⊕ Fin dx✝:b ∈ Finset.univhb:b ≠ μν.2⊢ η μν.2 b * ∂_ b A.val x μν.1 = 0 All goals completed! 🐙 simp [minkowskiMatrix.off_diag_zero hb.symm] All goals completed! 🐙 All goals completed! 🐙) (by d:ℕμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)A:ElectromagneticPotential dx:SpaceTime d⊢ μν.2 ∉ Finset.univ → η μν.2 μν.2 * ∂_ μν.2 A.val x μν.1 = 0 All goals completed! 🐙 simp All goals completed! 🐙 All goals completed! 🐙)] All goals completed! 🐙A.5.1. Index evaluation
These lemmas express the components of the field strength tensor using index evaluation.
Evaluating both tensor indices of the field strength gives the coefficient in the standard tensor-product basis.
lemma toFieldStrength_eval_eq_basis_repr {d} (A : ElectromagneticPotential d)
(x : SpaceTime d) (μ ν : Fin 1 ⊕ Fin d) :
toField {A.toFieldStrength x | [μ] [ν]}ᵀ =
(Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr
(A.toFieldStrength x) (μ, ν) := by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) =
((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν)
trans (Lorentz.Vector.basis.tensorProduct Lorentz.Vector.basis).repr
(A.toFieldStrength x) (μ, ν) d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν)d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν)
· d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) conv_rhs =>
rw [prod_eq_sum_eval Vector.basis_eq_map_tensor_basis
Vector.basis_eq_map_tensor_basis (A.toFieldStrength x)] d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| ((Vector.basis.tensorProduct Vector.basis).repr
(∑ i,
∑ j,
toField ((evalT 0 ((basisIdxCongr ⋯) j)) ((evalT 0 ((basisIdxCongr ⋯) i)) (toTensor (A.toFieldStrength x)))) •
Vector.basis i ⊗ₜ[ℝ] Vector.basis j))
(μ, ν)
simp [Basis.tensorProduct_repr_tmul_apply, Finsupp.single_apply] All goals completed! 🐙
· d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) rfl All goals completed! 🐙The evaluated components of the field strength tensor in terms of derivatives of the electromagnetic potential.
lemma toFieldStrength_eval_apply {d} (A : ElectromagneticPotential d)
(x : SpaceTime d) (μ ν : Fin 1 ⊕ Fin d) :
toField {A.toFieldStrength x | [μ] [ν]}ᵀ =
∑ κ, (η μ κ * ∂_ κ A x ν - η ν κ * ∂_ κ A x μ) := by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) =
∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)
rw [toFieldStrength_eval_eq_basis_repr d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ) d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)] d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
∑ κ, (η μ κ * ∂_ κ A.val x ν - η ν κ * ∂_ κ A.val x μ)
exact toFieldStrength_basis_repr_apply (μν := (μ, ν)) A x All goals completed! 🐙The evaluated components of the field strength tensor after using diagonal form of the Minkowski metric.
lemma toFieldStrength_eval_apply_eq_single {d} (A : ElectromagneticPotential d)
(x : SpaceTime d) (μ ν : Fin 1 ⊕ Fin d) :
toField {A.toFieldStrength x | [μ] [ν]}ᵀ =
η μ μ * ∂_ μ A x ν - η ν ν * ∂_ ν A x μ := by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) = η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ
rw [toFieldStrength_eval_eq_basis_repr d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ] d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
η μ μ * ∂_ μ A.val x ν - η ν ν * ∂_ ν A.val x μ
exact toFieldStrength_basis_repr_apply_eq_single (μν := (μ, ν)) A x All goals completed! 🐙A.6. The field strength matrix
We define the field strength matrix to be the matrix representation of the field strength tensor in the standard basis.
This is currently not used as much as it could be.
lemma fieldStrengthMatrix_eq {d} (A : ElectromagneticPotential d) (x : SpaceTime d) :
A.fieldStrengthMatrix x =
(Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (A.toFieldStrength x) := by d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ A.fieldStrengthMatrix x = (CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x) rfl All goals completed! 🐙Index evaluation of the field strength tensor agrees with the corresponding component of the field strength matrix.
lemma toFieldStrength_eval_eq_fieldStrengthMatrix {d} (A : ElectromagneticPotential d)
(x : SpaceTime d) (μ ν : Fin 1 ⊕ Fin d) :
toField {A.toFieldStrength x | [μ] [ν]}ᵀ = A.fieldStrengthMatrix x (μ, ν) := by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ toField ((evalT 0 ν) ((evalT 0 μ) (toTensor (A.toFieldStrength x)))) = (A.fieldStrengthMatrix x) (μ, ν)
rw [toFieldStrength_eval_eq_basis_repr, d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) = (A.fieldStrengthMatrix x) (μ, ν) All goals completed! 🐙 fieldStrengthMatrix_eq d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) =
((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ, ν) All goals completed! 🐙] All goals completed! 🐙
lemma fieldStrengthMatrix_eq_tensor_basis_repr {d} (A : ElectromagneticPotential d)
(x : SpaceTime d) (μ ν : (Fin 1 ⊕ Fin d)) :
A.fieldStrengthMatrix x (μ, ν) =
(Tensor.basis _).repr (Tensorial.toTensor (toFieldStrength A x))
(fun | 0 => μ | 1 => ν) := by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (A.fieldStrengthMatrix x) (μ, ν) =
((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun x =>
match x with
| 0 => μ
| 1 => ν
rw [toFieldStrength_tensor_basis_eq_basis d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (A.fieldStrengthMatrix x) (μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x))
(match 0 with
| 0 => μ
| 1 => ν,
match 1 with
| 0 => μ
| 1 => ν) d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (A.fieldStrengthMatrix x) (μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x))
(match 0 with
| 0 => μ
| 1 => ν,
match 1 with
| 0 => μ
| 1 => ν)] d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (A.fieldStrengthMatrix x) (μ, ν) =
((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x))
(match 0 with
| 0 => μ
| 1 => ν,
match 1 with
| 0 => μ
| 1 => ν)
rfl All goals completed! 🐙lemma toFieldStrength_eq_fieldStrengthMatrix {d} (A : ElectromagneticPotential d) :
toFieldStrength A = fun x => ∑ μ, ∑ ν,
A.fieldStrengthMatrix x (μ, ν) • (Lorentz.Vector.basis μ) ⊗ₜ (Lorentz.Vector.basis ν) := by d:ℕA:ElectromagneticPotential d⊢ A.toFieldStrength = fun x => ∑ μ, ∑ ν, (A.fieldStrengthMatrix x) (μ, ν) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
ext x d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ A.toFieldStrength x = ∑ μ, ∑ ν, (A.fieldStrengthMatrix x) (μ, ν) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν
apply (Lorentz.Vector.basis.tensorProduct Lorentz.Vector.basis).repr.injective d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ (Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x) =
(Vector.basis.tensorProduct Vector.basis).repr
(∑ μ, ∑ ν, (A.fieldStrengthMatrix x) (μ, ν) • Vector.basis μ ⊗ₜ[ℝ] Vector.basis ν)
simp only [map_sum, map_smul] d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ (Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x) =
∑ x_1,
∑ x_2,
(A.fieldStrengthMatrix x) (x_1, x_2) •
(Vector.basis.tensorProduct Vector.basis).repr (Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2)
ext κ d:ℕA:ElectromagneticPotential dx:SpaceTime dκ:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) κ =
(∑ x_1,
∑ x_2,
(A.fieldStrengthMatrix x) (x_1, x_2) •
(Vector.basis.tensorProduct Vector.basis).repr (Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2))
κ
match κ with
| (μ', ν') => d:ℕA:ElectromagneticPotential dx:SpaceTime dκ:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)μ':Fin 1 ⊕ Fin dν':Fin 1 ⊕ Fin d⊢ ((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ', ν') =
(∑ x_1,
∑ x_2,
(A.fieldStrengthMatrix x) (x_1, x_2) •
(Vector.basis.tensorProduct Vector.basis).repr (Vector.basis x_1 ⊗ₜ[ℝ] Vector.basis x_2))
(μ', ν')
simp [Finsupp.single_apply] d:ℕA:ElectromagneticPotential dx:SpaceTime dκ:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)μ':Fin 1 ⊕ Fin dν':Fin 1 ⊕ Fin d⊢ ((Vector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) (μ', ν') = (A.fieldStrengthMatrix x) (μ', ν')
rfl All goals completed! 🐙A.6.1. Differentiability of the field strength matrix
lemma fieldStrengthMatrix_differentiable {d} {A : ElectromagneticPotential d}
{μν} (hA : ContDiff ℝ 2 A) :
Differentiable ℝ (A.fieldStrengthMatrix · μν) := by d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.val⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν
have diff_partial (μ) :
∀ ν, Differentiable ℝ fun x => (fderiv ℝ A x) (Lorentz.Vector.basis μ) ν := by
rw [SpaceTime.differentiable_vector d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν] d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν
exact Differentiable.clm_apply
(((contDiff_succ_iff_fderiv (n := 1)).mp hA).2.2.differentiable (by d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valμ:Fin 1 ⊕ Fin d⊢ 1 ≠ 0 d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν simp All goals completed! 🐙 d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν)) (by d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valμ:Fin 1 ⊕ Fin d⊢ Differentiable ℝ fun x => Vector.basis μ d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν fun_prop All goals completed! 🐙 d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν) d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν
conv => d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν| Differentiable ℝ fun x => (A.fieldStrengthMatrix x) μν enter [2, x] d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) νx:SpaceTime d| (A.fieldStrengthMatrix x) μν; rw [toFieldStrength_basis_repr_apply_eq_single,
SpaceTime.deriv_eq, SpaceTime.deriv_eq] d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valdiff_partial:∀ (μ ν : Fin 1 ⊕ Fin d), Differentiable ℝ fun x => (fderiv ℝ A.val x) (Vector.basis μ) νx:SpaceTime d| η μν.1 μν.1 * (fderiv ℝ A.val x) (Vector.basis μν.1) μν.2 - η μν.2 μν.2 * (fderiv ℝ A.val x) (Vector.basis μν.2) μν.1
exact ((diff_partial _ _).const_mul _).sub ((diff_partial _ _).const_mul _) All goals completed! 🐙lemma fieldStrengthMatrix_differentiable_space {d} {A : ElectromagneticPotential d}
{μν} (hA : ContDiff ℝ 2 A) (t : Time) {c : SpeedOfLight} :
Differentiable ℝ (fun x => A.fieldStrengthMatrix ((toTimeAndSpace c).symm (t, x)) μν) := by d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valt:Timec:SpeedOfLight⊢ Differentiable ℝ fun x => (A.fieldStrengthMatrix ((toTimeAndSpace c).symm (t, x))) μν
change Differentiable ℝ ((A.fieldStrengthMatrix · μν) ∘ fun x => (toTimeAndSpace c).symm (t, x)) d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valt:Timec:SpeedOfLight⊢ Differentiable ℝ ((fun x => (A.fieldStrengthMatrix x) μν) ∘ fun x => (toTimeAndSpace c).symm (t, x))
exact (fieldStrengthMatrix_differentiable hA).comp (by d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valt:Timec:SpeedOfLight⊢ Differentiable ℝ fun x => (toTimeAndSpace c).symm (t, x) fun_prop All goals completed! 🐙)lemma fieldStrengthMatrix_differentiable_time {d} {A : ElectromagneticPotential d}
{μν} (hA : ContDiff ℝ 2 A) (x : Space d) {c : SpeedOfLight} :
Differentiable ℝ (fun t => A.fieldStrengthMatrix ((toTimeAndSpace c).symm (t, x)) μν) := by d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valx:Space dc:SpeedOfLight⊢ Differentiable ℝ fun t => (A.fieldStrengthMatrix ((toTimeAndSpace c).symm (t, x))) μν
change Differentiable ℝ ((A.fieldStrengthMatrix · μν) ∘ fun t => (toTimeAndSpace c).symm (t, x)) d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valx:Space dc:SpeedOfLight⊢ Differentiable ℝ ((fun x => (A.fieldStrengthMatrix x) μν) ∘ fun t => (toTimeAndSpace c).symm (t, x))
exact (fieldStrengthMatrix_differentiable hA).comp (by d:ℕA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ 2 A.valx:Space dc:SpeedOfLight⊢ Differentiable ℝ fun t => (toTimeAndSpace c).symm (t, x) fun_prop All goals completed! 🐙)
lemma fieldStrengthMatrix_contDiff {d} {n : WithTop ℕ∞} {A : ElectromagneticPotential d}
{μν} (hA : ContDiff ℝ (n + 1) A) :
ContDiff ℝ n (A.fieldStrengthMatrix · μν) := by d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => (A.fieldStrengthMatrix x) μν
conv => d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val| ContDiff ℝ n fun x => (A.fieldStrengthMatrix x) μν enter [3, x] d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valx:SpaceTime d| (A.fieldStrengthMatrix x) μν; rw [toFieldStrength_basis_repr_apply_eq_single,
SpaceTime.deriv_eq, SpaceTime.deriv_eq] d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valx:SpaceTime d| η μν.1 μν.1 * (fderiv ℝ A.val x) (Vector.basis μν.1) μν.2 - η μν.2 μν.2 * (fderiv ℝ A.val x) (Vector.basis μν.2) μν.1
apply ContDiff.sub hf d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => η μν.1 μν.1 * (fderiv ℝ A.val x) (Vector.basis μν.1) μν.2hg d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => η μν.2 μν.2 * (fderiv ℝ A.val x) (Vector.basis μν.2) μν.1
apply ContDiff.mul hf.hf d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => η μν.1 μν.1hg d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μν.1) μν.2hg d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => η μν.2 μν.2 * (fderiv ℝ A.val x) (Vector.basis μν.2) μν.1
· hf.hf d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => η μν.1 μν.1 fun_prop All goals completed! 🐙
· hg d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μν.1) μν.2 match μν with
| (μ, ν) => d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis (μ, ν).1) (μ, ν).2
simp only d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν
revert ν d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin d⊢ ∀ (ν : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μ) ν
rw [SpaceTime.contDiff_vector d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μ) d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μ)] d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μ)
exact ContDiff.clm_apply (ContDiff.fderiv_right (m := n) hA (by d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin d⊢ n + 1 ≤ n + 1 rfl All goals completed! 🐙)) (by d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => Vector.basis μ fun_prop All goals completed! 🐙)
apply ContDiff.mul hg.hf d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => η μν.2 μν.2hg d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μν.2) μν.1
· hg.hf d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => η μν.2 μν.2 fun_prop All goals completed! 🐙
· hg d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.val⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis μν.2) μν.1 match μν with
| (μ, ν) => d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis (μ, ν).2) (μ, ν).1
simp only d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis ν) μ
revert μ d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valν:Fin 1 ⊕ Fin d⊢ ∀ (μ : Fin 1 ⊕ Fin d), ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis ν) μ
rw [SpaceTime.contDiff_vector d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis ν) d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis ν)] d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => (fderiv ℝ A.val x) (Vector.basis ν)
exact ContDiff.clm_apply (ContDiff.fderiv_right (m := n) hA (by d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valν:Fin 1 ⊕ Fin d⊢ n + 1 ≤ n + 1 rfl All goals completed! 🐙)) (by d:ℕn:ℕ∞ωA:ElectromagneticPotential dμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)hA:ContDiff ℝ (n + 1) A.valν:Fin 1 ⊕ Fin d⊢ ContDiff ℝ n fun x => Vector.basis ν fun_prop All goals completed! 🐙)lemma fieldStrengthMatrix_smooth {d} {A : ElectromagneticPotential d}
(hA : ContDiff ℝ ∞ A) (μν) :
ContDiff ℝ ∞ (A.fieldStrengthMatrix · μν) :=
fieldStrengthMatrix_contDiff (by d:ℕA:ElectromagneticPotential dhA:ContDiff ℝ ∞ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ContDiff ℝ (∞ + 1) A.val simpa using hA All goals completed! 🐙)A.7. The antisymmetry of the field strength tensor
We show that the field strength tensor is antisymmetric.
lemma toFieldStrength_antisymmetric {d} (A : ElectromagneticPotential d) (x : SpaceTime d) :
{A.toFieldStrength x | μ ν = - (A.toFieldStrength x | ν μ)}ᵀ := by d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ toTensor (A.toFieldStrength x) = (permT ![1, 0] ⋯) (-toTensor (A.toFieldStrength x))
apply (Tensor.basis _).repr.injective d:ℕA:ElectromagneticPotential dx:SpaceTime d⊢ (basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x)) =
(basis (Fin.append ![Color.up] ![Color.up])).repr ((permT ![1, 0] ⋯) (-toTensor (A.toFieldStrength x)))
ext b d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) b =
((basis (Fin.append ![Color.up] ![Color.up])).repr ((permT ![1, 0] ⋯) (-toTensor (A.toFieldStrength x)))) b
rw [toTensor_toFieldStrength_basis_repr, d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
((basis (Fin.append ![Color.up] ![Color.up])).repr ((permT ![1, 0] ⋯) (-toTensor (A.toFieldStrength x)))) b d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
(-(basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun i =>
(basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)) permT_basis_repr_symm_apply, d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
((basis (Fin.append ![Color.up] ![Color.up])).repr (-toTensor (A.toFieldStrength x))) fun i =>
(basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
(-(basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun i =>
(basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)) map_neg d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
(-(basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun i =>
(basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i)) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
(-(basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun i =>
(basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i))] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
(-(basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun i =>
(basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i))
simp only [Nat.reduceAdd, Fin.isValue, Nat.reduceSucc, Finsupp.coe_neg, Pi.neg_apply] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
-((basis (Fin.append ![Color.up] ![Color.up])).repr (toTensor (A.toFieldStrength x))) fun i =>
(basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ i))
rw [toTensor_toFieldStrength_basis_repr, d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
-∑ κ,
(η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) κ *
∂_ κ A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) -
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) κ *
∂_ κ A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0)))) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
∑ x_1,
-(η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) -
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0)))) ← Finset.sum_neg_distrib d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
∑ x_1,
-(η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) -
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0)))) d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
∑ x_1,
-(η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) -
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))))] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])⊢ ∑ κ, (η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0)) =
∑ x_1,
-(η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) -
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) x_1 *
∂_ x_1 A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))))
refine Finset.sum_congr rfl fun κ _ => ?_ d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0) =
-(η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) κ *
∂_ κ A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) -
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) κ *
∂_ κ A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))))
simp only [Fin.isValue, neg_sub] d:ℕA:ElectromagneticPotential dx:SpaceTime db:ComponentIdx (Fin.append ![Color.up] ![Color.up])κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η (b 0) κ * ∂_ κ A.val x (b 1) - η (b 1) κ * ∂_ κ A.val x (b 0) =
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1))) κ *
∂_ κ A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) -
η ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 0))) κ *
∂_ κ A.val x ((basisIdxCongr ⋯) (b (IsReindexing.inv ![1, 0] ⋯ 1)))
rfl All goals completed! 🐙
lemma fieldStrengthMatrix_antisymm {d} (A : ElectromagneticPotential d) (x : SpaceTime d)
(μ ν : Fin 1 ⊕ Fin d) :
A.fieldStrengthMatrix x (μ, ν) = - A.fieldStrengthMatrix x (ν, μ) := by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (A.fieldStrengthMatrix x) (μ, ν) = -(A.fieldStrengthMatrix x) (ν, μ)
rw [toFieldStrength_basis_repr_apply, d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) = -(A.fieldStrengthMatrix x) (ν, μ) d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) =
∑ x_1, -(η (ν, μ).1 x_1 * ∂_ x_1 A.val x (ν, μ).2 - η (ν, μ).2 x_1 * ∂_ x_1 A.val x (ν, μ).1) toFieldStrength_basis_repr_apply, d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) =
-∑ κ, (η (ν, μ).1 κ * ∂_ κ A.val x (ν, μ).2 - η (ν, μ).2 κ * ∂_ κ A.val x (ν, μ).1) d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) =
∑ x_1, -(η (ν, μ).1 x_1 * ∂_ x_1 A.val x (ν, μ).2 - η (ν, μ).2 x_1 * ∂_ x_1 A.val x (ν, μ).1)
← Finset.sum_neg_distrib d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) =
∑ x_1, -(η (ν, μ).1 x_1 * ∂_ x_1 A.val x (ν, μ).2 - η (ν, μ).2 x_1 * ∂_ x_1 A.val x (ν, μ).1) d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) =
∑ x_1, -(η (ν, μ).1 x_1 * ∂_ x_1 A.val x (ν, μ).2 - η (ν, μ).2 x_1 * ∂_ x_1 A.val x (ν, μ).1)] d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ∑ κ, (η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1) =
∑ x_1, -(η (ν, μ).1 x_1 * ∂_ x_1 A.val x (ν, μ).2 - η (ν, μ).2 x_1 * ∂_ x_1 A.val x (ν, μ).1)
exact Finset.sum_congr rfl fun κ _ => by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η (μ, ν).1 κ * ∂_ κ A.val x (μ, ν).2 - η (μ, ν).2 κ * ∂_ κ A.val x (μ, ν).1 =
-(η (ν, μ).1 κ * ∂_ κ A.val x (ν, μ).2 - η (ν, μ).2 κ * ∂_ κ A.val x (ν, μ).1) simp All goals completed! 🐙@[simp]
lemma fieldStrengthMatrix_diag_eq_zero {d} (A : ElectromagneticPotential d) (x : SpaceTime d)
(μ : Fin 1 ⊕ Fin d) :
A.fieldStrengthMatrix x (μ, μ) = 0 := by d:ℕA:ElectromagneticPotential dx:SpaceTime dμ:Fin 1 ⊕ Fin d⊢ (A.fieldStrengthMatrix x) (μ, μ) = 0
simp [toFieldStrength_basis_repr_apply_eq_single] All goals completed! 🐙A.8. Equivariance of the field strength matrix
set_option backward.isDefEq.respectTransparency false in
lemma fieldStrengthMatrix_equivariant {d} (A : ElectromagneticPotential d)
(Λ : LorentzGroup d) (hf : Differentiable ℝ A) (x : SpaceTime d)
(μ : (Fin 1 ⊕ Fin d)) (ν : Fin 1 ⊕ Fin d) :
fieldStrengthMatrix (Λ • A) x (μ, ν) =
∑ κ, ∑ ρ, (Λ.1 μ κ * Λ.1 ν ρ) * A.fieldStrengthMatrix (Λ⁻¹ • x) (κ, ρ) := by d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((Λ • A).fieldStrengthMatrix x) (μ, ν) = ∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * (A.fieldStrengthMatrix (Λ⁻¹ • x)) (κ, ρ)
rw [fieldStrengthMatrix, d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((Λ • A).toFieldStrength x)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * (A.fieldStrengthMatrix (Λ⁻¹ • x)) (κ, ρ) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (Λ • A.toFieldStrength (Λ⁻¹ • x))) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * (A.fieldStrengthMatrix (Λ⁻¹ • x)) (κ, ρ) toFieldStrength_equivariant A Λ hf x d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (Λ • A.toFieldStrength (Λ⁻¹ • x))) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * (A.fieldStrengthMatrix (Λ⁻¹ • x)) (κ, ρ) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (Λ • A.toFieldStrength (Λ⁻¹ • x))) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * (A.fieldStrengthMatrix (Λ⁻¹ • x)) (κ, ρ)] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (Λ • A.toFieldStrength (Λ⁻¹ • x))) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * (A.fieldStrengthMatrix (Λ⁻¹ • x)) (κ, ρ)
conv_rhs =>
enter [2, κ, 2, ρ] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dκ:Fin 1 ⊕ Fin dρ:Fin 1 ⊕ Fin d| ↑Λ μ κ * ↑Λ ν ρ * (A.fieldStrengthMatrix (Λ⁻¹ • x)) (κ, ρ)
rw [fieldStrengthMatrix] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dκ:Fin 1 ⊕ Fin dρ:Fin 1 ⊕ Fin d| ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength (Λ⁻¹ • x))) (κ, ρ)
generalize A.toFieldStrength (Λ⁻¹ • x) = F d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)
let P (F : Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d) : Prop :=
((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, Λ.1 μ κ * Λ.1 ν ρ *
((Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr F) (κ, ρ) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)
change P F d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ P F
apply TensorProduct.induction_on zero d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ P 0tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ ∀ (x y : Lorentz.Vector d), P (x ⊗ₜ[ℝ] y)add d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ ∀ (x y : Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d), P x → P y → P (x + y)
· zero d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ P 0 simp [P] All goals completed! 🐙
· tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ ∀ (x y : Lorentz.Vector d), P (x ⊗ₜ[ℝ] y) intro x y tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ P (x ⊗ₜ[ℝ] y)
dsimp [P] tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr (Λ • x ⊗ₜ[ℝ] y)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr (x ⊗ₜ[ℝ] y)) (κ, ρ)
rw [Tensorial.smul_prod tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((Λ • x) ⊗ₜ[ℝ] (Λ • y))) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr (x ⊗ₜ[ℝ] y)) (κ, ρ) tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((Λ • x) ⊗ₜ[ℝ] (Λ • y))) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr (x ⊗ₜ[ℝ] y)) (κ, ρ)]tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((Λ • x) ⊗ₜ[ℝ] (Λ • y))) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr (x ⊗ₜ[ℝ] y)) (κ, ρ)
simp only [Basis.tensorProduct_repr_tmul_apply, Lorentz.Vector.basis_repr_apply,
Lorentz.CoVector.basis_repr_apply, smul_eq_mul] tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ (Λ • y) ν * (Λ • x) μ = ∑ x_1, ∑ x_2, ↑Λ μ x_1 * ↑Λ ν x_2 * (y x_2 * x x_1)
rw [Lorentz.Vector.smul_eq_sum, tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ (∑ j, ↑Λ ν j * y j) * (Λ • x) μ = ∑ x_1, ∑ x_2, ↑Λ μ x_1 * ↑Λ ν x_2 * (y x_2 * x x_1) tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ∑ i, ↑Λ ν i * y i * (Λ • x) μ = ∑ x_1, ∑ x_2, ↑Λ μ x_1 * ↑Λ ν x_2 * (y x_2 * x x_1) Finset.sum_mul tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ∑ i, ↑Λ ν i * y i * (Λ • x) μ = ∑ x_1, ∑ x_2, ↑Λ μ x_1 * ↑Λ ν x_2 * (y x_2 * x x_1)tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ∑ i, ↑Λ ν i * y i * (Λ • x) μ = ∑ x_1, ∑ x_2, ↑Λ μ x_1 * ↑Λ ν x_2 * (y x_2 * x x_1)]tmul d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d⊢ ∑ i, ↑Λ ν i * y i * (Λ • x) μ = ∑ x_1, ∑ x_2, ↑Λ μ x_1 * ↑Λ ν x_2 * (y x_2 * x x_1)
conv_rhs => rw [Finset.sum_comm] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector d| ∑ y_1, ∑ x_1, ↑Λ μ x_1 * ↑Λ ν y_1 * (y y_1 * x x_1)
apply Finset.sum_congr rfl (fun κ _ => ?_) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝¹:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector dκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ↑Λ ν κ * y κ * (Λ • x) μ = ∑ x_1, ↑Λ μ x_1 * ↑Λ ν κ * (y κ * x x_1)
rw [Lorentz.Vector.smul_eq_sum, d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝¹:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector dκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ↑Λ ν κ * y κ * ∑ j, ↑Λ μ j * x j = ∑ x_1, ↑Λ μ x_1 * ↑Λ ν κ * (y κ * x x_1) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝¹:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector dκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ i, ↑Λ ν κ * y κ * (↑Λ μ i * x i) = ∑ x_1, ↑Λ μ x_1 * ↑Λ ν κ * (y κ * x x_1) Finset.mul_sum d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝¹:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector dκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ i, ↑Λ ν κ * y κ * (↑Λ μ i * x i) = ∑ x_1, ↑Λ μ x_1 * ↑Λ ν κ * (y κ * x x_1) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝¹:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector dκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ i, ↑Λ ν κ * y κ * (↑Λ μ i * x i) = ∑ x_1, ↑Λ μ x_1 * ↑Λ ν κ * (y κ * x x_1)] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝¹:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector dκ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ i, ↑Λ ν κ * y κ * (↑Λ μ i * x i) = ∑ x_1, ↑Λ μ x_1 * ↑Λ ν κ * (y κ * x x_1)
exact Finset.sum_congr rfl fun ρ _ => by d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx✝²:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)x:Lorentz.Vector dy:Lorentz.Vector dκ:Fin 1 ⊕ Fin dx✝¹:κ ∈ Finset.univρ:Fin 1 ⊕ Fin dx✝:ρ ∈ Finset.univ⊢ ↑Λ ν κ * y κ * (↑Λ μ ρ * x ρ) = ↑Λ μ ρ * ↑Λ ν κ * (y κ * x ρ) ring All goals completed! 🐙
· add d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)⊢ ∀ (x y : Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d), P x → P y → P (x + y) intro F1 F2 h1 h2 add d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2⊢ P (F1 + F2)
simp [P, h1, h2] add d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2⊢ ∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, ρ) +
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, ρ) =
∑ x,
∑ x_1,
↑Λ μ x * ↑Λ ν x_1 *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (x, x_1) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (x, x_1))
rw [← Finset.sum_add_distrib add d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2⊢ ∑ x,
(∑ ρ, ↑Λ μ x * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (x, ρ) +
∑ ρ, ↑Λ μ x * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (x, ρ)) =
∑ x,
∑ x_1,
↑Λ μ x * ↑Λ ν x_1 *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (x, x_1) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (x, x_1)) add d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2⊢ ∑ x,
(∑ ρ, ↑Λ μ x * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (x, ρ) +
∑ ρ, ↑Λ μ x * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (x, ρ)) =
∑ x,
∑ x_1,
↑Λ μ x * ↑Λ ν x_1 *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (x, x_1) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (x, x_1))]add d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2⊢ ∑ x,
(∑ ρ, ↑Λ μ x * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (x, ρ) +
∑ ρ, ↑Λ μ x * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (x, ρ)) =
∑ x,
∑ x_1,
↑Λ μ x * ↑Λ ν x_1 *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (x, x_1) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (x, x_1))
apply Finset.sum_congr rfl (fun κ _ => ?_) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, ρ) +
∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, ρ) =
∑ x,
↑Λ μ κ * ↑Λ ν x *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, x) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, x))
rw [← Finset.sum_add_distrib d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ x,
(↑Λ μ κ * ↑Λ ν x * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, x) +
↑Λ μ κ * ↑Λ ν x * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, x)) =
∑ x,
↑Λ μ κ * ↑Λ ν x *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, x) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, x)) d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ x,
(↑Λ μ κ * ↑Λ ν x * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, x) +
↑Λ μ κ * ↑Λ ν x * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, x)) =
∑ x,
↑Λ μ κ * ↑Λ ν x *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, x) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, x))] d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ ∑ x,
(↑Λ μ κ * ↑Λ ν x * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, x) +
↑Λ μ κ * ↑Λ ν x * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, x)) =
∑ x,
↑Λ μ κ * ↑Λ ν x *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, x) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, x))
exact Finset.sum_congr rfl fun ρ _ => by d:ℕA:ElectromagneticPotential dΛ:↑(LorentzGroup d)hf:Differentiable ℝ A.valx:SpaceTime dμ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dF:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dP:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector d → Prop :=
fun F =>
((CoVector.basis.tensorProduct Vector.basis).repr (Λ • F)) (μ, ν) =
∑ κ, ∑ ρ, ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F) (κ, ρ)F1:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dF2:Lorentz.Vector d ⊗[ℝ] Lorentz.Vector dh1:P F1h2:P F2κ:Fin 1 ⊕ Fin dx✝¹:κ ∈ Finset.univρ:Fin 1 ⊕ Fin dx✝:ρ ∈ Finset.univ⊢ ↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, ρ) +
↑Λ μ κ * ↑Λ ν ρ * ((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, ρ) =
↑Λ μ κ * ↑Λ ν ρ *
(((CoVector.basis.tensorProduct Vector.basis).repr F1) (κ, ρ) +
((CoVector.basis.tensorProduct Vector.basis).repr F2) (κ, ρ)) ring All goals completed! 🐙A.9. Linearity of the field strength tensor
We show that the field strength tensor is linear in the potential.
set_option backward.isDefEq.respectTransparency false in
lemma toFieldStrength_add {d} (A1 A2 : ElectromagneticPotential d)
(x : SpaceTime d) (hA1 : Differentiable ℝ A1) (hA2 : Differentiable ℝ A2) :
toFieldStrength (A1 + A2) x = toFieldStrength A1 x + toFieldStrength A2 x := by d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.val⊢ (A1 + A2).toFieldStrength x = A1.toFieldStrength x + A2.toFieldStrength x
apply (Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr.injective d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.val⊢ (CoVector.basis.tensorProduct Vector.basis).repr ((A1 + A2).toFieldStrength x) =
(CoVector.basis.tensorProduct Vector.basis).repr (A1.toFieldStrength x + A2.toFieldStrength x)
ext μν d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((A1 + A2).toFieldStrength x)) μν =
((CoVector.basis.tensorProduct Vector.basis).repr (A1.toFieldStrength x + A2.toFieldStrength x)) μν
simp only [map_add, Finsupp.coe_add, Pi.add_apply] d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((A1 + A2).toFieldStrength x)) μν =
((CoVector.basis.tensorProduct Vector.basis).repr (A1.toFieldStrength x)) μν +
((CoVector.basis.tensorProduct Vector.basis).repr (A2.toFieldStrength x)) μν
repeat rw [toFieldStrength_basis_repr_apply d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
((CoVector.basis.tensorProduct Vector.basis).repr (A1.toFieldStrength x)) μν +
((CoVector.basis.tensorProduct Vector.basis).repr (A2.toFieldStrength x)) μν d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
∑ κ, (η μν.1 κ * ∂_ κ A1.val x μν.2 - η μν.2 κ * ∂_ κ A1.val x μν.1) +
∑ κ, (η μν.1 κ * ∂_ κ A2.val x μν.2 - η μν.2 κ * ∂_ κ A2.val x μν.1)] d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
∑ κ, (η μν.1 κ * ∂_ κ A1.val x μν.2 - η μν.2 κ * ∂_ κ A1.val x μν.1) +
((CoVector.basis.tensorProduct Vector.basis).repr (A2.toFieldStrength x)) μν d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
∑ κ, (η μν.1 κ * ∂_ κ A1.val x μν.2 - η μν.2 κ * ∂_ κ A1.val x μν.1) +
∑ κ, (η μν.1 κ * ∂_ κ A2.val x μν.2 - η μν.2 κ * ∂_ κ A2.val x μν.1) d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
∑ κ, (η μν.1 κ * ∂_ κ A1.val x μν.2 - η μν.2 κ * ∂_ κ A1.val x μν.1) +
∑ κ, (η μν.1 κ * ∂_ κ A2.val x μν.2 - η μν.2 κ * ∂_ κ A2.val x μν.1)
rw [← Finset.sum_add_distrib d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
∑ x_1,
(η μν.1 x_1 * ∂_ x_1 A1.val x μν.2 - η μν.2 x_1 * ∂_ x_1 A1.val x μν.1 +
(η μν.1 x_1 * ∂_ x_1 A2.val x μν.2 - η μν.2 x_1 * ∂_ x_1 A2.val x μν.1)) d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
∑ x_1,
(η μν.1 x_1 * ∂_ x_1 A1.val x μν.2 - η μν.2 x_1 * ∂_ x_1 A1.val x μν.1 +
(η μν.1 x_1 * ∂_ x_1 A2.val x μν.2 - η μν.2 x_1 * ∂_ x_1 A2.val x μν.1))] d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1) =
∑ x_1,
(η μν.1 x_1 * ∂_ x_1 A1.val x μν.2 - η μν.2 x_1 * ∂_ x_1 A1.val x μν.1 +
(η μν.1 x_1 * ∂_ x_1 A2.val x μν.2 - η μν.2 x_1 * ∂_ x_1 A2.val x μν.1))
apply Finset.sum_congr rfl (fun κ _ => ?_) d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * ∂_ κ (A1 + A2).val x μν.2 - η μν.2 κ * ∂_ κ (A1 + A2).val x μν.1 =
η μν.1 κ * ∂_ κ A1.val x μν.2 - η μν.2 κ * ∂_ κ A1.val x μν.1 +
(η μν.1 κ * ∂_ κ A2.val x μν.2 - η μν.2 κ * ∂_ κ A2.val x μν.1)
repeat rw [SpaceTime.deriv_eq d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.1 =
η μν.1 κ * ∂_ κ A1.val x μν.2 - η μν.2 κ * ∂_ κ A1.val x μν.1 +
(η μν.1 κ * ∂_ κ A2.val x μν.2 - η μν.2 κ * ∂_ κ A2.val x μν.1) d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1)] d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * ∂_ κ A2.val x μν.2 - η μν.2 κ * ∂_ κ A2.val x μν.1) d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1) d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ (A1 + A2).val x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1)
simp only [add_val] d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (A1.val + A2.val) x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ (A1.val + A2.val) x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1)
rw [fderiv_add hA1.differentiableAt hA2.differentiableAt d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ A1.val x + fderiv ℝ A2.val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ A1.val x + fderiv ℝ A2.val x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1) d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ A1.val x + fderiv ℝ A2.val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ A1.val x + fderiv ℝ A2.val x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1)] d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ A1.val x + fderiv ℝ A2.val x) (Vector.basis κ) μν.2 -
η μν.2 κ * (fderiv ℝ A1.val x + fderiv ℝ A2.val x) (Vector.basis κ) μν.1 =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1)
simp only [_root_.add_apply, Lorentz.Vector.apply_add] d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * ((fderiv ℝ A1.val x) (Vector.basis κ) μν.2 + (fderiv ℝ A2.val x) (Vector.basis κ) μν.2) -
η μν.2 κ * ((fderiv ℝ A1.val x) (Vector.basis κ) μν.1 + (fderiv ℝ A2.val x) (Vector.basis κ) μν.1) =
η μν.1 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A1.val x) (Vector.basis κ) μν.1 +
(η μν.1 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A2.val x) (Vector.basis κ) μν.1)
ring All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
lemma fieldStrengthMatrix_add {d} (A1 A2 : ElectromagneticPotential d)
(x : SpaceTime d) (hA1 : Differentiable ℝ A1) (hA2 : Differentiable ℝ A2) :
(A1 + A2).fieldStrengthMatrix x =
A1.fieldStrengthMatrix x + A2.fieldStrengthMatrix x := by d:ℕA1:ElectromagneticPotential dA2:ElectromagneticPotential dx:SpaceTime dhA1:Differentiable ℝ A1.valhA2:Differentiable ℝ A2.val⊢ (A1 + A2).fieldStrengthMatrix x = A1.fieldStrengthMatrix x + A2.fieldStrengthMatrix x
simp [fieldStrengthMatrix, toFieldStrength_add A1 A2 x hA1 hA2] All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma toFieldStrength_smul {d} (c : ℝ) (A : ElectromagneticPotential d)
(x : SpaceTime d) (hA : Differentiable ℝ A) :
toFieldStrength (c • A) x = c • toFieldStrength A x := by d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.val⊢ (c • A).toFieldStrength x = c • A.toFieldStrength x
apply (Lorentz.CoVector.basis.tensorProduct Lorentz.Vector.basis).repr.injective d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.val⊢ (CoVector.basis.tensorProduct Vector.basis).repr ((c • A).toFieldStrength x) =
(CoVector.basis.tensorProduct Vector.basis).repr (c • A.toFieldStrength x)
ext μν d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((c • A).toFieldStrength x)) μν =
((CoVector.basis.tensorProduct Vector.basis).repr (c • A.toFieldStrength x)) μν
simp only [map_smul, Finsupp.coe_smul, Pi.smul_apply, smul_eq_mul] d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ((CoVector.basis.tensorProduct Vector.basis).repr ((c • A).toFieldStrength x)) μν =
c * ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) μν
repeat rw [toFieldStrength_basis_repr_apply d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
c * ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) μν d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
c * ∑ κ, (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1)] d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
c * ((CoVector.basis.tensorProduct Vector.basis).repr (A.toFieldStrength x)) μν d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
c * ∑ κ, (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1) d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
c * ∑ κ, (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1)
rw [Finset.mul_sum d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
∑ i, c * (η μν.1 i * ∂_ i A.val x μν.2 - η μν.2 i * ∂_ i A.val x μν.1) d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
∑ i, c * (η μν.1 i * ∂_ i A.val x μν.2 - η μν.2 i * ∂_ i A.val x μν.1)] d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)⊢ ∑ κ, (η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1) =
∑ i, c * (η μν.1 i * ∂_ i A.val x μν.2 - η μν.2 i * ∂_ i A.val x μν.1)
apply Finset.sum_congr rfl (fun κ _ => ?_) d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * ∂_ κ (c • A).val x μν.2 - η μν.2 κ * ∂_ κ (c • A).val x μν.1 =
c * (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1)
repeat rw [SpaceTime.deriv_eq d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1) d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1)] d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * ∂_ κ A.val x μν.2 - η μν.2 κ * ∂_ κ A.val x μν.1) d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1) d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ (c • A).val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1)
simp only [smul_val] d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (fderiv ℝ (c • A.val) x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ (c • A.val) x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1)
rw [fderiv_const_smul hA.differentiableAt d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (c • fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (c • fderiv ℝ A.val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1) d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (c • fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (c • fderiv ℝ A.val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1)] d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (c • fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (c • fderiv ℝ A.val x) (Vector.basis κ) μν.1 =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1)
simp only [FunLike.coe_smul, Pi.smul_apply, Lorentz.Vector.apply_smul] d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.valμν:(Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)κ:Fin 1 ⊕ Fin dx✝:κ ∈ Finset.univ⊢ η μν.1 κ * (c * (fderiv ℝ A.val x) (Vector.basis κ) μν.2) - η μν.2 κ * (c * (fderiv ℝ A.val x) (Vector.basis κ) μν.1) =
c * (η μν.1 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.2 - η μν.2 κ * (fderiv ℝ A.val x) (Vector.basis κ) μν.1)
ring All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
lemma fieldStrengthMatrix_smul {d} (c : ℝ) (A : ElectromagneticPotential d)
(x : SpaceTime d) (hA : Differentiable ℝ A) :
(c • A).fieldStrengthMatrix x = c • A.fieldStrengthMatrix x := by d:ℕc:ℝA:ElectromagneticPotential dx:SpaceTime dhA:Differentiable ℝ A.val⊢ (c • A).fieldStrengthMatrix x = c • A.fieldStrengthMatrix x
simp [fieldStrengthMatrix, toFieldStrength_smul c A x hA] All goals completed! 🐙