2024-04-26 10:32:03 -04:00
|
|
|
|
/-
|
|
|
|
|
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
|
|
|
|
|
import Mathlib.LinearAlgebra.CrossProduct
|
2024-04-29 10:42:44 -04:00
|
|
|
|
/-!
|
|
|
|
|
# Rows for the CKM Matrix
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
This file contains the definition extracting the rows of the CKM matrix and
|
|
|
|
|
proves some properties between them.
|
|
|
|
|
|
|
|
|
|
The first row can be extracted as `[V]u` for a CKM matrix `V`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
|
|
|
|
open Matrix Complex
|
|
|
|
|
|
|
|
|
|
open ComplexConjugate
|
|
|
|
|
noncomputable section
|
|
|
|
|
|
|
|
|
|
namespace CKMMatrix
|
|
|
|
|
|
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
/-- The `u`th row of the CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
def uRow (V : CKMMatrix) : Fin 3 → ℂ := ![[V]ud, [V]us, [V]ub]
|
2024-04-29 10:42:44 -04:00
|
|
|
|
|
|
|
|
|
/-- The `u`th row of the CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
scoped[CKMMatrix] notation (name := u_row) "[" V "]u" => uRow V
|
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
/-- The `c`th row of the CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
def cRow (V : CKMMatrix) : Fin 3 → ℂ := ![[V]cd, [V]cs, [V]cb]
|
2024-04-29 10:42:44 -04:00
|
|
|
|
|
|
|
|
|
/-- The `c`th row of the CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
scoped[CKMMatrix] notation (name := c_row) "[" V "]c" => cRow V
|
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
/-- The `t`th row of the CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
def tRow (V : CKMMatrix) : Fin 3 → ℂ := ![[V]td, [V]ts, [V]tb]
|
2024-04-29 10:42:44 -04:00
|
|
|
|
|
|
|
|
|
/-- The `t`th row of the CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
scoped[CKMMatrix] notation (name := t_row) "[" V "]t" => tRow V
|
|
|
|
|
|
|
|
|
|
lemma uRow_normalized (V : CKMMatrix) : conj [V]u ⬝ᵥ [V]u = 1 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 0) 0
|
|
|
|
|
simp [Matrix.mul_apply, Fin.sum_univ_three] at ht
|
|
|
|
|
rw [mul_comm (V.1 0 0) _, mul_comm (V.1 0 1) _, mul_comm (V.1 0 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma cRow_normalized (V : CKMMatrix) : conj [V]c ⬝ᵥ [V]c = 1 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 1) 1
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three,
|
|
|
|
|
one_apply_eq] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 1 0) _, mul_comm (V.1 1 1) _, mul_comm (V.1 1 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma uRow_cRow_orthog (V : CKMMatrix) : conj [V]u ⬝ᵥ [V]c = 0 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 1) 0
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three, ne_eq,
|
|
|
|
|
one_ne_zero, not_false_eq_true, one_apply_ne] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 _ 0) _, mul_comm (V.1 _ 1) _, mul_comm (V.1 _ 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma uRow_tRow_orthog (V : CKMMatrix) : conj [V]u ⬝ᵥ [V]t = 0 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 2) 0
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three, ne_eq,
|
|
|
|
|
Fin.reduceEq, not_false_eq_true, one_apply_ne] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 _ 0) _, mul_comm (V.1 _ 1) _, mul_comm (V.1 _ 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma cRow_uRow_orthog (V : CKMMatrix) : conj [V]c ⬝ᵥ [V]u = 0 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 0) 1
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three, ne_eq,
|
|
|
|
|
zero_ne_one, not_false_eq_true, one_apply_ne] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 _ 0) _, mul_comm (V.1 _ 1) _, mul_comm (V.1 _ 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma cRow_tRow_orthog (V : CKMMatrix) : conj [V]c ⬝ᵥ [V]t = 0 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 2) 1
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three, ne_eq,
|
|
|
|
|
Fin.reduceEq, not_false_eq_true, one_apply_ne] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 _ 0) _, mul_comm (V.1 _ 1) _, mul_comm (V.1 _ 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma tRow_normalized (V : CKMMatrix) : conj [V]t ⬝ᵥ [V]t = 1 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 2) 2
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three,
|
|
|
|
|
one_apply_eq] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 2 0) _, mul_comm (V.1 2 1) _, mul_comm (V.1 2 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma tRow_uRow_orthog (V : CKMMatrix) : conj [V]t ⬝ᵥ [V]u = 0 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 0) 2
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three, ne_eq,
|
|
|
|
|
Fin.reduceEq, not_false_eq_true, one_apply_ne] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 _ 0) _, mul_comm (V.1 _ 1) _, mul_comm (V.1 _ 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma tRow_cRow_orthog (V : CKMMatrix) : conj [V]t ⬝ᵥ [V]c = 0 := by
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [vec3_dotProduct, Fin.isValue, Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hV := V.prop
|
|
|
|
|
rw [mem_unitaryGroup_iff] at hV
|
|
|
|
|
have ht := congrFun (congrFun hV 1) 2
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_apply, star_apply, RCLike.star_def, Fin.sum_univ_three, ne_eq,
|
|
|
|
|
Fin.reduceEq, not_false_eq_true, one_apply_ne] at ht
|
2024-04-26 10:32:03 -04:00
|
|
|
|
rw [mul_comm (V.1 _ 0) _, mul_comm (V.1 _ 1) _, mul_comm (V.1 _ 2) _] at ht
|
|
|
|
|
exact ht
|
|
|
|
|
|
|
|
|
|
lemma uRow_cross_cRow_conj (V : CKMMatrix) : conj (conj [V]u ×₃ conj [V]c) = [V]u ×₃ [V]c := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [crossProduct, Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue, LinearMap.mk₂_apply,
|
|
|
|
|
Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
funext i
|
|
|
|
|
fin_cases i <;> simp
|
|
|
|
|
|
|
|
|
|
lemma cRow_cross_tRow_conj (V : CKMMatrix) : conj (conj [V]c ×₃ conj [V]t) = [V]c ×₃ [V]t := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [crossProduct, Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue, LinearMap.mk₂_apply,
|
|
|
|
|
Pi.conj_apply]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
funext i
|
|
|
|
|
fin_cases i <;> simp
|
|
|
|
|
|
|
|
|
|
lemma uRow_cross_cRow_normalized (V : CKMMatrix) :
|
2024-04-29 10:42:44 -04:00
|
|
|
|
conj (conj [V]u ×₃ conj [V]c) ⬝ᵥ (conj [V]u ×₃ conj [V]c) = 1 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
rw [uRow_cross_cRow_conj, cross_dot_cross, dotProduct_comm, uRow_normalized,
|
|
|
|
|
dotProduct_comm, cRow_normalized, dotProduct_comm, cRow_uRow_orthog,
|
|
|
|
|
dotProduct_comm, uRow_cRow_orthog]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
simp
|
|
|
|
|
|
|
|
|
|
lemma cRow_cross_tRow_normalized (V : CKMMatrix) :
|
2024-04-29 10:42:44 -04:00
|
|
|
|
conj (conj [V]c ×₃ conj [V]t) ⬝ᵥ (conj [V]c ×₃ conj [V]t) = 1 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
rw [cRow_cross_tRow_conj, cross_dot_cross, dotProduct_comm, cRow_normalized,
|
|
|
|
|
dotProduct_comm, tRow_normalized, dotProduct_comm, tRow_cRow_orthog,
|
|
|
|
|
dotProduct_comm, cRow_tRow_orthog]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
simp
|
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
/-- A map from `Fin 3` to each row of a CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
@[simp]
|
|
|
|
|
def rows (V : CKMMatrix) : Fin 3 → Fin 3 → ℂ := fun i =>
|
|
|
|
|
match i with
|
|
|
|
|
| 0 => uRow V
|
|
|
|
|
| 1 => cRow V
|
|
|
|
|
| 2 => tRow V
|
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
lemma rows_linearly_independent (V : CKMMatrix) : LinearIndependent ℂ (rows V) := by
|
2024-04-26 10:32:03 -04:00
|
|
|
|
apply Fintype.linearIndependent_iff.mpr
|
|
|
|
|
intro g hg
|
|
|
|
|
rw [Fin.sum_univ_three] at hg
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, rows] at hg
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have h0 := congrArg (fun X => conj [V]u ⬝ᵥ X) hg
|
|
|
|
|
have h1 := congrArg (fun X => conj [V]c ⬝ᵥ X) hg
|
|
|
|
|
have h2 := congrArg (fun X => conj [V]t ⬝ᵥ X) hg
|
|
|
|
|
simp only [Fin.isValue, dotProduct_add, dotProduct_smul, Pi.conj_apply,
|
|
|
|
|
smul_eq_mul, dotProduct_zero] at h0 h1 h2
|
|
|
|
|
rw [uRow_normalized, uRow_cRow_orthog, uRow_tRow_orthog] at h0
|
|
|
|
|
rw [cRow_normalized, cRow_uRow_orthog, cRow_tRow_orthog] at h1
|
|
|
|
|
rw [tRow_normalized, tRow_uRow_orthog, tRow_cRow_orthog] at h2
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_one, mul_zero, add_zero, zero_add] at h0 h1 h2
|
2024-04-26 10:32:03 -04:00
|
|
|
|
intro i
|
|
|
|
|
fin_cases i
|
2024-06-09 21:33:31 +02:00
|
|
|
|
· exact h0
|
|
|
|
|
· exact h1
|
|
|
|
|
· exact h2
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
|
|
|
|
lemma rows_card : Fintype.card (Fin 3) = FiniteDimensional.finrank ℂ (Fin 3 → ℂ) := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
/-- The rows of a CKM matrix as a basis of `ℂ³`. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
@[simps!]
|
|
|
|
|
noncomputable def rowBasis (V : CKMMatrix) : Basis (Fin 3) ℂ (Fin 3 → ℂ) :=
|
2024-04-29 10:42:44 -04:00
|
|
|
|
basisOfLinearIndependentOfCardEqFinrank (rows_linearly_independent V) rows_card
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
|
|
|
|
lemma cRow_cross_tRow_eq_uRow (V : CKMMatrix) :
|
|
|
|
|
∃ (κ : ℝ), [V]u = cexp (κ * I) • (conj [V]c ×₃ conj [V]t) := by
|
|
|
|
|
obtain ⟨g, hg⟩ := (mem_span_range_iff_exists_fun ℂ).mp (Basis.mem_span (rowBasis V)
|
|
|
|
|
(conj [V]c ×₃ conj [V]t))
|
2024-06-09 21:34:22 +02:00
|
|
|
|
simp only [Fin.sum_univ_three, rowBasis, Fin.isValue,
|
|
|
|
|
coe_basisOfLinearIndependentOfCardEqFinrank, rows] at hg
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have h0 := congrArg (fun X => conj [V]c ⬝ᵥ X) hg
|
|
|
|
|
have h1 := congrArg (fun X => conj [V]t ⬝ᵥ X) hg
|
|
|
|
|
simp only [Fin.isValue, dotProduct_add, dotProduct_smul, Pi.conj_apply,
|
|
|
|
|
smul_eq_mul, dotProduct_zero] at h0 h1
|
|
|
|
|
rw [cRow_normalized, cRow_uRow_orthog, cRow_tRow_orthog, dot_self_cross] at h0
|
|
|
|
|
rw [tRow_normalized, tRow_uRow_orthog, tRow_cRow_orthog, dot_cross_self] at h1
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_zero, mul_one, zero_add, add_zero] at h0 h1 hg
|
|
|
|
|
simp only [h0, h1, zero_smul, add_zero] at hg
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have h2 := congrArg (fun X => conj X ⬝ᵥ X) hg
|
|
|
|
|
simp only [Fin.isValue, dotProduct_smul, Pi.conj_apply, Pi.smul_apply,
|
2024-06-09 21:33:31 +02:00
|
|
|
|
smul_eq_mul, _root_.map_mul, cRow_cross_tRow_normalized] at h2
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have h3 : conj (g 0 • [V]u) = conj (g 0) • conj [V]u := by
|
|
|
|
|
funext i
|
|
|
|
|
fin_cases i <;> simp
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [h3, Fin.isValue, smul_dotProduct, Pi.conj_apply, smul_eq_mul,
|
|
|
|
|
uRow_normalized, Fin.isValue, mul_one, mul_conj, ← Complex.sq_abs] at h2
|
2024-04-26 10:32:03 -04:00
|
|
|
|
simp at h2
|
|
|
|
|
cases' h2 with h2 h2
|
|
|
|
|
swap
|
|
|
|
|
have hx : Complex.abs (g 0) = -1 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [← ofReal_inj, Fin.isValue, ofReal_neg, ofReal_one, h2]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have h3 := Complex.abs.nonneg (g 0)
|
|
|
|
|
simp_all
|
|
|
|
|
have h4 : (0 : ℝ) < 1 := by norm_num
|
2024-06-09 21:33:31 +02:00
|
|
|
|
· exact False.elim (lt_iff_not_le.mp h4 h3)
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hx : [V]u = (g 0)⁻¹ • (conj ([V]c) ×₃ conj ([V]t)) := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
rw [← hg, smul_smul, inv_mul_cancel, one_smul]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
by_contra hn
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [hn] at h2
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hg2 : Complex.abs (g 0)⁻¹ = 1 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [@map_inv₀, h2]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hg22 : ∃ (τ : ℝ), (g 0)⁻¹ = Complex.exp (τ * I) := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
rw [← abs_mul_exp_arg_mul_I (g 0)⁻¹, hg2]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
use arg (g 0)⁻¹
|
|
|
|
|
simp
|
|
|
|
|
obtain ⟨τ, hτ⟩ := hg22
|
|
|
|
|
use τ
|
|
|
|
|
rw [hx, hτ]
|
|
|
|
|
|
|
|
|
|
lemma uRow_cross_cRow_eq_tRow (V : CKMMatrix) :
|
|
|
|
|
∃ (τ : ℝ), [V]t = cexp (τ * I) • (conj ([V]u) ×₃ conj ([V]c)) := by
|
|
|
|
|
obtain ⟨g, hg⟩ := (mem_span_range_iff_exists_fun ℂ).mp (Basis.mem_span (rowBasis V)
|
|
|
|
|
(conj ([V]u) ×₃ conj ([V]c)) )
|
|
|
|
|
rw [Fin.sum_univ_three, rowBasis] at hg
|
|
|
|
|
simp at hg
|
|
|
|
|
have h0 := congrArg (fun X => conj [V]u ⬝ᵥ X) hg
|
|
|
|
|
have h1 := congrArg (fun X => conj [V]c ⬝ᵥ X) hg
|
|
|
|
|
simp only [Fin.isValue, dotProduct_add, dotProduct_smul, Pi.conj_apply,
|
|
|
|
|
smul_eq_mul, dotProduct_zero] at h0 h1
|
|
|
|
|
rw [uRow_normalized, uRow_cRow_orthog, uRow_tRow_orthog, dot_self_cross] at h0
|
|
|
|
|
rw [cRow_normalized, cRow_uRow_orthog, cRow_tRow_orthog, dot_cross_self] at h1
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [Fin.isValue, mul_one, mul_zero, add_zero, zero_add] at h0 h1
|
|
|
|
|
simp only [Fin.isValue, h0, zero_smul, h1, add_zero, zero_add] at hg
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have h2 := congrArg (fun X => conj X ⬝ᵥ X) hg
|
|
|
|
|
simp only [Fin.isValue, dotProduct_smul, Pi.conj_apply, Pi.smul_apply,
|
|
|
|
|
smul_eq_mul, _root_.map_mul] at h2
|
|
|
|
|
rw [uRow_cross_cRow_normalized] at h2
|
|
|
|
|
have h3 : conj (g 2 • [V]t) = conj (g 2) • conj [V]t := by
|
|
|
|
|
funext i
|
|
|
|
|
fin_cases i <;> simp
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp only [h3, Fin.isValue, smul_dotProduct, Pi.conj_apply, smul_eq_mul, tRow_normalized,
|
|
|
|
|
Fin.isValue, mul_one, mul_conj, ← Complex.sq_abs, ofReal_pow, sq_eq_one_iff,
|
|
|
|
|
ofReal_eq_one] at h2
|
2024-04-26 10:32:03 -04:00
|
|
|
|
cases' h2 with h2 h2
|
|
|
|
|
swap
|
|
|
|
|
have hx : Complex.abs (g 2) = -1 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [h2, ← ofReal_inj, Fin.isValue, ofReal_neg, ofReal_one]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have h3 := Complex.abs.nonneg (g 2)
|
|
|
|
|
simp_all
|
|
|
|
|
have h4 : (0 : ℝ) < 1 := by norm_num
|
|
|
|
|
exact False.elim (lt_iff_not_le.mp h4 h3)
|
|
|
|
|
have hx : [V]t = (g 2)⁻¹ • (conj ([V]u) ×₃ conj ([V]c)) := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
rw [← hg, @smul_smul, inv_mul_cancel, one_smul]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
by_contra hn
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [hn] at h2
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hg2 : Complex.abs (g 2)⁻¹ = 1 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [@map_inv₀, h2]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
have hg22 : ∃ (τ : ℝ), (g 2)⁻¹ = Complex.exp (τ * I) := by
|
|
|
|
|
rw [← abs_mul_exp_arg_mul_I (g 2)⁻¹]
|
|
|
|
|
use arg (g 2)⁻¹
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [hg2]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
obtain ⟨τ, hτ⟩ := hg22
|
|
|
|
|
use τ
|
|
|
|
|
rw [hx, hτ]
|
|
|
|
|
|
|
|
|
|
lemma ext_Rows {U V : CKMMatrix} (hu : [U]u = [V]u) (hc : [U]c = [V]c) (ht : [U]t = [V]t) :
|
|
|
|
|
U = V := by
|
|
|
|
|
apply CKMMatrix_ext
|
|
|
|
|
funext i j
|
|
|
|
|
fin_cases i
|
|
|
|
|
have h1 := congrFun hu j
|
|
|
|
|
fin_cases j <;> simpa using h1
|
|
|
|
|
have h1 := congrFun hc j
|
|
|
|
|
fin_cases j <;> simpa using h1
|
|
|
|
|
have h1 := congrFun ht j
|
|
|
|
|
fin_cases j <;> simpa using h1
|
|
|
|
|
|
|
|
|
|
end CKMMatrix
|
|
|
|
|
|
|
|
|
|
namespace phaseShiftApply
|
|
|
|
|
open CKMMatrix
|
|
|
|
|
|
|
|
|
|
variable (V : CKMMatrix) (a b c d e f : ℝ)
|
|
|
|
|
|
2024-04-29 10:42:44 -04:00
|
|
|
|
/-- The cross product of the conjugate of the `u` and `c` rows of a CKM matrix. -/
|
2024-04-26 10:32:03 -04:00
|
|
|
|
def ucCross : Fin 3 → ℂ :=
|
|
|
|
|
conj [phaseShiftApply V a b c d e f]u ×₃ conj [phaseShiftApply V a b c d e f]c
|
|
|
|
|
|
|
|
|
|
lemma ucCross_fst (V : CKMMatrix) : (ucCross V a b c d e f) 0 =
|
|
|
|
|
cexp ((- a * I) + (- b * I) + ( - e * I) + (- f * I)) * (conj [V]u ×₃ conj [V]c) 0 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [ucCross, crossProduct, Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue,
|
|
|
|
|
LinearMap.mk₂_apply, Pi.conj_apply, cons_val_zero, neg_mul, uRow, us, ub, cRow, cs, cb,
|
|
|
|
|
exp_add, exp_sub, ← exp_conj, conj_ofReal]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
ring
|
|
|
|
|
|
|
|
|
|
lemma ucCross_snd (V : CKMMatrix) : (ucCross V a b c d e f) 1 =
|
|
|
|
|
cexp ((- a * I) + (- b * I) + ( - d * I) + (- f * I)) * (conj [V]u ×₃ conj [V]c) 1 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [ucCross, crossProduct, uRow, us, ub, cRow, cs, cb, ud, cd, exp_add,
|
|
|
|
|
exp_sub, ← exp_conj, conj_ofReal]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
ring
|
|
|
|
|
|
|
|
|
|
lemma ucCross_thd (V : CKMMatrix) : (ucCross V a b c d e f) 2 =
|
|
|
|
|
cexp ((- a * I) + (- b * I) + ( - d * I) + (- e * I)) * (conj [V]u ×₃ conj [V]c) 2 := by
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [ucCross, crossProduct, uRow, us, ub, cRow, cs, cb, ud, cd, exp_add, exp_sub,
|
|
|
|
|
← exp_conj, conj_ofReal]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
ring
|
|
|
|
|
|
|
|
|
|
lemma uRow_mul (V : CKMMatrix) (a b c : ℝ) :
|
|
|
|
|
[phaseShiftApply V a b c 0 0 0]u = cexp (a * I) • [V]u := by
|
|
|
|
|
funext i
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [Pi.smul_apply, smul_eq_mul]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
fin_cases i <;>
|
|
|
|
|
change (phaseShiftApply V a b c 0 0 0).1 0 _ = _
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [ud, uRow, ofReal_zero, zero_mul, add_zero, Fin.isValue, Fin.zero_eta, cons_val_zero]
|
|
|
|
|
simp [us, uRow, ofReal_zero, zero_mul, add_zero, Fin.isValue, Fin.mk_one, cons_val_one, head_cons]
|
|
|
|
|
simp [ub, uRow]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
|
|
|
|
lemma cRow_mul (V : CKMMatrix) (a b c : ℝ) :
|
|
|
|
|
[phaseShiftApply V a b c 0 0 0]c = cexp (b * I) • [V]c := by
|
|
|
|
|
funext i
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [Pi.smul_apply, smul_eq_mul]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
fin_cases i <;>
|
|
|
|
|
change (phaseShiftApply V a b c 0 0 0).1 1 _ = _
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [cd, cRow, ofReal_zero, zero_mul, add_zero, Fin.isValue, Fin.zero_eta, cons_val_zero]
|
|
|
|
|
simp [cs, cRow, ofReal_zero, zero_mul, add_zero, Fin.isValue, Fin.mk_one, cons_val_one, head_cons]
|
|
|
|
|
simp [cb, cRow]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
|
|
|
|
lemma tRow_mul (V : CKMMatrix) (a b c : ℝ) :
|
|
|
|
|
[phaseShiftApply V a b c 0 0 0]t = cexp (c * I) • [V]t := by
|
|
|
|
|
funext i
|
2024-04-29 10:42:44 -04:00
|
|
|
|
simp only [Pi.smul_apply, smul_eq_mul]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
fin_cases i <;>
|
|
|
|
|
change (phaseShiftApply V a b c 0 0 0).1 2 _ = _
|
2024-06-09 21:33:31 +02:00
|
|
|
|
simp [td, tRow, ofReal_zero, zero_mul, add_zero, Fin.isValue, Fin.zero_eta, cons_val_zero]
|
|
|
|
|
simp [ts, tRow, ofReal_zero, zero_mul, add_zero, Fin.isValue, Fin.mk_one, cons_val_one, head_cons]
|
|
|
|
|
simp [tb, tRow]
|
2024-04-26 10:32:03 -04:00
|
|
|
|
|
|
|
|
|
end phaseShiftApply
|
|
|
|
|
|
|
|
|
|
end
|