feat: Some properties of the CKM matrix

This commit is contained in:
jstoobysmith 2024-04-23 16:00:06 -04:00
parent 41fd21ff13
commit e5337f021d
2 changed files with 696 additions and 0 deletions

View file

@ -0,0 +1,271 @@
/-
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
open Matrix Complex
noncomputable section
@[simp]
def phaseShiftMatrix (a b c : ) : Matrix (Fin 3) (Fin 3) :=
![![ Complex.exp (I * a), 0, 0], ![0, Complex.exp (I * b), 0], ![0, 0, Complex.exp (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
@[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
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]
def phaseShiftEquivRelation : Equivalence phaseShiftRelation where
refl := phaseShiftRelation_refl
symm := phaseShiftRelation_symm
trans := phaseShiftRelation_trans
def CKMMatrix : Type := unitaryGroup (Fin 3)
instance CKMMatrixSetoid : Setoid CKMMatrix := ⟨phaseShiftRelation, phaseShiftEquivRelation⟩
@[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
simp
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]
def VAbs (i j : Fin 3) : Quotient CKMMatrixSetoid → :=
Quotient.lift (fun V => VAbs' V i j) (VAbs'_equiv i j)
@[simp]
abbrev VudAbs := VAbs 0 0
@[simp]
abbrev VusAbs := VAbs 0 1
@[simp]
abbrev VubAbs := VAbs 0 2
@[simp]
abbrev VcdAbs := VAbs 1 0
@[simp]
abbrev VcsAbs := VAbs 1 1
@[simp]
abbrev VcbAbs := VAbs 1 2
@[simp]
abbrev VtdAbs := VAbs 2 0
@[simp]
abbrev VtsAbs := VAbs 2 1
@[simp]
abbrev VtbAbs := VAbs 2 2
lemma VAbs_ge_zero (i j : Fin 3) (V : Quotient CKMMatrixSetoid) : 0 ≤ VAbs i j V := by
obtain ⟨V, hV⟩ := Quot.exists_rep V
rw [← hV]
exact Complex.abs.nonneg _
lemma VAbs_sum_sq_row_eq_one (V : Quotient CKMMatrixSetoid) (i : Fin 3) :
(VAbs i 0 V) ^ 2 + (VAbs i 1 V) ^ 2 + (VAbs i 2 V) ^ 2 = 1 := by
obtain ⟨V, hV⟩ := Quot.exists_rep V
subst hV
have hV := V.prop
rw [mem_unitaryGroup_iff] at hV
have ht := congrFun (congrFun hV i) i
simp [Matrix.mul_apply, Fin.sum_univ_three] at ht
rw [mul_conj, mul_conj, mul_conj] at ht
repeat rw [← Complex.sq_abs] at ht
rw [← ofReal_inj]
simpa using ht
lemma VAbs_sum_sq_col_eq_one (V : Quotient CKMMatrixSetoid) (i : Fin 3) :
(VAbs 0 i V) ^ 2 + (VAbs 1 i V) ^ 2 + (VAbs 2 i V) ^ 2 = 1 := by
obtain ⟨V, hV⟩ := Quot.exists_rep V
subst hV
have hV := V.prop
rw [mem_unitaryGroup_iff'] at hV
have ht := congrFun (congrFun hV i) i
simp [Matrix.mul_apply, Fin.sum_univ_three] at ht
rw [mul_comm, mul_conj, mul_comm, mul_conj, mul_comm, mul_conj] at ht
repeat rw [← Complex.sq_abs] at ht
rw [← ofReal_inj]
simpa using ht
lemma VAbs_leq_one (i j : Fin 3) (V : Quotient CKMMatrixSetoid) : VAbs i j V ≤ 1 := by
have h := VAbs_sum_sq_row_eq_one V i
fin_cases j
change VAbs i 0 V ≤ 1
nlinarith
change VAbs i 1 V ≤ 1
nlinarith
change VAbs i 2 V ≤ 1
nlinarith
lemma VAbs_thd_eq_one_fst_eq_zero {V : Quotient CKMMatrixSetoid} {i : Fin 3} (hV : VAbs i 2 V = 1) :
VAbs i 0 V = 0 := by
have h := VAbs_sum_sq_row_eq_one V i
rw [hV] at h
simp at h
nlinarith
lemma VAbs_thd_eq_one_snd_eq_zero {V : Quotient CKMMatrixSetoid} {i : Fin 3} (hV : VAbs i 2 V = 1) :
VAbs i 1 V = 0 := by
have h := VAbs_sum_sq_row_eq_one V i
rw [hV] at h
simp at h
nlinarith
lemma VAbs_fst_col_eq_one_snd_eq_zero {V : Quotient CKMMatrixSetoid} {i : Fin 3}
(hV : VAbs 0 i V = 1) : VAbs 1 i V = 0 := by
have h := VAbs_sum_sq_col_eq_one V i
rw [hV] at h
simp at h
nlinarith
lemma VAbs_fst_col_eq_one_thd_eq_zero {V : Quotient CKMMatrixSetoid} {i : Fin 3}
(hV : VAbs 0 i V = 1) : VAbs 2 i V = 0 := by
have h := VAbs_sum_sq_col_eq_one V i
rw [hV] at h
simp at h
nlinarith
lemma VAbs_thd_neq_one_fst_snd_sq_neq_zero {V : Quotient CKMMatrixSetoid} {i : Fin 3}
(hV : VAbs i 2 V ≠ 1) : (VAbs i 0 V ^ 2 + VAbs i 1 V ^ 2) ≠ 0 := by
have h1 : 1 - VAbs i 2 V ^ 2 = VAbs i 0 V ^ 2 + VAbs i 1 V ^ 2 := by
linear_combination - (VAbs_sum_sq_row_eq_one V i)
rw [← h1]
by_contra h
have h2 : VAbs i 2 V ^2 = 1 := by
nlinarith
simp only [Fin.isValue, sq_eq_one_iff] at h2
have h3 : 0 ≤ VAbs i 2 V := VAbs_ge_zero i 2 V
have h4 : VAbs i 2 V = 1 := by
nlinarith
exact hV h4
lemma VAbs_thd_neq_one_sqrt_fst_snd_sq_neq_zero {V : Quotient CKMMatrixSetoid} {i : Fin 3}
(hV : VAbs i 2 V ≠ 1) : √(VAbs i 0 V ^ 2 + VAbs i 1 V ^ 2) ≠ 0 := by
rw [Real.sqrt_ne_zero (Left.add_nonneg (sq_nonneg (VAbs i 0 V)) (sq_nonneg (VAbs i 1 V)))]
exact VAbs_thd_neq_one_fst_snd_sq_neq_zero hV
lemma VcbAbs_sq_add_VtbAbs_sq (V : Quotient CKMMatrixSetoid) :
VcbAbs V ^ 2 + VtbAbs V ^ 2 = 1 - VubAbs V ^2 := by
linear_combination (VAbs_sum_sq_col_eq_one V 2)
lemma VudAbs_sq_add_VusAbs_sq : VudAbs V ^ 2 + VusAbs V ^2 = 1 - VubAbs V ^2 := by
linear_combination (VAbs_sum_sq_row_eq_one V 0)
namespace CKMMatrix
open ComplexConjugate
lemma fst_row_snd_row (V : CKMMatrix) : V.1 1 0 * conj (V.1 0 0) + V.1 1 1 * conj (V.1 0 1)
+ V.1 1 2 * conj (V.1 0 2) = 0 := by
have hV := V.prop
rw [mem_unitaryGroup_iff] at hV
have ht := congrFun (congrFun hV 1) 0
simp [Matrix.mul_apply, Fin.sum_univ_three] at ht
exact ht
lemma fst_row_thd_row (V : CKMMatrix) : V.1 2 0 * conj (V.1 0 0) + V.1 2 1 * conj (V.1 0 1)
+ V.1 2 2 * conj (V.1 0 2) = 0 := by
have hV := V.prop
rw [mem_unitaryGroup_iff] at hV
have ht := congrFun (congrFun hV 2) 0
simp [Matrix.mul_apply, Fin.sum_univ_three] at ht
exact ht
end CKMMatrix
end

View file

@ -0,0 +1,425 @@
/-
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license.
Authors: Joseph Tooby-Smith
-/
import HepLean.FlavorPhysics.CKMMatrix.Basic
import Mathlib.Analysis.SpecialFunctions.Complex.Arg
open Matrix Complex
noncomputable section
def S₁₃ (V : Quotient CKMMatrixSetoid) : := VubAbs V
lemma VubAbs_eq_S₁₃ (V : Quotient CKMMatrixSetoid) : VubAbs V = S₁₃ V := rfl
def C₁₃ (V : Quotient CKMMatrixSetoid) : := √ (1 - S₁₃ V ^ 2)
lemma C₁₃_of_Vub_eq_one {V : Quotient CKMMatrixSetoid} (ha : VubAbs V = 1) : C₁₃ V = 0 := by
rw [C₁₃, ← VubAbs_eq_S₁₃, ha]
simp
lemma C₁₃_eq_add_sq (V : Quotient CKMMatrixSetoid) : C₁₃ V = √ (VudAbs V ^ 2 + VusAbs V ^ 2) := by
rw [C₁₃, S₁₃]
have h1 : 1 - VubAbs V ^ 2 = VudAbs V ^ 2 + VusAbs V ^ 2 := by
linear_combination - (VAbs_sum_sq_row_eq_one V 0)
rw [h1]
/-- If VubAbs V = 1 this will give zero.-/
def S₁₂ (V : Quotient CKMMatrixSetoid) : := VusAbs V / (√ (VudAbs V ^ 2 + VusAbs V ^ 2))
lemma S₁₂_Vub_one {V : Quotient CKMMatrixSetoid} (ha : VubAbs V = 1) : S₁₂ V = 0 := by
rw [S₁₂]
have h1 : 1 - VubAbs V ^ 2 = VudAbs V ^ 2 + VusAbs V ^ 2 := by
linear_combination - (VAbs_sum_sq_row_eq_one V 0)
rw [← h1]
rw [ha]
simp
def C₁₂ (V : Quotient CKMMatrixSetoid) : := √ (1 - S₁₂ V ^ 2)
lemma C₁₂_eq_Vud_div_sqrt {V : Quotient CKMMatrixSetoid} (ha : VubAbs V ≠ 1) :
C₁₂ V = VudAbs V / √ (VudAbs V ^ 2 + VusAbs V ^ 2) := by
rw [C₁₂, S₁₂, div_pow, Real.sq_sqrt]
rw [one_sub_div]
simp
rw [Real.sqrt_div]
rw [Real.sqrt_sq]
exact VAbs_ge_zero 0 0 V
exact sq_nonneg (VAbs 0 0 V)
exact VAbs_thd_neq_one_fst_snd_sq_neq_zero ha
exact (Left.add_nonneg (sq_nonneg (VAbs 0 0 V)) (sq_nonneg (VAbs 0 1 V)))
theorem VusAbs_eq_S₁₂_mul_C₁₃ (V : Quotient CKMMatrixSetoid) : VusAbs V = S₁₂ V * C₁₃ V := by
rw [C₁₃, S₁₂, S₁₃]
have h1 : 1 - VubAbs V ^ 2 = VudAbs V ^ 2 + VusAbs V ^ 2 := by
linear_combination - (VAbs_sum_sq_row_eq_one V 0)
rw [h1]
rw [mul_comm]
by_cases ha : VubAbs V = 1
rw [ha] at h1
simp only [one_pow, sub_self, Fin.isValue] at h1
rw [← h1]
simp only [Real.sqrt_zero, div_zero, mul_zero]
exact VAbs_thd_eq_one_snd_eq_zero ha
have h2 := VAbs_thd_neq_one_sqrt_fst_snd_sq_neq_zero ha
exact (mul_div_cancel₀ (VusAbs V) h2).symm
theorem VudAbs_eq_C₁₂_mul_C₁₃ (V : Quotient CKMMatrixSetoid) : VudAbs V = C₁₂ V * C₁₃ V := by
by_cases ha : VubAbs V = 1
change VAbs 0 0 V = C₁₂ V * C₁₃ V
rw [VAbs_thd_eq_one_fst_eq_zero ha]
rw [C₁₃, ← VubAbs_eq_S₁₃, ha]
simp
rw [C₁₂_eq_Vud_div_sqrt ha, C₁₃, S₁₃]
have h1 : 1 - VubAbs V ^ 2 = VudAbs V ^ 2 + VusAbs V ^ 2 := by
linear_combination - (VAbs_sum_sq_row_eq_one V 0)
rw [h1, mul_comm]
exact (mul_div_cancel₀ (VudAbs V) (VAbs_thd_neq_one_sqrt_fst_snd_sq_neq_zero ha)).symm
def S₂₃ (V : Quotient CKMMatrixSetoid) : :=
if VubAbs V = 1 then
VcdAbs V
else
VcbAbs V / √ (VudAbs V ^ 2 + VusAbs V ^ 2)
lemma S₂₃_of_Vub_eq_one {V : Quotient CKMMatrixSetoid} (ha : VubAbs V = 1) : S₂₃ V = VcdAbs V := by
rw [S₂₃, if_pos ha]
lemma S₂₃_of_Vub_neq_one {V : Quotient CKMMatrixSetoid} (ha : VubAbs V ≠ 1) :
S₂₃ V = VcbAbs V / √ (VudAbs V ^ 2 + VusAbs V ^ 2) := by
rw [S₂₃, if_neg ha]
def C₂₃ (V : Quotient CKMMatrixSetoid) : := √(1 - S₂₃ V ^ 2)
lemma C₂₃_of_Vub_neq_one {V : Quotient CKMMatrixSetoid} (ha : VubAbs V ≠ 1) :
C₂₃ V = VtbAbs V / √ (VudAbs V ^ 2 + VusAbs V ^ 2) := by
rw [C₂₃, S₂₃_of_Vub_neq_one ha, div_pow, Real.sq_sqrt]
rw [VudAbs_sq_add_VusAbs_sq, ← VcbAbs_sq_add_VtbAbs_sq]
rw [one_sub_div]
simp only [VcbAbs, Fin.isValue, VtbAbs, add_sub_cancel_left]
rw [Real.sqrt_div (sq_nonneg (VAbs 2 2 V))]
rw [Real.sqrt_sq (VAbs_ge_zero 2 2 V)]
rw [VcbAbs_sq_add_VtbAbs_sq, ← VudAbs_sq_add_VusAbs_sq ]
exact VAbs_thd_neq_one_fst_snd_sq_neq_zero ha
exact (Left.add_nonneg (sq_nonneg (VAbs 0 0 V)) (sq_nonneg (VAbs 0 1 V)))
lemma VcbAbs_eq_S₂₃_mul_C₁₃ (V : Quotient CKMMatrixSetoid) : VcbAbs V = S₂₃ V * C₁₃ V := by
by_cases ha : VubAbs V = 1
rw [C₁₃_of_Vub_eq_one ha]
simp
exact VAbs_fst_col_eq_one_snd_eq_zero ha
rw [S₂₃_of_Vub_neq_one ha, C₁₃_eq_add_sq]
rw [mul_comm]
exact (mul_div_cancel₀ (VcbAbs V) (VAbs_thd_neq_one_sqrt_fst_snd_sq_neq_zero ha)).symm
lemma VtbAbs_eq_C₂₃_mul_C₁₃ (V : Quotient CKMMatrixSetoid) : VtbAbs V = C₂₃ V * C₁₃ V := by
by_cases ha : VubAbs V = 1
rw [C₁₃_of_Vub_eq_one ha]
simp
exact VAbs_fst_col_eq_one_thd_eq_zero ha
rw [C₂₃_of_Vub_neq_one ha, C₁₃_eq_add_sq]
rw [mul_comm]
exact (mul_div_cancel₀ (VtbAbs V) (VAbs_thd_neq_one_sqrt_fst_snd_sq_neq_zero ha)).symm
lemma S₁₂_mul_C₂₃_of_Vud_neq_one {V : Quotient CKMMatrixSetoid} (ha : VubAbs V ≠ 1) :
S₁₂ V * C₂₃ V = VusAbs V * VtbAbs V / (VudAbs V ^ 2 + VusAbs V ^ 2) := by
rw [S₁₂, C₂₃_of_Vub_neq_one ha]
rw [@div_mul_div_comm]
rw [Real.mul_self_sqrt]
exact (Left.add_nonneg (sq_nonneg (VAbs 0 0 V)) (sq_nonneg (VAbs 0 1 V)))
lemma C₁₂_mul_S₂₃_mul_S₁₃_of_Vud_neq_one {V : Quotient CKMMatrixSetoid} (ha : VubAbs V ≠ 1) :
C₁₂ V * S₂₃ V * S₁₃ V = VudAbs V * VcbAbs V * VubAbs V / (VudAbs V ^ 2 + VusAbs V ^ 2) := by
rw [C₁₂_eq_Vud_div_sqrt ha, S₂₃_of_Vub_neq_one ha, S₁₃]
rw [@div_mul_div_comm]
rw [Real.mul_self_sqrt (Left.add_nonneg (sq_nonneg (VAbs 0 0 V)) (sq_nonneg (VAbs 0 1 V)))]
exact (mul_div_right_comm (VudAbs V * VcbAbs V) (VubAbs V) (VudAbs V ^ 2 + VusAbs V ^ 2)).symm
namespace CKMMatrix
open ComplexConjugate
lemma Vud_eq_C₁₂_mul_C₁₃_arg (V : CKMMatrix) :
V.1 0 0 = (C₁₂ ⟦V⟧ * C₁₃ ⟦V⟧) * exp (I * arg (V.1 0 0)) := by
nth_rewrite 1 [← abs_mul_exp_arg_mul_I (V.1 0 0)]
rw [mul_comm _ I]
congr
have h1 := VudAbs_eq_C₁₂_mul_C₁₃ ⟦V⟧
rw [← ofReal_inj] at h1
simpa using h1
lemma Vus_eq_C₁₂_mul_C₁₃_arg (V : CKMMatrix) :
V.1 0 1 = (S₁₂ ⟦V⟧ * C₁₃ ⟦V⟧ ) * exp (I * arg (V.1 0 1)) := by
nth_rewrite 1 [← abs_mul_exp_arg_mul_I (V.1 0 1)]
rw [mul_comm _ I]
congr
have h1 := VusAbs_eq_S₁₂_mul_C₁₃ ⟦V⟧
rw [← ofReal_inj] at h1
simpa using h1
lemma Vub_eq_C₁₃_arg (V : CKMMatrix) : V.1 0 2 = S₁₃ ⟦V⟧ * exp (I * arg (V.1 0 2)) := by
nth_rewrite 1 [← abs_mul_exp_arg_mul_I (V.1 0 2)]
rw [mul_comm _ I]
congr
lemma Vcb_eq_S₂₃_mul_C₁₃_arg (V : CKMMatrix) :
V.1 1 2 = (S₂₃ ⟦V⟧ * C₁₃ ⟦V⟧) * exp (I * arg (V.1 1 2)) := by
nth_rewrite 1 [← abs_mul_exp_arg_mul_I (V.1 1 2)]
rw [mul_comm _ I]
congr
have h1 := VcbAbs_eq_S₂₃_mul_C₁₃ ⟦V⟧
rw [← ofReal_inj] at h1
simpa using h1
lemma Vud_neq_zero_abs_neq_zero (V : CKMMatrix) : abs (V.1 0 0) ≠ 0 ↔ V.1 0 0 ≠ 0 := by
exact AbsoluteValue.ne_zero_iff Complex.abs
lemma Vcb_neq_zero_abs_neq_zero (V : CKMMatrix) : abs (V.1 1 2) ≠ 0 ↔ V.1 1 2 ≠ 0 := by
exact AbsoluteValue.ne_zero_iff Complex.abs
lemma Vud_neq_zero_C₁₂_neq_zero {V : CKMMatrix} (ha : V.1 0 0 ≠ 0) : C₁₂ ⟦V⟧ ≠ 0 := by
rw [← Vud_neq_zero_abs_neq_zero] at ha
have h2 := VudAbs_eq_C₁₂_mul_C₁₃ ⟦V⟧
simp [VAbs] at h2
rw [h2] at ha
simp at ha
rw [not_or] at ha
exact ha.1
lemma Vud_neq_zero_C₁₃_neq_zero {V : CKMMatrix} (ha : V.1 0 0 ≠ 0) : C₁₃ ⟦V⟧ ≠ 0 := by
rw [← Vud_neq_zero_abs_neq_zero] at ha
have h2 := VudAbs_eq_C₁₂_mul_C₁₃ ⟦V⟧
simp [VAbs] at h2
rw [h2] at ha
simp at ha
rw [not_or] at ha
exact ha.2
lemma Vcb_neq_zero_S₂₃_neq_zero {V : CKMMatrix} (hb : V.1 1 2 ≠ 0) : S₂₃ ⟦V⟧ ≠ 0 := by
rw [← Vcb_neq_zero_abs_neq_zero] at hb
have h2 := VcbAbs_eq_S₂₃_mul_C₁₃ ⟦V⟧
simp [VAbs] at h2
rw [h2] at hb
simp at hb
rw [not_or] at hb
exact hb.1
def B (V : CKMMatrix) : := V.1 0 1 / V.1 0 0
lemma B_abs (V : CKMMatrix) (ha : V.1 0 0 ≠ 0) : abs (B V) = S₁₂ ⟦V⟧ / C₁₂ ⟦V⟧ := by
rw [B]
simp only [Fin.isValue, map_div₀]
have h1 := VusAbs_eq_S₁₂_mul_C₁₃ ⟦V⟧
have h2 := VudAbs_eq_C₁₂_mul_C₁₃ ⟦V⟧
simp [VAbs] at h1 h2
rw [h1, h2]
rw [@mul_div_mul_comm]
rw [div_self]
simp
exact Vud_neq_zero_C₁₃_neq_zero ha
lemma B_normSq (V : CKMMatrix) (ha : V.1 0 0 ≠ 0) :
normSq (B V) = (S₁₂ ⟦V⟧ ^ 2) / (C₁₂ ⟦V⟧ ^ 2) := by
rw [← Complex.sq_abs]
rw [B_abs V ha]
simp
def A (V : CKMMatrix) : := V.1 0 2 / V.1 0 0
lemma A_abs (V : CKMMatrix) :
abs (A V) = (S₁₃ ⟦V⟧ / C₁₃ ⟦V⟧) * (1 / C₁₂ ⟦V⟧):= by
rw [A]
simp only [Fin.isValue, map_div₀]
have h1 := VubAbs_eq_S₁₃ ⟦V⟧
have h2 := VudAbs_eq_C₁₂_mul_C₁₃ ⟦V⟧
simp [VAbs] at h1 h2
rw [h1, h2]
rw [← @mul_div_mul_comm]
simp
rw [mul_comm]
lemma A_normSq (V : CKMMatrix) :
normSq (A V) = (S₁₃ ⟦V⟧ ^ 2) / (C₁₃ ⟦V⟧ ^ 2) * (1 / (C₁₂ ⟦V⟧ ^ 2)) := by
rw [← Complex.sq_abs]
rw [A_abs V]
rw [mul_pow]
simp
def D (V : CKMMatrix) : := V.1 1 0 / V.1 1 2
def C' (V : CKMMatrix) : := V.1 1 1 / V.1 1 2
def C (V : CKMMatrix) : := C' V * (1 + abs (B V)^2) + conj (A V) * B V
lemma C'_of_C (V : CKMMatrix) : C' V = (C V - conj (A V) * B V) / (1 + abs (B V)^2) := by
have h1 : C V = C' V * (1 + abs (B V)^2) + conj (A V) * B V := by rfl
have h2 : C V - conj (A V) * B V = C' V * (1 + abs (B V)^2) := by
linear_combination h1
rw [h2]
rw [mul_div_cancel_right₀]
have h2 : 0 ≤ ↑(Complex.abs (B V)) ^ 2 := by simp
have h3 : 0 < 1 + ↑(Complex.abs (B V)) ^ 2 := by linarith
by_contra hn
have hx : 1 + Complex.abs (B V) ^ 2 = 0 := by
rw [← ofReal_inj]
simpa using hn
have h4 := lt_of_lt_of_eq h3 hx
simp at h4
lemma norm_D_C'_A {V : CKMMatrix} (ha : V.1 1 2 ≠ 0) (hb : V.1 0 0 ≠ 0) :
D V + C' V * conj (B V) + conj (A V) = 0 := by
have h1 : (V.1 1 0 * conj (V.1 0 0) + V.1 1 1 * conj (V.1 0 1)
+ V.1 1 2 * conj (V.1 0 2))/ (V.1 1 2 * conj (V.1 0 0)) = 0 := by
rw [fst_row_snd_row V ]
simp
rw [← div_add_div_same, ← div_add_div_same] at h1
rw [mul_div_mul_comm, mul_div_mul_comm, mul_div_mul_comm] at h1
rw [div_self, div_self] at h1
change D V * 1 + _ + _ = _ at h1
have h2 : (starRingEnd ) (V.1 0 2) / (starRingEnd ) (V.1 0 0) = conj (A V) := by
simp [A]
have h3 : ((starRingEnd ) (V.1 0 1) / (starRingEnd ) (V.1 0 0)) = conj (B V) := by
simp [B]
rw [h2, h3] at h1
simp at h1
exact h1
exact ha
simpa using hb
lemma norm_D_C_A {V : CKMMatrix} (ha : V.1 1 2 ≠ 0) (hb : V.1 0 0 ≠ 0) :
D V + (conj (A V) + C V * conj (B V) ) / (1 + abs (B V)^2) = 0 := by
have h1 := norm_D_C'_A ha hb
rw [C'_of_C] at h1
rw [div_mul_eq_mul_div] at h1
rw [add_assoc] at h1
rw [div_add'] at h1
have h2 : ((C V - (starRingEnd ) (A V) * B V) * (starRingEnd ) (B V) +
(starRingEnd ) (A V) * (1 + ↑(Complex.abs (B V)) ^ 2)) =
(conj (A V) + C V * conj (B V) ) := by
have h3 : ↑(Complex.abs (B V)) ^ 2 = (B V) * conj (B V) := by
rw [mul_conj]
rw [ ← Complex.sq_abs]
simp
rw [h3]
ring
rw [h2] at h1
exact h1
have h2 : 0 ≤ ↑(Complex.abs (B V)) ^ 2 := by simp
have h3 : 0 < 1 + ↑(Complex.abs (B V)) ^ 2 := by linarith
by_contra hn
have hx : 1 + Complex.abs (B V) ^ 2 = 0 := by
rw [← ofReal_inj]
simpa using hn
have h4 := lt_of_lt_of_eq h3 hx
simp at h4
lemma D_of_A_C {V : CKMMatrix} (ha : V.1 1 2 ≠ 0) (hb : V.1 0 0 ≠ 0) :
D V = - (conj (A V) + C V * conj (B V) ) / (1 + abs (B V)^2) := by
linear_combination (norm_D_C_A ha hb)
lemma normSq_D_C'_add' (V : CKMMatrix) (ha : V.1 1 2 ≠ 0) (hb : V.1 0 0 ≠ 0) :
normSq (D V) + normSq (C' V) + 1 = ((1 + normSq (B V)) *
(normSq (C V) + normSq (B V) + normSq (A V) + 1)) / (1 + normSq (B V)) ^ 2 := by
rw [← ofReal_inj]
simp
rw [← mul_conj, ← mul_conj]
rw [D_of_A_C, C'_of_C]
simp
rw [conj_ofReal]
rw [div_mul_div_comm, div_mul_div_comm]
rw [div_add_div_same]
rw [div_add_one]
have h1 : ((Complex.abs (B V)) : ) ^ 2 = normSq (B V) := by
rw [← Complex.sq_abs]
simp
congr 1
rw [← mul_conj, ← mul_conj, ← mul_conj]
rw [h1, ← mul_conj]
ring
rw [h1]
ring
simp
have h2 : 0 ≤ ↑(Complex.abs (B V)) ^ 2 := by simp
have h3 : 0 < 1 + ↑(Complex.abs (B V)) ^ 2 := by linarith
by_contra hn
have hx : 1 + Complex.abs (B V) ^ 2 = 0 := by
rw [← ofReal_inj]
simpa using hn
have h4 := lt_of_lt_of_eq h3 hx
simp at h4
exact ha
exact hb
lemma normS1_B_neq_zero (V : CKMMatrix):
1 + normSq (B V) ≠ 0 := by
have h2 : 0 ≤ normSq (B V) := by
exact normSq_nonneg (B V)
have h3 : 0 < 1 + normSq (B V) := by linarith
by_contra hn
have ht := lt_of_lt_of_eq h3 hn
simp at ht
lemma normSq_D_C'_add (V : CKMMatrix) (ha : V.1 1 2 ≠ 0) (hb : V.1 0 0 ≠ 0) :
normSq (D V) + normSq (C' V) + 1 =
(normSq (C V) + normSq (B V) + normSq (A V) + 1) / (1 + normSq (B V)) := by
rw [normSq_D_C'_add' V ha hb]
rw [sq]
rw [← div_mul_div_comm]
rw [div_self]
simp
exact normS1_B_neq_zero V
lemma D_C'_of_S_C (V : CKMMatrix) (ha : V.1 1 2 ≠ 0) :
normSq (D V) + normSq (C' V) + 1 = 1 / (S₂₃ ⟦V⟧ * C₁₃ ⟦V⟧) ^ 2 := by
have h1 : ((abs (V.1 1 0)) ^ 2 + (abs (V.1 1 1)) ^ 2 + (abs (V.1 1 2)) ^ 2)/ (abs (V.1 1 2))^2
= 1 /(abs (V.1 1 2))^2 := by
have h2 := VAbs_sum_sq_row_eq_one ⟦V⟧ 1
erw [h2]
rw [← div_add_div_same, ← div_add_div_same] at h1
rw [← div_pow, ← div_pow] at h1
rw [div_self] at h1
have h3 : (Complex.abs (V.1 1 0) / Complex.abs (V.1 1 2)) = abs (D V) := by
simp [D]
have h4 : (Complex.abs (V.1 1 1) / Complex.abs (V.1 1 2)) = abs (C' V) := by
simp [C']
rw [h3, h4] at h1
have h5 := VcbAbs_eq_S₂₃_mul_C₁₃ ⟦V⟧
simp [VAbs] at h5
rw [h5] at h1
rw [Complex.sq_abs, Complex.sq_abs] at h1
exact h1
simp
exact ha
lemma C_of_S_C (V : CKMMatrix) (ha : V.1 1 2 ≠ 0) (hb : V.1 0 0 ≠ 0) :
normSq (C V) = 0 := by
have h1 := D_C'_of_S_C V ha
rw [normSq_D_C'_add V ha hb] at h1
rw [div_eq_mul_inv] at h1
have h3 : 1 / (S₂₃ ⟦V⟧ * C₁₃ ⟦V⟧) ^ 2 ≠ 0 := by
simp
rw [not_or]
have h2 := eq_mul_of_mul_inv_eq₀ h3 h1
have h4 : normSq (C V) = 1 / (S₂₃ ⟦V⟧ * C₁₃ ⟦V⟧) ^ 2 * (1 + normSq (B V))
- normSq (B V) - normSq (A V) - 1 := by
linear_combination h2
rw [B_normSq] at h4
rw [A_normSq] at h4
field_simp at h4
end CKMMatrix
end