PhysLean/HepLean/FlavorPhysics/CKMMatrix/Relations.lean

358 lines
12 KiB
Text
Raw Normal View History

/-
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
2024-07-12 16:39:44 -04:00
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
import HepLean.FlavorPhysics.CKMMatrix.Basic
import HepLean.FlavorPhysics.CKMMatrix.Rows
import Mathlib.Analysis.SpecialFunctions.Complex.Arg
2024-04-29 10:42:44 -04:00
/-!
# Relations for the CKM Matrix
2024-04-29 10:42:44 -04:00
This file contains a collection of relations and properties between the elements of the CKM
matrix.
-/
open Matrix Complex
noncomputable section
namespace CKMMatrix
open ComplexConjugate
2024-04-29 08:13:52 -04:00
section rows
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 fst_row_normalized_abs (V : CKMMatrix) : abs [V]ud ^ 2 + abs [V]us ^ 2 + abs [V]ub ^ 2 = 1 :=
VAbs_sum_sq_row_eq_one ⟦V⟧ 0
lemma snd_row_normalized_abs (V : CKMMatrix) : abs [V]cd ^ 2 + abs [V]cs ^ 2 + abs [V]cb ^ 2 = 1 :=
VAbs_sum_sq_row_eq_one ⟦V⟧ 1
lemma thd_row_normalized_abs (V : CKMMatrix) : abs [V]td ^ 2 + abs [V]ts ^ 2 + abs [V]tb ^ 2 = 1 :=
VAbs_sum_sq_row_eq_one ⟦V⟧ 2
lemma fst_row_normalized_normSq (V : CKMMatrix) :
normSq [V]ud + normSq [V]us + normSq [V]ub = 1 := by
2024-04-29 08:13:52 -04:00
repeat rw [← Complex.sq_abs]
exact V.fst_row_normalized_abs
lemma snd_row_normalized_normSq (V : CKMMatrix) :
normSq [V]cd + normSq [V]cs + normSq [V]cb = 1 := by
2024-04-29 08:13:52 -04:00
repeat rw [← Complex.sq_abs]
exact V.snd_row_normalized_abs
lemma thd_row_normalized_normSq (V : CKMMatrix) :
normSq [V]td + normSq [V]ts + normSq [V]tb = 1 := by
repeat rw [← Complex.sq_abs]
exact V.thd_row_normalized_abs
lemma normSq_Vud_plus_normSq_Vus (V : CKMMatrix) :
normSq [V]ud + normSq [V]us = 1 - normSq [V]ub := by
linear_combination (fst_row_normalized_normSq V)
2024-07-12 11:23:02 -04:00
lemma VudAbs_sq_add_VusAbs_sq : VudAbs V ^ 2 + VusAbs V ^2 = 1 - VubAbs V ^2 := by
2024-04-29 09:22:32 -04:00
linear_combination (VAbs_sum_sq_row_eq_one V 0)
lemma ud_us_neq_zero_iff_ub_neq_one (V : CKMMatrix) :
[V]ud ≠ 0 [V]us ≠ 0 ↔ abs [V]ub ≠ 1 := by
have h2 := V.fst_row_normalized_abs
2024-08-20 15:10:43 -04:00
refine Iff.intro (fun h h1 => ?_) (fun h => ?_)
· rw [h1] at h2
simp at h2
rw [add_eq_zero_iff' (sq_nonneg _) (sq_nonneg _)] at h2
simp_all
· by_contra hn
rw [not_or] at hn
simp_all only [ne_eq, Decidable.not_not, map_zero, OfNat.ofNat_ne_zero, not_false_eq_true,
zero_pow, add_zero, zero_add, sq_eq_one_iff, false_or, neg_eq_self_iff, one_ne_zero]
have h1 := Complex.abs.nonneg [V]ub
rw [h2] at h1
refine (?_ : ¬ 0 ≤ (-1 : ) ) h1
simp
2024-04-29 08:13:52 -04:00
lemma normSq_Vud_plus_normSq_Vus_neq_zero_ {V : CKMMatrix} (hb : [V]ud ≠ 0 [V]us ≠ 0) :
normSq [V]ud + normSq [V]us ≠ 0 := by
rw [normSq_Vud_plus_normSq_Vus V]
rw [ud_us_neq_zero_iff_ub_neq_one] at hb
by_contra hn
rw [← Complex.sq_abs] at hn
have h2 : Complex.abs (V.1 0 2) ^2 = 1 := by
linear_combination -(1 * hn)
simp at h2
cases' h2 with h2 h2
2024-08-20 15:10:43 -04:00
· exact hb h2
· have h3 := Complex.abs.nonneg [V]ub
rw [h2] at h3
have h2 : ¬ 0 ≤ (-1 : ) := by simp
exact h2 h3
2024-04-29 08:13:52 -04:00
2024-04-29 10:42:44 -04:00
lemma VAbsub_neq_zero_Vud_Vus_neq_zero {V : Quotient CKMMatrixSetoid}
2024-07-12 11:23:02 -04:00
(hV : VAbs 0 2 V ≠ 1) :(VudAbs V ^ 2 + VusAbs V ^ 2) ≠ 0 := by
2024-04-29 10:42:44 -04:00
obtain ⟨V⟩ := V
change VubAbs ⟦V⟧ ≠ 1 at hV
simp only [VubAbs, VAbs, VAbs', Fin.isValue, Quotient.lift_mk] at hV
rw [← ud_us_neq_zero_iff_ub_neq_one V] at hV
simpa [← Complex.sq_abs] using (normSq_Vud_plus_normSq_Vus_neq_zero_ hV)
lemma VAbsub_neq_zero_sqrt_Vud_Vus_neq_zero {V : Quotient CKMMatrixSetoid}
2024-07-12 11:23:02 -04:00
(hV : VAbs 0 2 V ≠ 1) : √(VudAbs V ^ 2 + VusAbs V ^ 2) ≠ 0 := by
2024-04-29 10:42:44 -04:00
obtain ⟨V⟩ := V
rw [Real.sqrt_ne_zero (Left.add_nonneg (sq_nonneg _) (sq_nonneg _))]
change VubAbs ⟦V⟧ ≠ 1 at hV
simp only [VubAbs, VAbs, VAbs', Fin.isValue, Quotient.lift_mk] at hV
rw [← ud_us_neq_zero_iff_ub_neq_one V] at hV
simpa [← Complex.sq_abs] using (normSq_Vud_plus_normSq_Vus_neq_zero_ hV)
2024-07-12 11:23:02 -04:00
lemma normSq_Vud_plus_normSq_Vus_neq_zero_ {V : CKMMatrix} (hb : [V]ud ≠ 0 [V]us ≠ 0) :
2024-04-29 08:13:52 -04:00
(normSq [V]ud : ) + normSq [V]us ≠ 0 := by
have h1 := normSq_Vud_plus_normSq_Vus_neq_zero_ hb
simp at h1
rw [← ofReal_inj] at h1
simp_all
2024-04-29 09:22:32 -04:00
lemma Vabs_sq_add_neq_zero {V : CKMMatrix} (hb : [V]ud ≠ 0 [V]us ≠ 0) :
((VudAbs ⟦V⟧ : ) * ↑(VudAbs ⟦V⟧) + ↑(VusAbs ⟦V⟧) * ↑(VusAbs ⟦V⟧)) ≠ 0 := by
have h1 := normSq_Vud_plus_normSq_Vus_neq_zero_ hb
rw [← Complex.sq_abs, ← Complex.sq_abs] at h1
simp [sq] at h1
exact h1
2024-04-29 08:13:52 -04:00
section orthogonal
2024-04-29 09:22:32 -04:00
lemma fst_row_orthog_snd_row (V : CKMMatrix) :
[V]cd * conj [V]ud + [V]cs * conj [V]us + [V]cb * conj [V]ub = 0 := by
2024-04-29 08:13:52 -04:00
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
2024-04-29 09:22:32 -04:00
lemma fst_row_orthog_thd_row (V : CKMMatrix) :
[V]td * conj [V]ud + [V]ts * conj [V]us + [V]tb * conj [V]ub = 0 := by
2024-04-29 08:13:52 -04:00
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
2024-04-29 09:22:32 -04:00
lemma Vcd_mul_conj_Vud (V : CKMMatrix) :
2024-04-29 08:13:52 -04:00
[V]cd * conj [V]ud = -[V]cs * conj [V]us - [V]cb * conj [V]ub := by
2024-07-12 16:22:06 -04:00
linear_combination (V.fst_row_orthog_snd_row)
2024-04-29 08:13:52 -04:00
2024-04-29 09:22:32 -04:00
lemma Vcs_mul_conj_Vus (V : CKMMatrix) :
2024-04-29 08:13:52 -04:00
[V]cs * conj [V]us = - [V]cd * conj [V]ud - [V]cb * conj [V]ub := by
2024-07-12 16:22:06 -04:00
linear_combination V.fst_row_orthog_snd_row
2024-04-29 08:13:52 -04:00
end orthogonal
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
section crossProduct
2024-07-12 11:23:02 -04:00
lemma conj_Vtb_cross_product {V : CKMMatrix} {τ : }
2024-04-29 08:13:52 -04:00
(hτ : [V]t = cexp (τ * I) • (conj [V]u ×₃ conj [V]c)) :
2024-07-12 11:23:02 -04:00
conj [V]tb = cexp (- τ * I) * ([V]cs * [V]ud - [V]us * [V]cd) := by
2024-04-29 08:13:52 -04:00
have h1 := congrFun hτ 2
simp [crossProduct, tRow, uRow, cRow] at h1
apply congrArg conj at h1
simp at h1
rw [h1]
simp only [← exp_conj, _root_.map_mul, conj_ofReal, conj_I, mul_neg, Fin.isValue, neg_mul]
field_simp
ring_nf
end crossProduct
2024-04-29 09:22:32 -04:00
lemma conj_Vtb_mul_Vud {V : CKMMatrix} {τ : }
2024-04-29 08:13:52 -04:00
(hτ : [V]t = cexp (τ * I) • (conj [V]u ×₃ conj [V]c)) :
cexp (τ * I) * conj [V]tb * conj [V]ud =
[V]cs * (normSq [V]ud + normSq [V]us) + [V]cb * conj [V]ub * [V]us := by
2024-04-29 09:22:32 -04:00
rw [conj_Vtb_cross_product hτ]
2024-04-29 08:13:52 -04:00
simp [exp_neg]
2024-07-12 11:23:02 -04:00
have h2 : ([V]cs * [V]ud - [V]us * [V]cd) * conj [V]ud = [V]cs
2024-04-29 13:56:30 -04:00
* [V]ud * conj [V]ud - [V]us * ([V]cd * conj [V]ud) := by
2024-04-29 08:13:52 -04:00
ring
2024-04-29 09:22:32 -04:00
rw [h2, V.Vcd_mul_conj_Vud]
2024-04-29 08:13:52 -04:00
rw [normSq_eq_conj_mul_self, normSq_eq_conj_mul_self]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, neg_mul]
2024-04-29 08:13:52 -04:00
ring
2024-04-29 09:22:32 -04:00
lemma conj_Vtb_mul_Vus {V : CKMMatrix} {τ : }
2024-04-29 08:13:52 -04:00
(hτ : [V]t = cexp (τ * I) • (conj [V]u ×₃ conj [V]c)) :
cexp (τ * I) * conj [V]tb * conj [V]us =
- ([V]cd * (normSq [V]ud + normSq [V]us) + [V]cb * conj ([V]ub) * [V]ud) := by
2024-04-29 09:22:32 -04:00
rw [conj_Vtb_cross_product hτ]
2024-04-29 08:13:52 -04:00
simp [exp_neg]
2024-07-12 11:23:02 -04:00
have h2 : ([V]cs * [V]ud - [V]us * [V]cd) * conj [V]us = ([V]cs
2024-04-29 13:56:30 -04:00
* conj [V]us) * [V]ud - [V]us * [V]cd * conj [V]us := by
2024-04-29 08:13:52 -04:00
ring
2024-04-29 09:22:32 -04:00
rw [h2, V.Vcs_mul_conj_Vus]
2024-04-29 08:13:52 -04:00
rw [normSq_eq_conj_mul_self, normSq_eq_conj_mul_self]
2024-04-29 10:42:44 -04:00
simp only [Fin.isValue, neg_mul]
2024-04-29 08:13:52 -04:00
ring
2024-07-12 11:23:02 -04:00
lemma cs_of_ud_us_ub_cb_tb {V : CKMMatrix} (h : [V]ud ≠ 0 [V]us ≠ 0)
2024-04-29 08:13:52 -04:00
{τ : } (hτ : [V]t = cexp (τ * I) • (conj ([V]u) ×₃ conj ([V]c))) :
2024-07-12 11:23:02 -04:00
[V]cs = (- conj [V]ub * [V]us * [V]cb +
cexp (τ * I) * conj [V]tb * conj [V]ud) / (normSq [V]ud + normSq [V]us) := by
2024-04-29 08:13:52 -04:00
have h1 := normSq_Vud_plus_normSq_Vus_neq_zero_ h
2024-04-29 09:22:32 -04:00
rw [conj_Vtb_mul_Vud hτ]
2024-04-29 08:13:52 -04:00
field_simp
ring
2024-07-12 11:23:02 -04:00
lemma cd_of_ud_us_ub_cb_tb {V : CKMMatrix} (h : [V]ud ≠ 0 [V]us ≠ 0)
2024-04-29 08:13:52 -04:00
{τ : } (hτ : [V]t = cexp (τ * I) • (conj ([V]u) ×₃ conj ([V]c))) :
2024-07-12 11:23:02 -04:00
[V]cd = - (conj [V]ub * [V]ud * [V]cb + cexp (τ * I) * conj [V]tb * conj [V]us) /
2024-04-29 08:13:52 -04:00
(normSq [V]ud + normSq [V]us) := by
have h1 := normSq_Vud_plus_normSq_Vus_neq_zero_ h
2024-04-29 09:22:32 -04:00
rw [conj_Vtb_mul_Vus hτ]
2024-04-29 08:13:52 -04:00
field_simp
ring
end rows
section individual
2024-07-12 11:23:02 -04:00
lemma VAbs_ge_zero (i j : Fin 3) (V : Quotient CKMMatrixSetoid) : 0 ≤ VAbs i j V := by
2024-04-29 08:13:52 -04:00
obtain ⟨V, hV⟩ := Quot.exists_rep V
rw [← hV]
exact Complex.abs.nonneg _
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
2024-08-20 15:10:43 -04:00
· change VAbs i 0 V ≤ 1
nlinarith
· change VAbs i 1 V ≤ 1
nlinarith
· change VAbs i 2 V ≤ 1
nlinarith
2024-04-29 08:13:52 -04:00
end individual
section columns
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 thd_col_normalized_abs (V : CKMMatrix) :
abs [V]ub ^ 2 + abs [V]cb ^ 2 + abs [V]tb ^ 2 = 1 := by
have h1 := VAbs_sum_sq_col_eq_one ⟦V⟧ 2
simp [VAbs] at h1
exact h1
lemma thd_col_normalized_normSq (V : CKMMatrix) :
normSq [V]ub + normSq [V]cb + normSq [V]tb = 1 := by
have h1 := V.thd_col_normalized_abs
repeat rw [Complex.sq_abs] at h1
exact h1
2024-07-12 11:23:02 -04:00
lemma cb_eq_zero_of_ud_us_zero {V : CKMMatrix} (h : [V]ud = 0 ∧ [V]us = 0) :
2024-04-29 08:13:52 -04:00
[V]cb = 0 := by
have h1 := fst_row_normalized_abs V
rw [← thd_col_normalized_abs V] at h1
simp [h] at h1
rw [add_assoc] at h1
simp at h1
rw [add_eq_zero_iff' (sq_nonneg _) (sq_nonneg _)] at h1
simp at h1
exact h1.1
lemma cs_of_ud_us_zero {V : CKMMatrix} (ha : ¬ ([V]ud ≠ 0 [V]us ≠ 0)) :
VcsAbs ⟦V⟧ = √(1 - VcdAbs ⟦V⟧ ^ 2) := by
have h1 := snd_row_normalized_abs V
symm
rw [Real.sqrt_eq_iff_sq_eq]
2024-08-20 15:10:43 -04:00
· simp [not_or] at ha
rw [cb_eq_zero_of_ud_us_zero ha] at h1
simp at h1
simp [VAbs]
linear_combination h1
· simp only [VcdAbs, Fin.isValue, sub_nonneg, sq_le_one_iff_abs_le_one]
rw [@abs_le]
have h1 := VAbs_leq_one 1 0 ⟦V⟧
have h0 := VAbs_ge_zero 1 0 ⟦V⟧
simp_all
have hn : -1 ≤ (0 : ) := by simp
exact hn.trans h0
· exact VAbs_ge_zero _ _ ⟦V⟧
2024-04-29 08:13:52 -04:00
2024-04-29 09:22:32 -04:00
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)
2024-04-29 08:13:52 -04:00
lemma cb_tb_neq_zero_iff_ub_neq_one (V : CKMMatrix) :
[V]cb ≠ 0 [V]tb ≠ 0 ↔ abs [V]ub ≠ 1 := by
have h2 := V.thd_col_normalized_abs
2024-08-20 15:10:43 -04:00
refine Iff.intro (fun h h1 => ?_) (fun h => ?_)
· rw [h1] at h2
simp at h2
have h2 : Complex.abs (V.1 1 2) ^ 2 + Complex.abs (V.1 2 2) ^ 2 = 0 := by
linear_combination h2
rw [add_eq_zero_iff' (sq_nonneg _) (sq_nonneg _)] at h2
simp_all
· by_contra hn
rw [not_or] at hn
simp at hn
simp_all only [map_zero, ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true, zero_pow, add_zero,
sq_eq_one_iff, false_or, neg_eq_self_iff, one_ne_zero]
have h1 := Complex.abs.nonneg [V]ub
rw [h2] at h1
have h2 : ¬ 0 ≤ (-1 : ) := by simp
exact h2 h1
2024-04-29 08:13:52 -04:00
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
2024-04-29 09:22:32 -04:00
end columns
2024-04-29 08:13:52 -04:00
end CKMMatrix
end