Imports
/- Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ module public import Mathlib.LinearAlgebra.UnitaryGroup public import Mathlib.Analysis.Complex.Trigonometric

The CKM Matrix

The definition of the type of CKM matrices as unitary $3×3$-matrices.

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.

@[expose] public section

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) := ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]]

The phase shift matrix for zero-phases is the identity.

lemma phaseShiftMatrix_one : phaseShiftMatrix 0 0 0 = 1 := phaseShiftMatrix 0 0 0 = 1 i:Fin 3j:Fin 3phaseShiftMatrix 0 0 0 i j = 1 i j j:Fin 3phaseShiftMatrix 0 0 0 ((fun i => i) 0, ) j = 1 ((fun i => i) 0, ) jj:Fin 3phaseShiftMatrix 0 0 0 ((fun i => i) 1, ) j = 1 ((fun i => i) 1, ) jj:Fin 3phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) j = 1 ((fun i => i) 2, ) j j:Fin 3phaseShiftMatrix 0 0 0 ((fun i => i) 0, ) j = 1 ((fun i => i) 0, ) jj:Fin 3phaseShiftMatrix 0 0 0 ((fun i => i) 1, ) j = 1 ((fun i => i) 1, ) jj:Fin 3phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) j = 1 ((fun i => i) 2, ) j phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) ((fun i => i) 0, ) = 1 ((fun i => i) 2, ) ((fun i => i) 0, )phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) ((fun i => i) 1, ) = 1 ((fun i => i) 2, ) ((fun i => i) 1, )phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) ((fun i => i) 2, ) = 1 ((fun i => i) 2, ) ((fun i => i) 2, ) phaseShiftMatrix 0 0 0 ((fun i => i) 0, ) ((fun i => i) 0, ) = 1 ((fun i => i) 0, ) ((fun i => i) 0, )phaseShiftMatrix 0 0 0 ((fun i => i) 0, ) ((fun i => i) 1, ) = 1 ((fun i => i) 0, ) ((fun i => i) 1, )phaseShiftMatrix 0 0 0 ((fun i => i) 0, ) ((fun i => i) 2, ) = 1 ((fun i => i) 0, ) ((fun i => i) 2, )phaseShiftMatrix 0 0 0 ((fun i => i) 1, ) ((fun i => i) 0, ) = 1 ((fun i => i) 1, ) ((fun i => i) 0, )phaseShiftMatrix 0 0 0 ((fun i => i) 1, ) ((fun i => i) 1, ) = 1 ((fun i => i) 1, ) ((fun i => i) 1, )phaseShiftMatrix 0 0 0 ((fun i => i) 1, ) ((fun i => i) 2, ) = 1 ((fun i => i) 1, ) ((fun i => i) 2, )phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) ((fun i => i) 0, ) = 1 ((fun i => i) 2, ) ((fun i => i) 0, )phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) ((fun i => i) 1, ) = 1 ((fun i => i) 2, ) ((fun i => i) 1, )phaseShiftMatrix 0 0 0 ((fun i => i) 2, ) ((fun i => i) 2, ) = 1 ((fun i => i) 2, ) ((fun i => i) 2, ) All goals completed! 🐙

The conjugate transpose of the phase shift matrix is the phase-shift matrix with negated phases.

lemma phaseShiftMatrix_star (a b c : ) : (phaseShiftMatrix a b c) = phaseShiftMatrix (- a) (- b) (- c) := a:b:c:(phaseShiftMatrix a b c) = phaseShiftMatrix (-a) (-b) (-c) a:b:c:i:Fin 3j:Fin 3(phaseShiftMatrix a b c) i j = phaseShiftMatrix (-a) (-b) (-c) i j a:b:c:j:Fin 3(phaseShiftMatrix a b c) ((fun i => i) 0, ) j = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 0, ) ja:b:c:j:Fin 3(phaseShiftMatrix a b c) ((fun i => i) 1, ) j = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 1, ) ja:b:c:j:Fin 3(phaseShiftMatrix a b c) ((fun i => i) 2, ) j = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) j a:b:c:j:Fin 3(phaseShiftMatrix a b c) ((fun i => i) 0, ) j = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 0, ) ja:b:c:j:Fin 3(phaseShiftMatrix a b c) ((fun i => i) 1, ) j = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 1, ) ja:b:c:j:Fin 3(phaseShiftMatrix a b c) ((fun i => i) 2, ) j = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) j a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 2, ) ((fun i => i) 0, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) ((fun i => i) 0, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 2, ) ((fun i => i) 1, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) ((fun i => i) 1, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 2, ) ((fun i => i) 2, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) ((fun i => i) 2, ) a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 0, ) ((fun i => i) 0, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 0, ) ((fun i => i) 0, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 0, ) ((fun i => i) 1, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 0, ) ((fun i => i) 1, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 0, ) ((fun i => i) 2, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 0, ) ((fun i => i) 2, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 1, ) ((fun i => i) 0, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 1, ) ((fun i => i) 0, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 1, ) ((fun i => i) 1, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 1, ) ((fun i => i) 1, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 1, ) ((fun i => i) 2, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 1, ) ((fun i => i) 2, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 2, ) ((fun i => i) 0, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) ((fun i => i) 0, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 2, ) ((fun i => i) 1, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) ((fun i => i) 1, )a:b:c:(phaseShiftMatrix a b c) ((fun i => i) 2, ) ((fun i => i) 2, ) = phaseShiftMatrix (-a) (-b) (-c) ((fun i => i) 2, ) ((fun i => i) 2, ) All goals completed! 🐙

The multiple of two phase shift matrices is equal to the phase shift matrix with added phases.

lemma phaseShiftMatrix_mul (a b c d e f : ) : phaseShiftMatrix a b c * phaseShiftMatrix d e f = phaseShiftMatrix (a + d) (b + e) (c + f) := a:b:c:d:e:f:phaseShiftMatrix a b c * phaseShiftMatrix d e f = phaseShiftMatrix (a + d) (b + e) (c + f) a:b:c:d:e:f:i:Fin 3j:Fin 3(phaseShiftMatrix a b c * phaseShiftMatrix d e f) i j = phaseShiftMatrix (a + d) (b + e) (c + f) i j a:b:c:d:e:f:j:Fin 3(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 0, ) j = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 0, ) ja:b:c:d:e:f:j:Fin 3(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 1, ) j = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 1, ) ja:b:c:d:e:f:j:Fin 3(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) j = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) j a:b:c:d:e:f:j:Fin 3(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 0, ) j = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 0, ) ja:b:c:d:e:f:j:Fin 3(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 1, ) j = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 1, ) ja:b:c:d:e:f:j:Fin 3(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) j = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) j a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) ((fun i => i) 0, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) ((fun i => i) 0, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) ((fun i => i) 1, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) ((fun i => i) 1, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) ((fun i => i) 2, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) ((fun i => i) 2, ) a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 0, ) ((fun i => i) 0, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 0, ) ((fun i => i) 0, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 0, ) ((fun i => i) 1, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 0, ) ((fun i => i) 1, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 0, ) ((fun i => i) 2, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 0, ) ((fun i => i) 2, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 1, ) ((fun i => i) 0, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 1, ) ((fun i => i) 0, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 1, ) ((fun i => i) 1, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 1, ) ((fun i => i) 1, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 1, ) ((fun i => i) 2, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 1, ) ((fun i => i) 2, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) ((fun i => i) 0, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) ((fun i => i) 0, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) ((fun i => i) 1, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) ((fun i => i) 1, )a:b:c:d:e:f:(phaseShiftMatrix a b c * phaseShiftMatrix d e f) ((fun i => i) 2, ) ((fun i => i) 2, ) = phaseShiftMatrix (a + d) (b + e) (c + f) ((fun i => i) 2, ) ((fun i => i) 2, ) All goals completed! 🐙

Given three real numbers a b c the unitary matrix with exp (I * a) etc on the leading diagonal.

a:b:c:phaseShiftMatrix (a + -a) (b + -b) (c + -c) = phaseShiftMatrix 0 0 0 All goals completed! 🐙

The underlying matrix of the phase-shift element of the unitary group is the phase-shift matrix.

lemma phaseShift_coe_matrix (a b c : ) : (phaseShift a b c) = phaseShiftMatrix a b c := rfl

The relation on unitary matrices (CKM matrices) satisfied if two unitary matrices are related by phase shifts of quarks.

def PhaseShiftRelation (U V : unitaryGroup (Fin 3) ) : Prop := a b c e f g, U = phaseShift a b c * V * phaseShift e f g

The relation PhaseShiftRelation is reflective.

lemma phaseShiftRelation_refl (U : unitaryGroup (Fin 3) ) : PhaseShiftRelation U U := U:(unitaryGroup (Fin 3) )PhaseShiftRelation U U U:(unitaryGroup (Fin 3) )U = phaseShift 0 0 0 * U * phaseShift 0 0 0 All goals completed! 🐙

The relation PhaseShiftRelation is symmetric.

lemma phaseShiftRelation_symm {U V : unitaryGroup (Fin 3) } : PhaseShiftRelation U V PhaseShiftRelation V U := U:(unitaryGroup (Fin 3) )V:(unitaryGroup (Fin 3) )PhaseShiftRelation U V PhaseShiftRelation V U V:(unitaryGroup (Fin 3) )a:b:c:e:f:g:PhaseShiftRelation V (phaseShift a b c * V * phaseShift e f g) V:(unitaryGroup (Fin 3) )a:b:c:e:f:g:V = phaseShift (-a) (-b) (-c) * (phaseShift a b c * V * phaseShift e f g) * phaseShift (-e) (-f) (-g) V:(unitaryGroup (Fin 3) )a:b:c:e:f:g:V = phaseShiftMatrix (-a) (-b) (-c) * (phaseShiftMatrix a b c * V) All goals completed! 🐙

The relation PhaseShiftRelation is transitive.

All goals completed! 🐙

The relation PhaseShiftRelation is an equivalence relation.

lemma phaseShiftRelation_equiv : Equivalence PhaseShiftRelation where refl := phaseShiftRelation_refl symm := phaseShiftRelation_symm trans := phaseShiftRelation_trans

The type of CKM matrices.

def CKMMatrix : Type := unitaryGroup (Fin 3)

Two CKM matrices are equal if their underlying unitary matrices are equal.

lemma CKMMatrix_ext {U V : CKMMatrix} (h : U.val = V.val) : U = V := Subtype.ext h

The udth element of the CKM matrix.

scoped[CKMMatrix] notation (name := ud_element) "[" V "]ud" => V.1 0 0

The usth element of the CKM matrix.

scoped[CKMMatrix] notation (name := us_element) "[" V "]us" => V.1 0 1

The ubth element of the CKM matrix.

scoped[CKMMatrix] notation (name := ub_element) "[" V "]ub" => V.1 0 2

The cdth element of the CKM matrix.

scoped[CKMMatrix] notation (name := cd_element) "[" V "]cd" => V.1 1 0

The csth element of the CKM matrix.

scoped[CKMMatrix] notation (name := cs_element) "[" V "]cs" => V.1 1 1

The cbth element of the CKM matrix.

scoped[CKMMatrix] notation (name := cb_element) "[" V "]cb" => V.1 1 2

The tdth element of the CKM matrix.

scoped[CKMMatrix] notation (name := td_element) "[" V "]td" => V.1 2 0

The tsth element of the CKM matrix.

scoped[CKMMatrix] notation (name := ts_element) "[" V "]ts" => V.1 2 1

The tbth element of the CKM matrix.

scoped[CKMMatrix] notation (name := tb_element) "[" V "]tb" => V.1 2 2

The setoid of CKM matrices defined by phase shifts of fermions.

instance CKMMatrixSetoid : Setoid CKMMatrix := PhaseShiftRelation, phaseShiftRelation_equiv

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

A CKM matrix is equivalent to a phase-shift of itself.

lemma equiv (V : CKMMatrix) (a b c d e f : ) : V phaseShiftApply V a b c d e f := V:CKMMatrixa:b:c:d:e:f:V phaseShiftApply V a b c d e f V:CKMMatrixa:b:c:d:e:f:phaseShiftApply V a b c d e f V All goals completed! 🐙

The ud component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 0 0 = cexp (a * I + d * I) * V 0 0 V:CKMMatrixa:b:c:d:e:f:cexp (I * a) * V 0 0 * cexp (I * d) = cexp (a * I) * cexp (d * I) * V 0 0 All goals completed! 🐙

The us component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 0 1 = cexp (a * I + e * I) * V 0 1 V:CKMMatrixa:b:c:d:e:f:cexp (I * a) * V 0 1 * cexp (I * e) = cexp (a * I) * cexp (e * I) * V 0 1 All goals completed! 🐙

The ub component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 0 2 = cexp (a * I + f * I) * V 0 2 V:CKMMatrixa:b:c:d:e:f:cexp (I * a) * V 0 2 * cexp (I * f) = cexp (a * I) * cexp (f * I) * V 0 2 All goals completed! 🐙

The cd component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 1 0 = cexp (b * I + d * I) * V 1 0 V:CKMMatrixa:b:c:d:e:f:cexp (I * b) * V 1 0 * cexp (I * d) = cexp (b * I) * cexp (d * I) * V 1 0 All goals completed! 🐙

The cs component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 1 1 = cexp (b * I + e * I) * V 1 1 V:CKMMatrixa:b:c:d:e:f:cexp (I * b) * V 1 1 * cexp (I * e) = cexp (b * I) * cexp (e * I) * V 1 1 All goals completed! 🐙

The cb component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 1 2 = cexp (b * I + f * I) * V 1 2 V:CKMMatrixa:b:c:d:e:f:cexp (I * b) * V 1 2 * cexp (I * f) = cexp (b * I) * cexp (f * I) * V 1 2 All goals completed! 🐙

The td component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 2 0 = cexp (c * I + d * I) * V 2 0 V:CKMMatrixa:b:c:d:e:f:cexp (I * c) * V 2 0 * cexp (I * d) = cexp (c * I) * cexp (d * I) * V 2 0 All goals completed! 🐙

The ts component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 2 1 = cexp (c * I + e * I) * V 2 1 V:CKMMatrixa:b:c:d:e:f:cexp (I * c) * V 2 1 * cexp (I * e) = cexp (c * I) * cexp (e * I) * V 2 1 All goals completed! 🐙

The tb component of the CKM matrix obtained after applying a phase shift.

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 := V:CKMMatrixa:b:c:d:e:f:(phaseShiftApply V a b c d e f) 2 2 = cexp (c * I + f * I) * V 2 2 V:CKMMatrixa:b:c:d:e:f:cexp (I * c) * V 2 2 * cexp (I * f) = cexp (c * I) * cexp (f * I) * V 2 2 All goals completed! 🐙

The absolute value of the (i,j)th element of V.

@[simp] def VAbs' (V : unitaryGroup (Fin 3) ) (i j : Fin 3) : := norm (V i j)

If two CKM matrices are equivalent (under phase shifts), then their absolute values are the same.

lemma VAbs'_equiv (i j : Fin 3) (V U : CKMMatrix) (h : V U) : VAbs' V i j = VAbs' U i j := i:Fin 3j:Fin 3V:CKMMatrixU:CKMMatrixh:V UVAbs' V i j = VAbs' U i j i:Fin 3j:Fin 3U:CKMMatrixa:b:c:e:f:g:VAbs' (phaseShift a b c * U * phaseShift e f g) i j = VAbs' U i j i:Fin 3j:Fin 3U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] i 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 j = U i j j:Fin 3U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 j = U ((fun i => i) 0, ) jj:Fin 3U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 j = U ((fun i => i) 1, ) jj:Fin 3U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 j = U ((fun i => i) 2, ) j j:Fin 3U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 j = U ((fun i => i) 0, ) jj:Fin 3U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 j = U ((fun i => i) 1, ) jj:Fin 3U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 j + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 j = U ((fun i => i) 2, ) j U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 0, ) = U ((fun i => i) 2, ) ((fun i => i) 0, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 1, ) = U ((fun i => i) 2, ) ((fun i => i) 1, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 2, ) = U ((fun i => i) 2, ) ((fun i => i) 2, ) U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 0, ) = U ((fun i => i) 0, ) ((fun i => i) 0, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 1, ) = U ((fun i => i) 0, ) ((fun i => i) 1, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 0, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 2, ) = U ((fun i => i) 0, ) ((fun i => i) 2, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 0, ) = U ((fun i => i) 1, ) ((fun i => i) 0, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 1, ) = U ((fun i => i) 1, ) ((fun i => i) 1, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 1, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 2, ) = U ((fun i => i) 1, ) ((fun i => i) 2, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 0, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 0, ) = U ((fun i => i) 2, ) ((fun i => i) 0, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 1, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 1, ) = U ((fun i => i) 2, ) ((fun i => i) 1, )U:CKMMatrixa:b:c:e:f:g:(![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 0 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 0) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 0 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 1 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 1) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 1 ((fun i => i) 2, ) + (![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 0 * U 0 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 1 * U 1 2 + ![![cexp (I * a), 0, 0], ![0, cexp (I * b), 0], ![0, 0, cexp (I * c)]] ((fun i => i) 2, ) 2 * U 2 2) * ![![cexp (I * e), 0, 0], ![0, cexp (I * f), 0], ![0, 0, cexp (I * g)]] 2 ((fun i => i) 2, ) = U ((fun i => i) 2, ) ((fun i => i) 2, ) All goals completed! 🐙

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)

The absolute value of the udth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VudAbs := VAbs 0 0

The absolute value of the usth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VusAbs := VAbs 0 1

The absolute value of the ubth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VubAbs := VAbs 0 2

The absolute value of the cdth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VcdAbs := VAbs 1 0

The absolute value of the csth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VcsAbs := VAbs 1 1

The absolute value of the cbth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VcbAbs := VAbs 1 2

The absolute value of the tdth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VtdAbs := VAbs 2 0

The absolute value of the tsth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VtsAbs := VAbs 2 1

The absolute value of the tbth element of a representative of an equivalence class of CKM matrices.

@[simp] abbrev VtbAbs := VAbs 2 2

The ratio of the ub and ud elements of a CKM matrix.

def Rubud (V : CKMMatrix) : := [V]ub / [V]ud

The ratio of the ub and ud elements of a CKM matrix.

scoped[CKMMatrix] notation (name := ub_ud_ratio) "[" V "]ub|ud" => Rubud V

The ratio of the us and ud elements of a CKM matrix.

def Rusud (V : CKMMatrix) : := [V]us / [V]ud

The ratio of the us and ud elements of a CKM matrix.

scoped[CKMMatrix] notation (name := us_ud_ratio) "[" V "]us|ud" => Rusud V

The ratio of the ud and us elements of a CKM matrix.

def Rudus (V : CKMMatrix) : := [V]ud / [V]us

The ratio of the ud and us elements of a CKM matrix.

scoped[CKMMatrix] notation (name := ud_us_ratio) "[" V "]ud|us" => Rudus V

The ratio of the ub and us elements of a CKM matrix.

def Rubus (V : CKMMatrix) : := [V]ub / [V]us

The ratio of the ub and us elements of a CKM matrix.

scoped[CKMMatrix] notation (name := ub_us_ratio) "[" V "]ub|us" => Rubus V

The ratio of the cd and cb elements of a CKM matrix.

def Rcdcb (V : CKMMatrix) : := [V]cd / [V]cb

The ratio of the cd and cb elements of a CKM matrix.

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 := (div_mul_cancel₀ (V.1 1 0) h).symm

The ratio of the cs and cb elements of a CKM matrix.

def Rcscb (V : CKMMatrix) : := [V]cs / [V]cb

The ratio of the cs and cb elements of a CKM matrix.

scoped[CKMMatrix] notation (name := cs_cb_ratio) "[" V "]cs|cb" => Rcscb V

Multiplying the ratio of the cs by cb element of a CKM matrix by the cb element returns the cs element, as long as the cb element is non-zero.

lemma Rcscb_mul_cb {V : CKMMatrix} (h : [V]cb 0) : [V]cs = Rcscb V * [V]cb := (div_mul_cancel₀ [V]cs h).symm