PhysLean/HepLean/FlavorPhysics/CKMMatrix/Basic.lean

401 lines
15 KiB
Text
Raw Normal View History

/-
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license.
Authors: Joseph Tooby-Smith
-/
import Mathlib.LinearAlgebra.UnitaryGroup
import Mathlib.Data.Complex.Exponential
import Mathlib.Tactic.Polyrith
2024-04-29 10:42:44 -04:00
/-!
# The CKM Matrix
2024-05-20 00:19:36 +02:00
The definition of the type of CKM matrices as unitary $3×3$-matrices.
2024-04-29 10:42:44 -04:00
An equivalence relation on CKM matrices is defined, where two matrices are equivalent if they are
related by phase shifts.
The notation `[V]ud` etc can be used for the elements of a CKM matrix, and
`[V]ud|us` etc for the ratios of elements.
-/
open Matrix Complex
noncomputable section
2024-04-29 10:42:44 -04:00
/-- Given three real numbers `a b c` the complex matrix with `exp (I * a)` etc on the
leading diagonal. -/
@[simp]
def phaseShiftMatrix (a b c : ) : Matrix (Fin 3) (Fin 3) :=
2024-04-29 08:13:52 -04:00
![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]]
lemma phaseShiftMatrix_one : phaseShiftMatrix 0 0 0 = 1 := by
ext i j
fin_cases i <;> fin_cases j <;>
simp [Matrix.one_apply, phaseShiftMatrix]
rfl
lemma phaseShiftMatrix_star (a b c : ) :
(phaseShiftMatrix a b c)ᴴ = phaseShiftMatrix (- a) (- b) (- c) := by
funext i j
fin_cases i <;> fin_cases j <;>
simp [← exp_conj, conj_ofReal]
rfl
rfl
lemma phaseShiftMatrix_mul (a b c d e f : ) :
phaseShiftMatrix a b c * phaseShiftMatrix d e f = phaseShiftMatrix (a + d) (b + e) (c + f) := by
ext i j
fin_cases i <;> fin_cases j <;>
simp [Matrix.mul_apply, Fin.sum_univ_three]
any_goals rw [mul_add, exp_add]
change cexp (I * ↑c) * 0 = 0
simp
2024-04-29 10:42:44 -04:00
/-- Given three real numbers `a b c` the unitary matrix with `exp (I * a)` etc on the
leading diagonal. -/
@[simps!]
def phaseShift (a b c : ) : unitaryGroup (Fin 3) :=
⟨phaseShiftMatrix a b c,
by
rw [mem_unitaryGroup_iff]
change _ * (phaseShiftMatrix a b c)ᴴ = 1
rw [phaseShiftMatrix_star, phaseShiftMatrix_mul, ← phaseShiftMatrix_one]
simp only [phaseShiftMatrix, add_right_neg, ofReal_zero, mul_zero, exp_zero]⟩
lemma phaseShift_coe_matrix (a b c : ) : ↑(phaseShift a b c) = phaseShiftMatrix a b c := rfl
2024-04-29 10:42:44 -04:00
/-- The equivalence relation between CKM matrices. -/
def PhaseShiftRelation (U V : unitaryGroup (Fin 3) ) : Prop :=
∃ a b c e f g , U = phaseShift a b c * V * phaseShift e f g
lemma phaseShiftRelation_refl (U : unitaryGroup (Fin 3) ) : PhaseShiftRelation U U := by
use 0, 0, 0, 0, 0, 0
rw [Subtype.ext_iff_val]
simp only [Submonoid.coe_mul, phaseShift_coe_matrix, ofReal_zero, mul_zero, exp_zero]
rw [phaseShiftMatrix_one]
simp only [one_mul, mul_one]
lemma phaseShiftRelation_symm {U V : unitaryGroup (Fin 3) } :
PhaseShiftRelation U V → PhaseShiftRelation V U := by
intro h
obtain ⟨a, b, c, e, f, g, h⟩ := h
use (- a), (- b), (- c), (- e), (- f), (- g)
rw [Subtype.ext_iff_val]
rw [h]
repeat rw [mul_assoc]
simp only [Submonoid.coe_mul, phaseShift_coe_matrix, ofReal_neg, mul_neg]
rw [phaseShiftMatrix_mul]
repeat rw [← mul_assoc]
simp only [phaseShiftMatrix_mul, add_left_neg, phaseShiftMatrix_one, one_mul, add_right_neg,
mul_one]
lemma phaseShiftRelation_trans {U V W : unitaryGroup (Fin 3) } :
PhaseShiftRelation U V → PhaseShiftRelation V W → PhaseShiftRelation U W := by
intro hUV hVW
obtain ⟨a, b, c, e, f, g, hUV⟩ := hUV
obtain ⟨d, i, j, k, l, m, hVW⟩ := hVW
use (a + d), (b + i), (c + j), (e + k), (f + l), (g + m)
rw [Subtype.ext_iff_val]
rw [hUV, hVW]
simp only [Submonoid.coe_mul, phaseShift_coe_matrix]
repeat rw [mul_assoc]
rw [phaseShiftMatrix_mul]
repeat rw [← mul_assoc]
rw [phaseShiftMatrix_mul]
rw [add_comm k e, add_comm l f, add_comm m g]
lemma phaseShiftRelation_equiv : Equivalence PhaseShiftRelation where
refl := phaseShiftRelation_refl
symm := phaseShiftRelation_symm
trans := phaseShiftRelation_trans
2024-04-29 10:42:44 -04:00
/-- The type of CKM matrices. -/
def CKMMatrix : Type := unitaryGroup (Fin 3)
lemma CKMMatrix_ext {U V : CKMMatrix} (h : U.val = V.val) : U = V := by
cases U; cases V
simp at h
subst h
rfl
2024-04-29 10:42:44 -04:00
/-- The `ud`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := ud_element) "[" V "]ud" => V.1 0 0
2024-04-29 10:42:44 -04:00
/-- The `us`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := us_element) "[" V "]us" => V.1 0 1
2024-04-29 10:42:44 -04:00
/-- The `ub`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := ub_element) "[" V "]ub" => V.1 0 2
2024-04-29 10:42:44 -04:00
/-- The `cd`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := cd_element) "[" V "]cd" => V.1 1 0
2024-04-29 10:42:44 -04:00
/-- The `cs`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := cs_element) "[" V "]cs" => V.1 1 1
2024-04-29 10:42:44 -04:00
/-- The `cb`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := cb_element) "[" V "]cb" => V.1 1 2
2024-04-29 10:42:44 -04:00
/-- The `td`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := td_element) "[" V "]td" => V.1 2 0
2024-04-29 10:42:44 -04:00
/-- The `ts`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := ts_element) "[" V "]ts" => V.1 2 1
2024-04-29 10:42:44 -04:00
/-- The `tb`th element of the CKM matrix. -/
scoped[CKMMatrix] notation (name := tb_element) "[" V "]tb" => V.1 2 2
instance CKMMatrixSetoid : Setoid CKMMatrix := ⟨PhaseShiftRelation, phaseShiftRelation_equiv⟩
2024-04-29 10:42:44 -04:00
/-- The matrix obtained from `V` by shifting the phases of the fermions. -/
@[simps!]
def phaseShiftApply (V : CKMMatrix) (a b c d e f : ) : CKMMatrix :=
phaseShift a b c * ↑V * phaseShift d e f
namespace phaseShiftApply
lemma equiv (V : CKMMatrix) (a b c d e f : ) :
V ≈ phaseShiftApply V a b c d e f := by
symm
use a, b, c, d, e, f
rfl
lemma ud (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 0 0 = cexp (a * I + d * I) * V.1 0 0 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_one, head_cons, zero_mul, add_zero, cons_val_two, tail_cons, head_fin_const, mul_zero,
tail_val', head_val']
change _ + _ * _ * 0 = _
rw [exp_add]
ring_nf
lemma us (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 0 1 = cexp (a * I + e * I) * V.1 0 1 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_one, head_cons, zero_mul, add_zero, cons_val_two, tail_cons, mul_zero, zero_add,
head_fin_const]
rw [exp_add]
ring_nf
lemma ub (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 0 2 = cexp (a * I + f * I) * V.1 0 2 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_one, head_cons, zero_mul, add_zero, cons_val_two, tail_cons, mul_zero, head_fin_const,
zero_add]
rw [exp_add]
ring_nf
lemma cd (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 1 0= cexp (b * I + d * I) * V.1 1 0 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_one, head_fin_const, zero_mul, head_cons, zero_add, cons_val_two, tail_cons, add_zero,
mul_zero, tail_val', head_val']
change _ + _ * _ * 0 = _
rw [exp_add]
ring_nf
lemma cs (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 1 1 = cexp (b * I + e * I) * V.1 1 1 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_one, head_fin_const, zero_mul, head_cons, zero_add, cons_val_two, tail_cons, add_zero,
mul_zero]
rw [exp_add]
ring_nf
lemma cb (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 1 2 = cexp (b * I + f * I) * V.1 1 2 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_one, head_fin_const, zero_mul, head_cons, zero_add, cons_val_two, tail_cons, add_zero,
mul_zero]
rw [exp_add]
ring_nf
lemma td (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 2 0= cexp (c * I + d * I) * V.1 2 0 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_two, tail_val', head_val', cons_val_one, head_cons, tail_cons, head_fin_const,
zero_mul, add_zero, mul_zero]
change (0 * _ + _ ) * _ + (0 * _ + _ ) * 0 = _
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, zero_mul, zero_add, mul_zero, add_zero]
rw [exp_add]
ring_nf
lemma ts (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 2 1 = cexp (c * I + e * I) * V.1 2 1 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_two, tail_val', head_val', cons_val_one, head_cons, tail_cons, head_fin_const,
zero_mul, add_zero, mul_zero, zero_add]
change (0 * _ + _) * _ = _
rw [exp_add]
ring_nf
lemma tb (V : CKMMatrix) (a b c d e f : ) :
(phaseShiftApply V a b c d e f).1 2 2 = cexp (c * I + f * I) * V.1 2 2 := by
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, phaseShiftApply_coe]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three, Fin.sum_univ_three]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one, vecCons_const,
cons_val_two, tail_val', head_val', cons_val_one, head_cons, tail_cons, head_fin_const,
zero_mul, add_zero, mul_zero, zero_add]
change (0 * _ + _) * _ = _
rw [exp_add]
ring_nf
end phaseShiftApply
2024-04-29 10:42:44 -04:00
/-- The aboslute value of the `(i,j)`th element of `V`. -/
@[simp]
def VAbs' (V : unitaryGroup (Fin 3) ) (i j : Fin 3) : := Complex.abs (V i j)
lemma VAbs'_equiv (i j : Fin 3) (V U : CKMMatrix) (h : V ≈ U) :
VAbs' V i j = VAbs' U i j := by
2024-04-29 10:42:44 -04:00
simp only [VAbs']
obtain ⟨a, b, c, e, f, g, h⟩ := h
rw [h]
simp only [Submonoid.coe_mul, phaseShift_coe_matrix]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, Fin.sum_univ_three]
rw [mul_apply, mul_apply, Fin.sum_univ_three, Fin.sum_univ_three]
simp only [phaseShiftMatrix, Fin.isValue, cons_val', cons_val_zero, empty_val', cons_val_fin_one,
vecCons_const, cons_val_one, head_cons, zero_mul, add_zero, cons_val_two, tail_cons,
head_fin_const, mul_zero]
fin_cases i <;> fin_cases j <;>
simp [Complex.abs_exp]
all_goals change Complex.abs (0 * _ + _) = _
all_goals simp [Complex.abs_exp]
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `(i,j)`th any representative of `⟦V⟧`. -/
def VAbs (i j : Fin 3) : Quotient CKMMatrixSetoid → :=
Quotient.lift (fun V => VAbs' V i j) (VAbs'_equiv i j)
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `ud`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VudAbs := VAbs 0 0
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `us`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VusAbs := VAbs 0 1
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `ub`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VubAbs := VAbs 0 2
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `cd`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VcdAbs := VAbs 1 0
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `cs`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VcsAbs := VAbs 1 1
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `cb`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VcbAbs := VAbs 1 2
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `td`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VtdAbs := VAbs 2 0
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `ts`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VtsAbs := VAbs 2 1
2024-04-29 10:42:44 -04:00
/-- The absolute value of the `tb`th element of a representative of an equivalence class of
CKM matrices. -/
@[simp]
abbrev VtbAbs := VAbs 2 2
2024-04-29 08:13:52 -04:00
namespace CKMMatrix
open ComplexConjugate
2024-04-29 08:13:52 -04:00
section ratios
2024-04-29 10:42:44 -04:00
/-- The ratio of the `ub` and `ud` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
def Rubud (V : CKMMatrix) : := [V]ub / [V]ud
2024-04-29 10:42:44 -04:00
/-- The ratio of the `ub` and `ud` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
scoped[CKMMatrix] notation (name := ub_ud_ratio) "[" V "]ub|ud" => Rubud V
2024-04-29 09:22:32 -04:00
2024-04-29 10:42:44 -04:00
/-- The ratio of the `us` and `ud` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
def Rusud (V : CKMMatrix) : := [V]us / [V]ud
2024-04-29 10:42:44 -04:00
/-- The ratio of the `us` and `ud` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
scoped[CKMMatrix] notation (name := us_ud_ratio) "[" V "]us|ud" => Rusud V
2024-04-29 10:42:44 -04:00
/-- The ratio of the `ud` and `us` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
def Rudus (V : CKMMatrix) : := [V]ud / [V]us
2024-04-29 10:42:44 -04:00
/-- The ratio of the `ud` and `us` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
scoped[CKMMatrix] notation (name := ud_us_ratio) "[" V "]ud|us" => Rudus V
2024-04-29 10:42:44 -04:00
/-- The ratio of the `ub` and `us` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
def Rubus (V : CKMMatrix) : := [V]ub / [V]us
2024-04-29 10:42:44 -04:00
/-- The ratio of the `ub` and `us` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
scoped[CKMMatrix] notation (name := ub_us_ratio) "[" V "]ub|us" => Rubus V
2024-04-29 09:22:32 -04:00
2024-04-29 10:42:44 -04:00
/-- The ratio of the `cd` and `cb` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
def Rcdcb (V : CKMMatrix) : := [V]cd / [V]cb
2024-04-29 10:42:44 -04:00
/-- The ratio of the `cd` and `cb` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
scoped[CKMMatrix] notation (name := cd_cb_ratio) "[" V "]cd|cb" => Rcdcb V
lemma Rcdcb_mul_cb {V : CKMMatrix} (h : [V]cb ≠ 0): [V]cd = Rcdcb V * [V]cb := by
rw [Rcdcb]
exact (div_mul_cancel₀ (V.1 1 0) h).symm
2024-04-29 10:42:44 -04:00
/-- The ratio of the `cs` and `cb` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
def Rcscb (V : CKMMatrix) : := [V]cs / [V]cb
2024-04-29 10:42:44 -04:00
/-- The ratio of the `cs` and `cb` elements of a CKM matrix. -/
2024-04-29 08:13:52 -04:00
scoped[CKMMatrix] notation (name := cs_cb_ratio) "[" V "]cs|cb" => Rcscb V
lemma Rcscb_mul_cb {V : CKMMatrix} (h : [V]cb ≠ 0): [V]cs = Rcscb V * [V]cb := by
rw [Rcscb]
exact (div_mul_cancel₀ [V]cs h).symm
end ratios
end CKMMatrix
end