Imports
/-
Copyright (c) 2025 Prabhoda Chandra Sarjapur. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Prabhoda Chandra Sarjapur
-/
module
public import Mathlib.LinearAlgebra.UnitaryGroup
public import Mathlib.Analysis.Complex.ExponentialThe PMNS matrix
The definition the PMNS matrix, which describes neutrino oscillations as part of U(3).
@[expose] public sectiondiagonal phase matrix from a real-valued function on indices
@[simp]
def diagPhase (θ : Fin 3 → ℝ) : Matrix (Fin 3) (Fin 3) ℂ :=
λ i j => if i = j then cexp (I * θ i) else 0lemma stating that the diagonal phase matrix with all zeros is the identity matrix
@[simp]
lemma diagPhase_zero:
diagPhase (fun _ : Fin 3 => 0) = 1 := ⊢ (diagPhase fun x => 0) = 1
i:Fin 3j:Fin 3⊢ diagPhase (fun x => 0) i j = 1 i j
All goals completed! 🐙lemma stating that diagPhase with θ = 0 is equal to diagPhase with all zero phases
@[simp]
lemma diagPhase_zero_eq : diagPhase 0 = diagPhase (fun _ : Fin 3 => 0) := ⊢ diagPhase 0 = diagPhase fun x => 0
i:Fin 3j:Fin 3⊢ diagPhase 0 i j = diagPhase (fun x => 0) i j
All goals completed! 🐙lemma stating that the Hermitian conjugate of diagPhase diag(+iθ_i) is just diagPhase with entries diag(-iθ_i)
@[simp]
lemma diagPhase_star (θ : Fin 3 → ℝ) :
(diagPhase θ)ᴴ = diagPhase (- θ) := θ:Fin 3 → ℝ⊢ (diagPhase θ)ᴴ = diagPhase (-θ)
θ:Fin 3 → ℝ⊢ (diagonal fun i => cexp (I * ↑(θ i)))ᴴ = diagonal fun i => cexp (I * ↑((-θ) i))
All goals completed! 🐙lemma stating that multiplying two phase matrices is equivalent to adding the phases
@[simp]
lemma diagPhase_mul (θ φ : Fin 3 → ℝ) :
diagPhase θ * diagPhase φ = diagPhase (θ + φ) := θ:Fin 3 → ℝφ:Fin 3 → ℝ⊢ diagPhase θ * diagPhase φ = diagPhase (θ + φ)
θ:Fin 3 → ℝφ:Fin 3 → ℝ⊢ ((diagonal fun i => cexp (I * ↑(θ i))) * diagonal fun i => cexp (I * ↑(φ i))) =
diagonal fun i => cexp (I * ↑((θ + φ) i))
All goals completed! 🐙diagonal phase matrix diag(iθ_i) is part of the unitary group
θ:Fin 3 → ℝ⊢ diagPhase θ * star (diagPhase θ) = 1
change _ * (diagPhase θ)ᴴ = 1 θ:Fin 3 → ℝ⊢ diagPhase θ * (diagPhase θ)ᴴ = 1
ext i j θ:Fin 3 → ℝi:Fin 3j:Fin 3⊢ (diagPhase θ * (diagPhase θ)ᴴ) i j = 1 i j
fin_cases i «0» θ:Fin 3 → ℝj:Fin 3⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨0, ⋯⟩) j = 1 ((fun i => i) ⟨0, ⋯⟩) j«1» θ:Fin 3 → ℝj:Fin 3⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨1, ⋯⟩) j = 1 ((fun i => i) ⟨1, ⋯⟩) j«2» θ:Fin 3 → ℝj:Fin 3⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) j = 1 ((fun i => i) ⟨2, ⋯⟩) j <;> «0» θ:Fin 3 → ℝj:Fin 3⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨0, ⋯⟩) j = 1 ((fun i => i) ⟨0, ⋯⟩) j«1» θ:Fin 3 → ℝj:Fin 3⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨1, ⋯⟩) j = 1 ((fun i => i) ⟨1, ⋯⟩) j«2» θ:Fin 3 → ℝj:Fin 3⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) j = 1 ((fun i => i) ⟨2, ⋯⟩) j fin_cases j «2».«0» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩) =
1 ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩)«2».«1» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩) =
1 ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩)«2».«2» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩) =
1 ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩) <;> «0».«0» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨0, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩) =
1 ((fun i => i) ⟨0, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩)«0».«1» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨0, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩) =
1 ((fun i => i) ⟨0, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩)«0».«2» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨0, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩) =
1 ((fun i => i) ⟨0, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩)«1».«0» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩) =
1 ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩)«1».«1» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩) =
1 ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩)«1».«2» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩) =
1 ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩)«2».«0» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩) =
1 ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩)«2».«1» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩) =
1 ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩)«2».«2» θ:Fin 3 → ℝ⊢ (diagPhase θ * (diagPhase θ)ᴴ) ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩) =
1 ((fun i => i) ⟨2, ⋯⟩) ((fun i => i) ⟨2, ⋯⟩) simp [diagPhase,
Matrix.mul_apply,
← exp_add] All goals completed! 🐙⟩The underlying matrix of the phase-shift element of the unitary group is the phase-shift matrix.
@[simp]
lemma diagPhaseShift_coe_matrix (θ : Fin 3 → ℝ) : ↑(diagPhase_unitary θ) = diagPhase θ := rfl
The Lepton phase shift matrix as a 3×3 complex matrix, given three reals a b c.
This dictates the phase shift freedom of the charged lepton sector.
def leptonPhaseShift (a b c : ℝ) : Matrix (Fin 3) (Fin 3) ℂ :=
diagPhase (fun i => if i = 0 then a else if i = 1 then b else c)
The neutrino phase shift matrix as a 3×3 complex matrix, given three reals d e f.
This dictates the phase shift freedom of the neutrino sector (If neutrinos are Dirac).
def neutrinoPhaseShift (d e f : ℝ) : Matrix (Fin 3) (Fin 3) ℂ :=
diagPhase (fun i => if i = 0 then d else if i = 1 then e else f)If neutrinos are Majorana particles, then the neutrino phase shift matrix is physical, and cannot be absorbed into the definition of the neutrino fields.
def majoranaPhaseMatrix (α1 α2 : ℝ) : Matrix (Fin 3) (Fin 3) ℂ :=
diagPhase (fun i => if i = 0 then 0 else if i = 1 then α1/2 else α2/2)The Dirac PMNS matrix equivalence relations
def PMNS_dirac_equivalence (U V : unitaryGroup (Fin 3) ℂ) : Prop :=
∃ (θ φ : Fin 3 → ℝ),
U = diagPhase θ * V * diagPhase φ
The relation PMNS_dirac_equivalence is reflexive.
lemma PMNS_dirac_equivalence_refl :
∀ U : unitaryGroup (Fin 3) ℂ, PMNS_dirac_equivalence U U := by ⊢ ∀ (U : ↥(unitaryGroup (Fin 3) ℂ)), PMNS_dirac_equivalence U U
intro U U:↥(unitaryGroup (Fin 3) ℂ)⊢ PMNS_dirac_equivalence U U
exact ⟨0, 0, by U:↥(unitaryGroup (Fin 3) ℂ)⊢ ↑U = diagPhase 0 * ↑U * diagPhase 0 simp All goals completed! 🐙⟩
The relation PMNS_dirac_equivalence is symmetric.
lemma PMNS_dirac_equivalence_symm :
∀ U V : unitaryGroup (Fin 3) ℂ, PMNS_dirac_equivalence U V → PMNS_dirac_equivalence V U := by ⊢ ∀ (U V : ↥(unitaryGroup (Fin 3) ℂ)), PMNS_dirac_equivalence U V → PMNS_dirac_equivalence V U
rintro U V ⟨θ, φ, h'⟩ U:↥(unitaryGroup (Fin 3) ℂ)V:↥(unitaryGroup (Fin 3) ℂ)θ:Fin 3 → ℝφ:Fin 3 → ℝh':↑U = diagPhase θ * ↑V * diagPhase φ⊢ PMNS_dirac_equivalence V U
refine ⟨-θ, -φ, ?_⟩ U:↥(unitaryGroup (Fin 3) ℂ)V:↥(unitaryGroup (Fin 3) ℂ)θ:Fin 3 → ℝφ:Fin 3 → ℝh':↑U = diagPhase θ * ↑V * diagPhase φ⊢ ↑V = diagPhase (-θ) * ↑U * diagPhase (-φ)
simp only [h', ← mul_assoc, diagPhase_mul] U:↥(unitaryGroup (Fin 3) ℂ)V:↥(unitaryGroup (Fin 3) ℂ)θ:Fin 3 → ℝφ:Fin 3 → ℝh':↑U = diagPhase θ * ↑V * diagPhase φ⊢ ↑V = diagPhase (-θ + θ) * ↑V * diagPhase φ * diagPhase (-φ)
simp [mul_assoc, diagPhase_mul, add_neg_cancel, neg_add_cancel] All goals completed! 🐙
The relation PMNS_dirac_equivalence is transitive.
lemma PMNS_dirac_equivalence_trans {U V W : unitaryGroup (Fin 3) ℂ} :
PMNS_dirac_equivalence U V → PMNS_dirac_equivalence V W → PMNS_dirac_equivalence U W := by U:↥(unitaryGroup (Fin 3) ℂ)V:↥(unitaryGroup (Fin 3) ℂ)W:↥(unitaryGroup (Fin 3) ℂ)⊢ PMNS_dirac_equivalence U V → PMNS_dirac_equivalence V W → PMNS_dirac_equivalence U W
rintro ⟨θ1, φ1, hUV⟩ ⟨θ2, φ2, hVW⟩ U:↥(unitaryGroup (Fin 3) ℂ)V:↥(unitaryGroup (Fin 3) ℂ)W:↥(unitaryGroup (Fin 3) ℂ)θ1:Fin 3 → ℝφ1:Fin 3 → ℝhUV:↑U = diagPhase θ1 * ↑V * diagPhase φ1θ2:Fin 3 → ℝφ2:Fin 3 → ℝhVW:↑V = diagPhase θ2 * ↑W * diagPhase φ2⊢ PMNS_dirac_equivalence U W
refine ⟨θ1 + θ2, φ1 + φ2, ?_⟩ U:↥(unitaryGroup (Fin 3) ℂ)V:↥(unitaryGroup (Fin 3) ℂ)W:↥(unitaryGroup (Fin 3) ℂ)θ1:Fin 3 → ℝφ1:Fin 3 → ℝhUV:↑U = diagPhase θ1 * ↑V * diagPhase φ1θ2:Fin 3 → ℝφ2:Fin 3 → ℝhVW:↑V = diagPhase θ2 * ↑W * diagPhase φ2⊢ ↑U = diagPhase (θ1 + θ2) * ↑W * diagPhase (φ1 + φ2)
simp only [hUV, hVW, ← mul_assoc, diagPhase_mul] U:↥(unitaryGroup (Fin 3) ℂ)V:↥(unitaryGroup (Fin 3) ℂ)W:↥(unitaryGroup (Fin 3) ℂ)θ1:Fin 3 → ℝφ1:Fin 3 → ℝhUV:↑U = diagPhase θ1 * ↑V * diagPhase φ1θ2:Fin 3 → ℝφ2:Fin 3 → ℝhVW:↑V = diagPhase θ2 * ↑W * diagPhase φ2⊢ diagPhase (θ1 + θ2) * ↑W * diagPhase φ2 * diagPhase φ1 = diagPhase (θ1 + θ2) * ↑W * diagPhase (φ1 + φ2)
simp [mul_assoc, diagPhase_mul, add_comm] All goals completed! 🐙