Imports
/- Copyright (c) 2024 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 Mathlib.Analysis.Complex.Basic public import Mathlib.Data.Matrix.Reflection public import Mathlib.LinearAlgebra.CliffordAlgebra.Basic public import Physlib.Meta.TODO.Basic

The Clifford Algebra

This file defines the Gamma matrices and their relationship to the Clifford algebra.

Main Definitions

    γ0, γ1, γ2, γ3: The four gamma matrices in the Dirac representation (4×4 complex matrices)

    γSet: The set of gamma matrices

    diracForm: The quadratic form with Minkowski signature (+,-,-,-) corresponding to the gamma matrices

    diracAlgebra: The algebra generated by the gamma matrices over ℝ

    ofCliffordAlgebra: The algebra homomorphism from the Clifford algebra to diracAlgebra

Main Results

    ofCliffordAlgebra_surjective: The homomorphism ofCliffordAlgebra is surjective

TODO

    Complete the isomorphism by proving injectivity of ofCliffordAlgebra (requires dimension theory)

    Construct the AlgEquiv between CliffordAlgebra diracForm and diracAlgebra

@[expose] public sectionTODO "Prove injectivity of ofCliffordAlgebra and construct the full isomorphism."

The γ⁰ gamma matrix in the Dirac representation.

def γ0 : Matrix (Fin 4) (Fin 4) := !![1, 0, 0, 0; 0, 1, 0, 0; 0, 0, -1, 0; 0, 0, 0, -1]

The γ¹ gamma matrix in the Dirac representation.

def γ1 : Matrix (Fin 4) (Fin 4) := !![0, 0, 0, 1; 0, 0, 1, 0; 0, -1, 0, 0; -1, 0, 0, 0]

The γ² gamma matrix in the Dirac representation.

def γ2 : Matrix (Fin 4) (Fin 4) := !![0, 0, 0, - I; 0, 0, I, 0; 0, I, 0, 0; -I, 0, 0, 0]

The γ³ gamma matrix in the Dirac representation.

def γ3 : Matrix (Fin 4) (Fin 4) := !![0, 0, 1, 0; 0, 0, 0, -1; -1, 0, 0, 0; 0, 1, 0, 0]
theorem _root_.Matrix.one_fin_four {α} [Zero α] [One α] : (1 : Matrix (Fin 4) (Fin 4) α) = !![1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0; 0, 0, 0, 1] := Matrix.etaExpand_eq _ |>.symm@[simp] lemma γ0_mul_γ0 : γ0 * γ0 = 1 := γ0 * γ0 = 1 All goals completed! 🐙@[simp] lemma γ1_mul_γ1 : γ1 * γ1 = -1 := γ1 * γ1 = -1 All goals completed! 🐙@[simp] lemma γ2_mul_γ2 : γ2 * γ2 = -1 := γ2 * γ2 = -1 All goals completed! 🐙@[simp] lemma γ3_mul_γ3 : γ3 * γ3 = -1 := γ3 * γ3 = -1 All goals completed! 🐙@[simp] lemma γ1_mul_γ0 : γ1 * γ0 = -(γ0 * γ1) := γ1 * γ0 = -(γ0 * γ1) All goals completed! 🐙@[simp] lemma γ2_mul_γ0 : γ2 * γ0 = -(γ0 * γ2) := γ2 * γ0 = -(γ0 * γ2) All goals completed! 🐙@[simp] lemma γ3_mul_γ0 : γ3 * γ0 = -(γ0 * γ3) := γ3 * γ0 = -(γ0 * γ3) All goals completed! 🐙@[simp] lemma γ2_mul_γ1 : γ2 * γ1 = -(γ1 * γ2) := γ2 * γ1 = -(γ1 * γ2) All goals completed! 🐙@[simp] lemma γ3_mul_γ1 : γ3 * γ1 = -(γ1 * γ3) := γ3 * γ1 = -(γ1 * γ3) All goals completed! 🐙@[simp] lemma γ3_mul_γ2 : γ3 * γ2 = -(γ2 * γ3) := γ3 * γ2 = -(γ2 * γ3) All goals completed! 🐙

The γ⁵ gamma matrix in the Dirac representation.

def γ5 : Matrix (Fin 4) (Fin 4) := I (γ0 * γ1 * γ2 * γ3)

The γ gamma matrices in the Dirac representation.

@[simp] def γ : Fin 4 Matrix (Fin 4) (Fin 4) := ![γ0, γ1, γ2, γ3]

The subset of Matrix (Fin 4) (Fin 4) ℂ formed by the gamma matrices in the Dirac representation.

@[simp] def γSet : Set (Matrix (Fin 4) (Fin 4) ) := {γ i | i : Fin 4}
lemma γ_in_γSet (μ : Fin 4) : γ μ γSet := μ:Fin 4γ μ γSet All goals completed! 🐙

The algebra generated by the gamma matrices in the Dirac representation.

def diracAlgebra : Subalgebra (Matrix (Fin 4) (Fin 4) ) := Algebra.adjoin γSet
lemma γSet_subset_diracAlgebra : γSet diracAlgebra := Algebra.subset_adjoinlemma γ_in_diracAlgebra (μ : Fin 4) : γ μ diracAlgebra := γSet_subset_diracAlgebra (γ_in_γSet μ)

The quadratic form of the clifford algebra corresponding to the γ matrices.

@[simps!] def diracForm : QuadraticForm (Fin 4 ) := QuadraticMap.sq.comp (LinearMap.proj 0) - QuadraticMap.sq.comp (LinearMap.proj 1) - QuadraticMap.sq.comp (LinearMap.proj 2) - QuadraticMap.sq.comp (LinearMap.proj 3)

The injection from the clifford algebra over diracForm into the algebra generated by the γ matrices.

def ofCliffordAlgebra : CliffordAlgebra diracForm →ₐ[] diracAlgebra := CliffordAlgebra.lift _ i, (LinearMap.proj i).smulRight γ i, γ_in_diracAlgebra _, fun v => μ:Fin 4ν:Fin 4v:Fin 4 (∑ i, (LinearMap.proj i).smulRight γ i, ) v * (∑ i, (LinearMap.proj i).smulRight γ i, ) v = (algebraMap diracAlgebra) (diracForm v) μ:Fin 4ν:Fin 4v:Fin 4 ((∑ i, (LinearMap.proj i).smulRight γ i, ) v * (∑ i, (LinearMap.proj i).smulRight γ i, ) v) = ((algebraMap diracAlgebra) (diracForm v)) μ:Fin 4ν:Fin 4v:Fin 4 v 0 v 0 1 + -(v 0 v 1 (γ0 * γ1)) + -(v 0 v 2 (γ0 * γ2)) + -(v 0 v 3 (γ0 * γ3)) + (v 1 v 0 (γ0 * γ1) + -(v 1 v 1 1) + -(v 1 v 2 (γ1 * γ2)) + -(v 1 v 3 (γ1 * γ3))) + (v 2 v 0 (γ0 * γ2) + v 2 v 1 (γ1 * γ2) + -(v 2 v 2 1) + -(v 2 v 3 (γ2 * γ3))) + (v 3 v 0 (γ0 * γ3) + v 3 v 1 (γ1 * γ3) + v 3 v 2 (γ2 * γ3) + -(v 3 v 3 1)) = (v 0 * v 0 - v 1 * v 1 - v 2 * v 2 - v 3 * v 3) 1 All goals completed! 🐙

The generators of the clifford algebra correspond to the elements γ.

i:Fin 4r:Pi.single i r i ![γ0, γ1, γ2, γ3] i = r ![γ0, γ1, γ2, γ3] ii:Fin 4r: b Finset.univ, b i Pi.single i r b ![γ0, γ1, γ2, γ3] b = 0i:Fin 4r:i Finset.univ Pi.single i r i ![γ0, γ1, γ2, γ3] i = 0 i:Fin 4r:Pi.single i r i ![γ0, γ1, γ2, γ3] i = r ![γ0, γ1, γ2, γ3] i All goals completed! 🐙 i:Fin 4r: b Finset.univ, b i Pi.single i r b ![γ0, γ1, γ2, γ3] b = 0 i:Fin 4r:b:Fin 4a✝:b Finset.univhb:b iPi.single i r b ![γ0, γ1, γ2, γ3] b = 0 All goals completed! 🐙 i:Fin 4r:i Finset.univ Pi.single i r i ![γ0, γ1, γ2, γ3] i = 0 All goals completed! 🐙

Surjectivity of ofCliffordAlgebra

Each gamma matrix (as an element of diracAlgebra) is in the range of ofCliffordAlgebra.

lemma γ_subtype_in_range (i : Fin 4) : γ i, γ_in_diracAlgebra i ofCliffordAlgebra.range := i:Fin 4γ i, ofCliffordAlgebra.range i:Fin 4ofCliffordAlgebra.toRingHom ((CliffordAlgebra.ι diracForm) (Pi.single i 1)) = γ i, All goals completed! 🐙

Helper lemma: If a matrix is in Algebra.adjoin ℝ γSet, then its subtype is in the range.

private lemma mem_adjoin_imp_subtype_in_range (m : Matrix (Fin 4) (Fin 4) ) (hm : m Algebra.adjoin γSet) : m, hm ofCliffordAlgebra.range := m:Matrix (Fin 4) (Fin 4) hm:m Algebra.adjoin γSetm, hm ofCliffordAlgebra.range induction hm using Algebra.adjoin_induction with m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) hy:y γSety, ofCliffordAlgebra.range -- y ∈ γSet, so y = γ i for some i m:Matrix (Fin 4) (Fin 4) i:Fin 4γ i, ofCliffordAlgebra.range All goals completed! 🐙 m:Matrix (Fin 4) (Fin 4) r:(algebraMap (Matrix (Fin 4) (Fin 4) )) r, ofCliffordAlgebra.range -- r from ℝ m:Matrix (Fin 4) (Fin 4) r:ofCliffordAlgebra.toRingHom ((algebraMap (CliffordAlgebra diracForm)) r) = (algebraMap (Matrix (Fin 4) (Fin 4) )) r, m:Matrix (Fin 4) (Fin 4) r:i✝:Fin 4j✝:Fin 4(ofCliffordAlgebra.toRingHom ((algebraMap (CliffordAlgebra diracForm)) r)) i✝ j✝ = (algebraMap (Matrix (Fin 4) (Fin 4) )) r, i✝ j✝ All goals completed! 🐙 m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSethy:y, hx✝ ofCliffordAlgebra.rangehz:z, hy✝ ofCliffordAlgebra.rangey + z, ofCliffordAlgebra.range -- If y and z are in range, so is y + z m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSethz:z, hy✝ ofCliffordAlgebra.rangey':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝y + z, ofCliffordAlgebra.range m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝y + z, ofCliffordAlgebra.range m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝ofCliffordAlgebra.toRingHom (y' + z') = y + z, m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝(ofCliffordAlgebra.toRingHom (y' + z')) = y + z, m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝hy'':(ofCliffordAlgebra y') = y(ofCliffordAlgebra.toRingHom (y' + z')) = y + z, m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝hy'':(ofCliffordAlgebra y') = yhz'':(ofCliffordAlgebra z') = z(ofCliffordAlgebra.toRingHom (y' + z')) = y + z, All goals completed! 🐙 m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSethy:y, hx✝ ofCliffordAlgebra.rangehz:z, hy✝ ofCliffordAlgebra.rangey * z, ofCliffordAlgebra.range -- If y and z are in range, so is y * z m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSethz:z, hy✝ ofCliffordAlgebra.rangey':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝y * z, ofCliffordAlgebra.range m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝y * z, ofCliffordAlgebra.range m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝ofCliffordAlgebra.toRingHom (y' * z') = y * z, m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝(ofCliffordAlgebra.toRingHom (y' * z')) = y * z, m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝hy'':(ofCliffordAlgebra y') = y(ofCliffordAlgebra.toRingHom (y' * z')) = y * z, m:Matrix (Fin 4) (Fin 4) y:Matrix (Fin 4) (Fin 4) z:Matrix (Fin 4) (Fin 4) hx✝:y Algebra.adjoin γSethy✝:z Algebra.adjoin γSety':CliffordAlgebra diracFormhy':ofCliffordAlgebra.toRingHom y' = y, hx✝z':CliffordAlgebra diracFormhz':ofCliffordAlgebra.toRingHom z' = z, hy✝hy'':(ofCliffordAlgebra y') = yhz'':(ofCliffordAlgebra z') = z(ofCliffordAlgebra.toRingHom (y' * z')) = y * z, All goals completed! 🐙

The range of ofCliffordAlgebra equals the top subalgebra (i.e., all of diracAlgebra).

ofCliffordAlgebra.range x:diracAlgebraa✝:x x ofCliffordAlgebra.range All goals completed! 🐙

The homomorphism ofCliffordAlgebra is surjective.

ofCliffordAlgebra.range = All goals completed! 🐙