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 Physlib.Relativity.PauliMatrices.Basic
public import Physlib.Relativity.MinkowskiMatrixInteraction of Pauli matrices with self-adjoint matrices
@[expose] public section
The trace of a pauli-matrix multiplied by a self-adjoint 2×2 matrix is real.
All goals completed! 🐙
Two 2×2 self-adjoint matrices are equal if the (complex) traces of each matrix multiplied by
each of the Pauli-matrices are equal.
lemma selfAdjoint_ext_complex {A B : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)}
(h0 : Matrix.trace (σ0 * A.1) = Matrix.trace (σ0 * B.1))
(h1 : Matrix.trace (σ1 * A.1) = Matrix.trace (σ1 * B.1))
(h2 : Matrix.trace (σ2 * A.1) = Matrix.trace (σ2 * B.1))
(h3 : Matrix.trace (σ3 * A.1) = Matrix.trace (σ3 * B.1)) : A = B := by A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace = (σ (Sum.inl 0) * ↑B).traceh1:(σ (Sum.inr 0) * ↑A).trace = (σ (Sum.inr 0) * ↑B).traceh2:(σ (Sum.inr 1) * ↑A).trace = (σ (Sum.inr 1) * ↑B).traceh3:(σ (Sum.inr 2) * ↑A).trace = (σ (Sum.inr 2) * ↑B).trace⊢ A = B
ext i j A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace = (σ (Sum.inl 0) * ↑B).traceh1:(σ (Sum.inr 0) * ↑A).trace = (σ (Sum.inr 0) * ↑B).traceh2:(σ (Sum.inr 1) * ↑A).trace = (σ (Sum.inr 1) * ↑B).traceh3:(σ (Sum.inr 2) * ↑A).trace = (σ (Sum.inr 2) * ↑B).tracei:Fin 2j:Fin 2⊢ ↑A i j = ↑B i j
rw [eta_fin_two A.1, A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inl 0) * ↑B).traceh1:(σ (Sum.inr 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 0) * ↑B).traceh2:(σ (Sum.inr 1) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 1) * ↑B).traceh3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * ↑B).tracei:Fin 2j:Fin 2⊢ ↑A i j = ↑B i j A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inl 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh1:(σ (Sum.inr 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh2:(σ (Sum.inr 1) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 1) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).tracei:Fin 2j:Fin 2⊢ ↑A i j = ↑B i j eta_fin_two B.1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inl 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh1:(σ (Sum.inr 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh2:(σ (Sum.inr 1) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 1) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).tracei:Fin 2j:Fin 2⊢ ↑A i j = ↑B i j A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inl 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh1:(σ (Sum.inr 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh2:(σ (Sum.inr 1) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 1) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).tracei:Fin 2j:Fin 2⊢ ↑A i j = ↑B i j] at h0 h1 h2 h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inl 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh1:(σ (Sum.inr 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh2:(σ (Sum.inr 1) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 1) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).tracei:Fin 2j:Fin 2⊢ ↑A i j = ↑B i j
simp only [Fin.isValue, pauliMatrix_inl_zero_eq_one, one_mul, trace_fin_two_of] at h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h1:(σ (Sum.inr 0) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 0) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh2:(σ (Sum.inr 1) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 1) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).tracei:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1⊢ ↑A i j = ↑B i j
simp only [pauliMatrix, Fin.isValue, cons_mul, Nat.succ_eq_add_one, Nat.reduceAdd, vecMul_cons,
head_cons, zero_smul, tail_cons, one_smul, empty_vecMul, add_zero, zero_add, empty_mul,
Equiv.symm_apply_apply, trace_fin_two_of] at h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h2:(σ (Sum.inr 1) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 1) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).traceh3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).tracei:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1⊢ ↑A i j = ↑B i j
simp only [pauliMatrix, Fin.isValue, cons_mul, Nat.succ_eq_add_one, Nat.reduceAdd, vecMul_cons,
head_cons, zero_smul, tail_cons, neg_smul, smul_cons, smul_eq_mul, smul_empty, neg_cons,
neg_empty, empty_vecMul, add_zero, zero_add, empty_mul, Equiv.symm_apply_apply,
trace_fin_two_of] at h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h3:(σ (Sum.inr 2) * !![↑A 0 0, ↑A 0 1; ↑A 1 0, ↑A 1 1]).trace = (σ (Sum.inr 2) * !![↑B 0 0, ↑B 0 1; ↑B 1 0, ↑B 1 1]).tracei:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1⊢ ↑A i j = ↑B i j
simp only [pauliMatrix, Fin.isValue, cons_mul, Nat.succ_eq_add_one, Nat.reduceAdd, vecMul_cons,
head_cons, one_smul, tail_cons, zero_smul, empty_vecMul, add_zero, neg_smul, neg_cons,
neg_empty, zero_add, empty_mul, Equiv.symm_apply_apply, trace_fin_two_of] at h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))i:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1h3:↑A 0 0 + -↑A 1 1 = ↑B 0 0 + -↑B 1 1⊢ ↑A i j = ↑B i j
match i, j with
| 0, 0 => A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))i:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1h3:↑A 0 0 + -↑A 1 1 = ↑B 0 0 + -↑B 1 1⊢ ↑A 0 0 = ↑B 0 0
linear_combination (norm := ring_nf All goals completed! 🐙) (h0 + h3) / 2
| 0, 1 => A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))i:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1h3:↑A 0 0 + -↑A 1 1 = ↑B 0 0 + -↑B 1 1⊢ ↑A 0 1 = ↑B 0 1
linear_combination (norm := ring_nf a A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))i:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1h3:↑A 0 0 + -↑A 1 1 = ↑B 0 0 + -↑B 1 1⊢ ↑A 0 1 * (1 / 2) + ↑A 0 1 * I ^ 2 * (1 / 2) + ↑B 1 0 * (1 / 2) + ↑B 1 0 * I ^ 2 * (1 / 2) + ↑B 0 1 * (-1 / 2) +
↑B 0 1 * I ^ 2 * (-1 / 2) +
I ^ 2 * ↑A 1 0 * (-1 / 2) +
↑A 1 0 * (-1 / 2) =
0) (h1 - I * h2) / 2
simp All goals completed! 🐙
| 1, 0 => A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))i:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1h3:↑A 0 0 + -↑A 1 1 = ↑B 0 0 + -↑B 1 1⊢ ↑A 1 0 = ↑B 1 0
linear_combination (norm := ring_nf a A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))i:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1h3:↑A 0 0 + -↑A 1 1 = ↑B 0 0 + -↑B 1 1⊢ ↑A 1 0 * (1 / 2) + ↑A 1 0 * I ^ 2 * (1 / 2) + ↑B 1 0 * (-1 / 2) + ↑B 1 0 * I ^ 2 * (-1 / 2) + ↑B 0 1 * (1 / 2) +
↑B 0 1 * I ^ 2 * (1 / 2) +
I ^ 2 * ↑A 0 1 * (-1 / 2) +
↑A 0 1 * (-1 / 2) =
0) (h1 + I * h2) / 2
simp All goals completed! 🐙
| 1, 1 => A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))i:Fin 2j:Fin 2h0:↑A 0 0 + ↑A 1 1 = ↑B 0 0 + ↑B 1 1h1:↑A 1 0 + ↑A 0 1 = ↑B 1 0 + ↑B 0 1h2:-(I * ↑A 1 0) + I * ↑A 0 1 = -(I * ↑B 1 0) + I * ↑B 0 1h3:↑A 0 0 + -↑A 1 1 = ↑B 0 0 + -↑B 1 1⊢ ↑A 1 1 = ↑B 1 1
linear_combination (norm := ring_nf All goals completed! 🐙) (h0 - h3) / 2
Two 2×2 self-adjoint matrices are equal if the real traces of each matrix multiplied by
each of the Pauli-matrices are equal.
lemma selfAdjoint_ext {A B : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)}
(h0 : ((Matrix.trace (σ0 * A.1))).re = ((Matrix.trace (σ0 * B.1))).re)
(h1 : ((Matrix.trace (σ1 * A.1))).re = ((Matrix.trace (σ1 * B.1))).re)
(h2 : ((Matrix.trace (σ2 * A.1))).re = ((Matrix.trace (σ2 * B.1))).re)
(h3 : ((Matrix.trace (σ3 * A.1))).re = ((Matrix.trace (σ3 * B.1))).re) :
A = B := by A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.re⊢ A = B
have h0' := congrArg ofRealHom h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':ofRealHom (σ (Sum.inl 0) * ↑A).trace.re = ofRealHom (σ (Sum.inl 0) * ↑B).trace.re⊢ A = B
have h1' := congrArg ofRealHom h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':ofRealHom (σ (Sum.inl 0) * ↑A).trace.re = ofRealHom (σ (Sum.inl 0) * ↑B).trace.reh1':ofRealHom (σ (Sum.inr 0) * ↑A).trace.re = ofRealHom (σ (Sum.inr 0) * ↑B).trace.re⊢ A = B
have h2' := congrArg ofRealHom h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':ofRealHom (σ (Sum.inl 0) * ↑A).trace.re = ofRealHom (σ (Sum.inl 0) * ↑B).trace.reh1':ofRealHom (σ (Sum.inr 0) * ↑A).trace.re = ofRealHom (σ (Sum.inr 0) * ↑B).trace.reh2':ofRealHom (σ (Sum.inr 1) * ↑A).trace.re = ofRealHom (σ (Sum.inr 1) * ↑B).trace.re⊢ A = B
have h3' := congrArg ofRealHom h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':ofRealHom (σ (Sum.inl 0) * ↑A).trace.re = ofRealHom (σ (Sum.inl 0) * ↑B).trace.reh1':ofRealHom (σ (Sum.inr 0) * ↑A).trace.re = ofRealHom (σ (Sum.inr 0) * ↑B).trace.reh2':ofRealHom (σ (Sum.inr 1) * ↑A).trace.re = ofRealHom (σ (Sum.inr 1) * ↑B).trace.reh3':ofRealHom (σ (Sum.inr 2) * ↑A).trace.re = ofRealHom (σ (Sum.inr 2) * ↑B).trace.re⊢ A = B
rw [ofRealHom_eq_coe, A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':↑(σ (Sum.inl 0) * ↑A).trace.re = ofRealHom (σ (Sum.inl 0) * ↑B).trace.reh1':↑(σ (Sum.inr 0) * ↑A).trace.re = ofRealHom (σ (Sum.inr 0) * ↑B).trace.reh2':↑(σ (Sum.inr 1) * ↑A).trace.re = ofRealHom (σ (Sum.inr 1) * ↑B).trace.reh3':↑(σ (Sum.inr 2) * ↑A).trace.re = ofRealHom (σ (Sum.inr 2) * ↑B).trace.re⊢ A = B A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':↑(σ (Sum.inl 0) * ↑A).trace.re = ↑(σ (Sum.inl 0) * ↑B).trace.reh1':↑(σ (Sum.inr 0) * ↑A).trace.re = ↑(σ (Sum.inr 0) * ↑B).trace.reh2':↑(σ (Sum.inr 1) * ↑A).trace.re = ↑(σ (Sum.inr 1) * ↑B).trace.reh3':↑(σ (Sum.inr 2) * ↑A).trace.re = ↑(σ (Sum.inr 2) * ↑B).trace.re⊢ A = B ofRealHom_eq_coe A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':↑(σ (Sum.inl 0) * ↑A).trace.re = ↑(σ (Sum.inl 0) * ↑B).trace.reh1':↑(σ (Sum.inr 0) * ↑A).trace.re = ↑(σ (Sum.inr 0) * ↑B).trace.reh2':↑(σ (Sum.inr 1) * ↑A).trace.re = ↑(σ (Sum.inr 1) * ↑B).trace.reh3':↑(σ (Sum.inr 2) * ↑A).trace.re = ↑(σ (Sum.inr 2) * ↑B).trace.re⊢ A = B A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':↑(σ (Sum.inl 0) * ↑A).trace.re = ↑(σ (Sum.inl 0) * ↑B).trace.reh1':↑(σ (Sum.inr 0) * ↑A).trace.re = ↑(σ (Sum.inr 0) * ↑B).trace.reh2':↑(σ (Sum.inr 1) * ↑A).trace.re = ↑(σ (Sum.inr 1) * ↑B).trace.reh3':↑(σ (Sum.inr 2) * ↑A).trace.re = ↑(σ (Sum.inr 2) * ↑B).trace.re⊢ A = B] at h0' h1' h2' h3' A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':↑(σ (Sum.inl 0) * ↑A).trace.re = ↑(σ (Sum.inl 0) * ↑B).trace.reh1':↑(σ (Sum.inr 0) * ↑A).trace.re = ↑(σ (Sum.inr 0) * ↑B).trace.reh2':↑(σ (Sum.inr 1) * ↑A).trace.re = ↑(σ (Sum.inr 1) * ↑B).trace.reh3':↑(σ (Sum.inr 2) * ↑A).trace.re = ↑(σ (Sum.inr 2) * ↑B).trace.re⊢ A = B
rw [trace_pauliMatrix_mul_selfAdjoint_re _ A, A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':(σ (Sum.inl 0) * ↑A).trace = ↑(σ (Sum.inl 0) * ↑B).trace.reh1':(σ (Sum.inr 0) * ↑A).trace = ↑(σ (Sum.inr 0) * ↑B).trace.reh2':(σ (Sum.inr 1) * ↑A).trace = ↑(σ (Sum.inr 1) * ↑B).trace.reh3':(σ (Sum.inr 2) * ↑A).trace = ↑(σ (Sum.inr 2) * ↑B).trace.re⊢ A = B A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':(σ (Sum.inl 0) * ↑A).trace = (σ (Sum.inl 0) * ↑B).traceh1':(σ (Sum.inr 0) * ↑A).trace = (σ (Sum.inr 0) * ↑B).traceh2':(σ (Sum.inr 1) * ↑A).trace = (σ (Sum.inr 1) * ↑B).traceh3':(σ (Sum.inr 2) * ↑A).trace = (σ (Sum.inr 2) * ↑B).trace⊢ A = B
trace_pauliMatrix_mul_selfAdjoint_re _ B A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':(σ (Sum.inl 0) * ↑A).trace = (σ (Sum.inl 0) * ↑B).traceh1':(σ (Sum.inr 0) * ↑A).trace = (σ (Sum.inr 0) * ↑B).traceh2':(σ (Sum.inr 1) * ↑A).trace = (σ (Sum.inr 1) * ↑B).traceh3':(σ (Sum.inr 2) * ↑A).trace = (σ (Sum.inr 2) * ↑B).trace⊢ A = B A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':(σ (Sum.inl 0) * ↑A).trace = (σ (Sum.inl 0) * ↑B).traceh1':(σ (Sum.inr 0) * ↑A).trace = (σ (Sum.inr 0) * ↑B).traceh2':(σ (Sum.inr 1) * ↑A).trace = (σ (Sum.inr 1) * ↑B).traceh3':(σ (Sum.inr 2) * ↑A).trace = (σ (Sum.inr 2) * ↑B).trace⊢ A = B] at h0' h1' h2' h3' A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))B:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))h0:(σ (Sum.inl 0) * ↑A).trace.re = (σ (Sum.inl 0) * ↑B).trace.reh1:(σ (Sum.inr 0) * ↑A).trace.re = (σ (Sum.inr 0) * ↑B).trace.reh2:(σ (Sum.inr 1) * ↑A).trace.re = (σ (Sum.inr 1) * ↑B).trace.reh3:(σ (Sum.inr 2) * ↑A).trace.re = (σ (Sum.inr 2) * ↑B).trace.reh0':(σ (Sum.inl 0) * ↑A).trace = (σ (Sum.inl 0) * ↑B).traceh1':(σ (Sum.inr 0) * ↑A).trace = (σ (Sum.inr 0) * ↑B).traceh2':(σ (Sum.inr 1) * ↑A).trace = (σ (Sum.inr 1) * ↑B).traceh3':(σ (Sum.inr 2) * ↑A).trace = (σ (Sum.inr 2) * ↑B).trace⊢ A = B
exact selfAdjoint_ext_complex h0' h1' h2' h3' All goals completed! 🐙
An auxiliary function which on i : Fin 1 ⊕ Fin 3 returns the corresponding
Pauli-matrix as a self-adjoint matrix.
def pauliSelfAdjoint (i : Fin 1 ⊕ Fin 3) : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) :=
⟨pauliMatrix i, pauliMatrix_selfAdjoint i⟩The Pauli matrices are linearly independent.
lemma pauliSelfAdjoint_linearly_independent : LinearIndependent ℝ pauliSelfAdjoint := by ⊢ LinearIndependent ℝ pauliSelfAdjoint
apply Fintype.linearIndependent_iff.mpr ⊢ ∀ (g : Fin 1 ⊕ Fin 3 → ℝ), ∑ i, g i • pauliSelfAdjoint i = 0 → ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
intro g hg g:Fin 1 ⊕ Fin 3 → ℝhg:∑ i, g i • pauliSelfAdjoint i = 0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
simp only [Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton] at hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint (Sum.inl 0) + ∑ a₂, g (Sum.inr a₂) • pauliSelfAdjoint (Sum.inr a₂) = 0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
rw [Fin.sum_univ_three g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint (Sum.inl 0) +
(g (Sum.inr 0) • pauliSelfAdjoint (Sum.inr 0) + g (Sum.inr 1) • pauliSelfAdjoint (Sum.inr 1) +
g (Sum.inr 2) • pauliSelfAdjoint (Sum.inr 2)) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0 g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint (Sum.inl 0) +
(g (Sum.inr 0) • pauliSelfAdjoint (Sum.inr 0) + g (Sum.inr 1) • pauliSelfAdjoint (Sum.inr 1) +
g (Sum.inr 2) • pauliSelfAdjoint (Sum.inr 2)) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0] at hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint (Sum.inl 0) +
(g (Sum.inr 0) • pauliSelfAdjoint (Sum.inr 0) + g (Sum.inr 1) • pauliSelfAdjoint (Sum.inr 1) +
g (Sum.inr 2) • pauliSelfAdjoint (Sum.inr 2)) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
simp only [Fin.isValue, pauliSelfAdjoint] at hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
intro i g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0i:Fin 1 ⊕ Fin 3⊢ g i = 0
have h1 := congrArg (fun A => (Matrix.trace (pauliMatrix i * A.1))) hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0i:Fin 1 ⊕ Fin 3h1:(σ i *
↑(g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ +
g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩))).trace =
(σ i * ↑0).trace⊢ g i = 0
simp only [Fin.isValue, AddSubgroup.coe_add, selfAdjoint.val_smul, mul_add, Algebra.mul_smul_comm,
trace_add, trace_smul, ZeroMemClass.coe_zero, mul_zero, trace_zero] at h1 g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0i:Fin 1 ⊕ Fin 3h1:g (Sum.inl 0) • (σ i * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ i * σ (Sum.inr 0)).trace + g (Sum.inr 1) • (σ i * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ i * σ (Sum.inr 2)).trace) =
0⊢ g i = 0
fin_cases i «0» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) = 0«1» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) = 0«2» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) = 0«3» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) = 0 <;> «0» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) = 0«1» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) = 0«2» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) = 0«3» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), ⋯⟩ +
(g (Sum.inr 0) • ⟨σ (Sum.inr 0), ⋯⟩ + g (Sum.inr 1) • ⟨σ (Sum.inr 1), ⋯⟩ + g (Sum.inr 2) • ⟨σ (Sum.inr 2), ⋯⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inl 0)).trace +
(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 0)).trace +
g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 1)).trace +
g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 2)).trace) =
0⊢ g (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) = 0 simpa [pauliMatrix] using h1 All goals completed! 🐙The Pauli matrices span all self-adjoint matrices.
lemma pauliSelfAdjoint_span : ⊤ ≤ Submodule.span ℝ (Set.range pauliSelfAdjoint) := by ⊢ ⊤ ≤ Submodule.span ℝ (Set.range pauliSelfAdjoint)
refine (Submodule.top_le_span_range_iff_forall_exists_fun ℝ).mpr ?_ ⊢ ∀ (x : ↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))), ∃ c, ∑ i, c i • pauliSelfAdjoint i = x
intro A A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ ∃ c, ∑ i, c i • pauliSelfAdjoint i = A
let c : Fin 1 ⊕ Fin 3 → ℝ := fun i =>
match i with
| Sum.inl 0 => 1/2 * (Matrix.trace (σ0 * A.1)).re
| Sum.inr 0 => 1/2 * (Matrix.trace (σ1 * A.1)).re
| Sum.inr 1 => 1/2 * (Matrix.trace (σ2 * A.1)).re
| Sum.inr 2 => 1/2 * (Matrix.trace (σ3 * A.1)).re A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ ∃ c, ∑ i, c i • pauliSelfAdjoint i = A
use c h A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ ∑ i, c i • pauliSelfAdjoint i = A
simp only [one_div, Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton, Fin.sum_univ_three, c] h A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)) =
A
apply selfAdjoint_ext h.h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inl 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inl 0) * ↑A).trace.reh.h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inr 0) * ↑A).trace.reh.h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 1) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inr 1) * ↑A).trace.reh.h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 2) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inr 2) * ↑A).trace.re
· h.h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inl 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inl 0) * ↑A).trace.re simp only [pauliSelfAdjoint, AddSubgroup.coe_add, selfAdjoint.val_smul, mul_add,
Algebra.mul_smul_comm, trace_add, trace_smul, σ0_σ0_trace, real_smul, ofReal_mul, ofReal_inv,
ofReal_ofNat, σ0_σ1_trace, smul_zero, σ0_σ2_trace, add_zero, σ0_σ3_trace, mul_re, inv_re,
re_ofNat, normSq_ofNat, div_self_mul_self', ofReal_re, inv_im, im_ofNat, neg_zero, zero_div,
ofReal_im, mul_zero, sub_zero, mul_im, zero_mul] h.h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ 2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re * 2 = (σ (Sum.inl 0) * ↑A).trace.re
ring All goals completed! 🐙
· h.h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inr 0) * ↑A).trace.re simp only [pauliSelfAdjoint, AddSubgroup.coe_add, selfAdjoint.val_smul, mul_add,
Algebra.mul_smul_comm, trace_add, trace_smul, σ1_σ0_trace, smul_zero, σ1_σ1_trace, real_smul,
ofReal_mul, ofReal_inv, ofReal_ofNat, σ1_σ2_trace, add_zero, σ1_σ3_trace, zero_add, mul_re,
inv_re, re_ofNat, normSq_ofNat, div_self_mul_self', ofReal_re, inv_im, im_ofNat, neg_zero,
zero_div, ofReal_im, mul_zero, sub_zero, mul_im, zero_mul] h.h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ 2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re * 2 = (σ (Sum.inr 0) * ↑A).trace.re
ring All goals completed! 🐙
· h.h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 1) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inr 1) * ↑A).trace.re simp only [pauliSelfAdjoint, AddSubgroup.coe_add, selfAdjoint.val_smul, mul_add,
Algebra.mul_smul_comm, trace_add, trace_smul, σ2_σ0_trace, smul_zero, σ2_σ1_trace, σ2_σ2_trace,
real_smul, ofReal_mul, ofReal_inv, ofReal_ofNat, zero_add, σ2_σ3_trace, add_zero, mul_re,
inv_re, re_ofNat, normSq_ofNat, div_self_mul_self', ofReal_re, inv_im, im_ofNat, neg_zero,
zero_div, ofReal_im, mul_zero, sub_zero, mul_im, zero_mul] h.h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ 2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re * 2 = (σ (Sum.inr 1) * ↑A).trace.re
ring All goals completed! 🐙
· h.h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 2) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inl 0) +
((2⁻¹ * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 0) +
(2⁻¹ * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 1) +
(2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint (Sum.inr 2)))).trace.re =
(σ (Sum.inr 2) * ↑A).trace.re simp only [pauliSelfAdjoint, AddSubgroup.coe_add, selfAdjoint.val_smul, mul_add,
Algebra.mul_smul_comm, trace_add, trace_smul, σ3_σ0_trace, smul_zero, σ3_σ1_trace, σ3_σ2_trace,
add_zero, σ3_σ3_trace, real_smul, ofReal_mul, ofReal_inv, ofReal_ofNat, zero_add, mul_re,
inv_re, re_ofNat, normSq_ofNat, div_self_mul_self', ofReal_re, inv_im, im_ofNat, neg_zero,
zero_div, ofReal_im, mul_zero, sub_zero, mul_im, zero_mul] h.h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => 1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => 1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => 1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ 2⁻¹ * (σ (Sum.inr 2) * ↑A).trace.re * 2 = (σ (Sum.inr 2) * ↑A).trace.re
ring All goals completed! 🐙
The basis of selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) formed by Pauli matrices.
def pauliBasis : Basis (Fin 1 ⊕ Fin 3) ℝ (selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)) :=
Basis.mk pauliSelfAdjoint_linearly_independent pauliSelfAdjoint_span
An auxiliary function which on i : Fin 1 ⊕ Fin 3 returns the corresponding
Pauli-matrix as a self-adjoint matrix with a minus sign for Sum.inr _.
def pauliSelfAdjoint' (i : Fin 1 ⊕ Fin 3) : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) :=
match i with
| Sum.inl 0 => ⟨σ0, pauliMatrix_selfAdjoint _⟩
| Sum.inr 0 => ⟨-σ1, by i:Fin 1 ⊕ Fin 3⊢ -σ (Sum.inr 0) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) rw [AddSubgroup.neg_mem_iff i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 0) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 0) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)] i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 0) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ); exact pauliMatrix_selfAdjoint _ All goals completed! 🐙⟩
| Sum.inr 1 => ⟨-σ2, by i:Fin 1 ⊕ Fin 3⊢ -σ (Sum.inr 1) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) rw [AddSubgroup.neg_mem_iff i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 1) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 1) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)] i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 1) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ); exact pauliMatrix_selfAdjoint _ All goals completed! 🐙⟩
| Sum.inr 2 => ⟨-σ3, by i:Fin 1 ⊕ Fin 3⊢ -σ (Sum.inr 2) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) rw [AddSubgroup.neg_mem_iff i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 2) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 2) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)] i:Fin 1 ⊕ Fin 3⊢ σ (Sum.inr 2) ∈ selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ); exact pauliMatrix_selfAdjoint _ All goals completed! 🐙⟩
The Pauli matrices where σi are negated are linearly independent.
lemma pauliSelfAdjoint'_linearly_independent : LinearIndependent ℝ pauliSelfAdjoint' := by ⊢ LinearIndependent ℝ pauliSelfAdjoint'
apply Fintype.linearIndependent_iff.mpr ⊢ ∀ (g : Fin 1 ⊕ Fin 3 → ℝ), ∑ i, g i • pauliSelfAdjoint' i = 0 → ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
intro g hg g:Fin 1 ⊕ Fin 3 → ℝhg:∑ i, g i • pauliSelfAdjoint' i = 0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
simp only [Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton] at hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint' (Sum.inl 0) + ∑ a₂, g (Sum.inr a₂) • pauliSelfAdjoint' (Sum.inr a₂) = 0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
rw [Fin.sum_univ_three g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint' (Sum.inl 0) +
(g (Sum.inr 0) • pauliSelfAdjoint' (Sum.inr 0) + g (Sum.inr 1) • pauliSelfAdjoint' (Sum.inr 1) +
g (Sum.inr 2) • pauliSelfAdjoint' (Sum.inr 2)) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0 g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint' (Sum.inl 0) +
(g (Sum.inr 0) • pauliSelfAdjoint' (Sum.inr 0) + g (Sum.inr 1) • pauliSelfAdjoint' (Sum.inr 1) +
g (Sum.inr 2) • pauliSelfAdjoint' (Sum.inr 2)) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0] at hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • pauliSelfAdjoint' (Sum.inl 0) +
(g (Sum.inr 0) • pauliSelfAdjoint' (Sum.inr 0) + g (Sum.inr 1) • pauliSelfAdjoint' (Sum.inr 1) +
g (Sum.inr 2) • pauliSelfAdjoint' (Sum.inr 2)) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
simp only [Fin.isValue, pauliSelfAdjoint'] at hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0⊢ ∀ (i : Fin 1 ⊕ Fin 3), g i = 0
intro i g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0i:Fin 1 ⊕ Fin 3⊢ g i = 0
have h1 := congrArg (fun A => (Matrix.trace (pauliMatrix i * A.1))) hg g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0i:Fin 1 ⊕ Fin 3h1:(σ i *
↑(g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩))).trace =
(σ i * ↑0).trace⊢ g i = 0
simp [-real_smul, mul_add] at h1 g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0i:Fin 1 ⊕ Fin 3h1:g (Sum.inl 0) • (σ i * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ i * σ (Sum.inr 0)).trace) + -(g (Sum.inr 1) • (σ i * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ i * σ (Sum.inr 2)).trace)) =
0⊢ g i = 0
fin_cases i «0» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) = 0«1» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) = 0«2» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) = 0«3» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) = 0 <;> «0» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) = 0«1» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) = 0«2» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) = 0«3» g:Fin 1 ⊕ Fin 3 → ℝhg:g (Sum.inl 0) • ⟨σ (Sum.inl 0), pauliSelfAdjoint'._proof_2⟩ +
(g (Sum.inr 0) • ⟨-σ (Sum.inr 0), pauliSelfAdjoint'._proof_4⟩ +
g (Sum.inr 1) • ⟨-σ (Sum.inr 1), pauliSelfAdjoint'._proof_5⟩ +
g (Sum.inr 2) • ⟨-σ (Sum.inr 2), pauliSelfAdjoint'._proof_6⟩) =
0h1:g (Sum.inl 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inl 0)).trace +
(-(g (Sum.inr 0) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 0)).trace) +
-(g (Sum.inr 1) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 1)).trace) +
-(g (Sum.inr 2) • (σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) * σ (Sum.inr 2)).trace)) =
0⊢ g (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) = 0 simpa [pauliMatrix] using h1 All goals completed! 🐙
The Pauli matrices where σi are negated span all Self-adjoint matrices.
lemma pauliSelfAdjoint'_span : ⊤ ≤ Submodule.span ℝ (Set.range pauliSelfAdjoint') := by ⊢ ⊤ ≤ Submodule.span ℝ (Set.range pauliSelfAdjoint')
refine (Submodule.top_le_span_range_iff_forall_exists_fun ℝ).mpr ?_ ⊢ ∀ (x : ↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))), ∃ c, ∑ i, c i • pauliSelfAdjoint' i = x
intro A A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ ∃ c, ∑ i, c i • pauliSelfAdjoint' i = A
let c : Fin 1 ⊕ Fin 3 → ℝ := fun i =>
match i with
| Sum.inl 0 => 1/2 * (Matrix.trace (σ0 * A.1)).re
| Sum.inr 0 => - 1/2 * (Matrix.trace (σ1 * A.1)).re
| Sum.inr 1 => - 1/2 * (Matrix.trace (σ2 * A.1)).re
| Sum.inr 2 => - 1/2 * (Matrix.trace (σ3 * A.1)).re A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ ∃ c, ∑ i, c i • pauliSelfAdjoint' i = A
use c h A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ ∑ i, c i • pauliSelfAdjoint' i = A
simp only [one_div, Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton, Fin.sum_univ_three, c] h A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)) =
A
apply selfAdjoint_ext h.h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inl 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inl 0) * ↑A).trace.reh.h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inr 0) * ↑A).trace.reh.h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 1) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inr 1) * ↑A).trace.reh.h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 2) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inr 2) * ↑A).trace.re
· h.h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inl 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inl 0) * ↑A).trace.re simp only [pauliSelfAdjoint', AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add,
Algebra.mul_smul_comm, mul_neg, trace_add, trace_smul, σ0_σ0_trace, real_smul, ofReal_mul,
ofReal_inv, ofReal_ofNat, trace_neg, σ0_σ1_trace, smul_zero, neg_zero, σ0_σ2_trace, add_zero,
σ0_σ3_trace, mul_re, inv_re, re_ofNat, normSq_ofNat, div_self_mul_self', ofReal_re, inv_im,
im_ofNat, zero_div, ofReal_im, mul_zero, sub_zero, mul_im, zero_mul] h.h0 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ 2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re * 2 = (σ (Sum.inl 0) * ↑A).trace.re
ring All goals completed! 🐙
· h.h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 0) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inr 0) * ↑A).trace.re simp only [pauliSelfAdjoint', AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add,
Algebra.mul_smul_comm, mul_neg, trace_add, trace_smul, σ1_σ0_trace, smul_zero, trace_neg,
σ1_σ1_trace, real_smul, ofReal_mul, ofReal_div, ofReal_neg, ofReal_one, ofReal_ofNat,
σ1_σ2_trace, neg_zero, add_zero, σ1_σ3_trace, zero_add, neg_re, mul_re, div_ofNat_re, one_re,
ofReal_re, div_ofNat_im, neg_im, one_im, zero_div, ofReal_im, mul_zero, sub_zero, re_ofNat,
mul_im, zero_mul, im_ofNat] h.h1 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ -(-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re * 2) = (σ (Sum.inr 0) * ↑A).trace.re
ring All goals completed! 🐙
· h.h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 1) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inr 1) * ↑A).trace.re simp only [pauliSelfAdjoint', AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add,
Algebra.mul_smul_comm, mul_neg, trace_add, trace_smul, σ2_σ0_trace, smul_zero, trace_neg,
σ2_σ1_trace, neg_zero, σ2_σ2_trace, real_smul, ofReal_mul, ofReal_div, ofReal_neg, ofReal_one,
ofReal_ofNat, zero_add, σ2_σ3_trace, add_zero, neg_re, mul_re, div_ofNat_re, one_re, ofReal_re,
div_ofNat_im, neg_im, one_im, zero_div, ofReal_im, mul_zero, sub_zero, re_ofNat, mul_im,
zero_mul, im_ofNat] h.h2 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ -(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re * 2) = (σ (Sum.inr 1) * ↑A).trace.re
ring All goals completed! 🐙
· h.h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ (σ (Sum.inr 2) *
↑((2⁻¹ * (σ (Sum.inl 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inl 0) +
((-1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re) • pauliSelfAdjoint' (Sum.inr 2)))).trace.re =
(σ (Sum.inr 2) * ↑A).trace.re simp only [pauliSelfAdjoint', AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add,
Algebra.mul_smul_comm, mul_neg, trace_add, trace_smul, σ3_σ0_trace, smul_zero, trace_neg,
σ3_σ1_trace, neg_zero, σ3_σ2_trace, add_zero, σ3_σ3_trace, real_smul, ofReal_mul, ofReal_div,
ofReal_neg, ofReal_one, ofReal_ofNat, zero_add, neg_re, mul_re, div_ofNat_re, one_re, ofReal_re,
div_ofNat_im, neg_im, one_im, zero_div, ofReal_im, mul_zero, sub_zero, re_ofNat, mul_im,
zero_mul, im_ofNat] h.h3 A:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))c:Fin 1 ⊕ Fin 3 → ℝ :=
fun i =>
match i with
| Sum.inl 0 => 1 / 2 * (σ (Sum.inl 0) * ↑A).trace.re
| Sum.inr 0 => -1 / 2 * (σ (Sum.inr 0) * ↑A).trace.re
| Sum.inr 1 => -1 / 2 * (σ (Sum.inr 1) * ↑A).trace.re
| Sum.inr 2 => -1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re⊢ -(-1 / 2 * (σ (Sum.inr 2) * ↑A).trace.re * 2) = (σ (Sum.inr 2) * ↑A).trace.re
ring All goals completed! 🐙
The basis of selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ) formed by Pauli matrices
where the 1, 2, 3 pauli matrices are negated. These can be thought of as the
covariant Pauli-matrices.
def pauliBasis' : Basis (Fin 1 ⊕ Fin 3) ℝ (selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)) :=
Basis.mk pauliSelfAdjoint'_linearly_independent pauliSelfAdjoint'_span
The decomposition of a self-adjoint matrix into the Pauli matrices (where σi are negated).
lemma pauliBasis'_decomp (M : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)) :
M = (1/2 * (Matrix.trace (σ0 * M.1)).re) • pauliBasis' (Sum.inl 0)
+ (-1/2 * (Matrix.trace (σ1 * M.1)).re) • pauliBasis' (Sum.inr 0)
+ (-1/2 * (Matrix.trace (σ2 * M.1)).re) • pauliBasis' (Sum.inr 1)
+ (-1/2 * (Matrix.trace (σ3 * M.1)).re) • pauliBasis' (Sum.inr 2) := by M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ M =
(1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2)
apply selfAdjoint_ext h0 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inl 0) * ↑M).trace.re =
(σ (Sum.inl 0) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.reh1 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 0) * ↑M).trace.re =
(σ (Sum.inr 0) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.reh2 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 1) * ↑M).trace.re =
(σ (Sum.inr 1) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.reh3 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 2) * ↑M).trace.re =
(σ (Sum.inr 2) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.re
· h0 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inl 0) * ↑M).trace.re =
(σ (Sum.inl 0) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.re simp only [Fin.isValue, one_div, pauliBasis', Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ0_σ0_trace, real_smul, ofReal_mul, ofReal_inv, ofReal_ofNat, trace_neg,
σ0_σ1_trace, smul_zero, neg_zero, add_zero, σ0_σ2_trace, σ0_σ3_trace, mul_re, inv_re, re_ofNat,
normSq_ofNat, div_self_mul_self', ofReal_re, inv_im, im_ofNat, zero_div, ofReal_im, mul_zero,
sub_zero, mul_im, zero_mul] h0 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inl 0) * ↑M).trace.re = 2⁻¹ * (σ (Sum.inl 0) * ↑M).trace.re * 2
ring All goals completed! 🐙
· h1 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 0) * ↑M).trace.re =
(σ (Sum.inr 0) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.re simp only [Fin.isValue, one_div, pauliBasis', Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ1_σ0_trace, smul_zero, trace_neg, σ1_σ1_trace, real_smul, ofReal_mul,
ofReal_div, ofReal_neg, ofReal_one, ofReal_ofNat, zero_add, σ1_σ2_trace, neg_zero, add_zero,
σ1_σ3_trace, neg_re, mul_re, div_ofNat_re, one_re, ofReal_re, div_ofNat_im, neg_im, one_im,
zero_div, ofReal_im, mul_zero, sub_zero, re_ofNat, mul_im, zero_mul, im_ofNat] h1 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 0) * ↑M).trace.re = -(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re * 2)
ring All goals completed! 🐙
· h2 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 1) * ↑M).trace.re =
(σ (Sum.inr 1) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.re simp only [Fin.isValue, one_div, pauliBasis', Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ2_σ0_trace, smul_zero, trace_neg, σ2_σ1_trace, neg_zero, add_zero,
σ2_σ2_trace, real_smul, ofReal_mul, ofReal_div, ofReal_neg, ofReal_one, ofReal_ofNat, zero_add,
σ2_σ3_trace, neg_re, mul_re, div_ofNat_re, one_re, ofReal_re, div_ofNat_im, neg_im, one_im,
zero_div, ofReal_im, mul_zero, sub_zero, re_ofNat, mul_im, zero_mul, im_ofNat] h2 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 1) * ↑M).trace.re = -(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re * 2)
ring All goals completed! 🐙
· h3 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 2) * ↑M).trace.re =
(σ (Sum.inr 2) *
↑((1 / 2 * (σ (Sum.inl 0) * ↑M).trace.re) • pauliBasis' (Sum.inl 0) +
(-1 / 2 * (σ (Sum.inr 0) * ↑M).trace.re) • pauliBasis' (Sum.inr 0) +
(-1 / 2 * (σ (Sum.inr 1) * ↑M).trace.re) • pauliBasis' (Sum.inr 1) +
(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re) • pauliBasis' (Sum.inr 2))).trace.re simp only [Fin.isValue, one_div, pauliBasis', Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ3_σ0_trace, smul_zero, trace_neg, σ3_σ1_trace, neg_zero, add_zero,
σ3_σ2_trace, σ3_σ3_trace, real_smul, ofReal_mul, ofReal_div, ofReal_neg, ofReal_one,
ofReal_ofNat, zero_add, neg_re, mul_re, div_ofNat_re, one_re, ofReal_re, div_ofNat_im, neg_im,
one_im, zero_div, ofReal_im, mul_zero, sub_zero, re_ofNat, mul_im, zero_mul, im_ofNat] h3 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ (σ (Sum.inr 2) * ↑M).trace.re = -(-1 / 2 * (σ (Sum.inr 2) * ↑M).trace.re * 2)
ring All goals completed! 🐙
The component of a self-adjoint matrix in the direction σ0 under
the basis formed by the covariant Pauli matrices.
@[simp]
lemma pauliBasis'_repr_inl_0 (M : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)) :
pauliBasis'.repr M (Sum.inl 0) = 1 / 2 * Matrix.trace (σ0 * M.1) := by M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ ↑((pauliBasis'.repr M) (Sum.inl 0)) = 1 / 2 * (σ (Sum.inl 0) * ↑M).trace
have hM : M = ∑ i, pauliBasis'.repr M i • pauliBasis' i :=
(Basis.sum_repr pauliBasis' M).symm M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M = ∑ i, (pauliBasis'.repr M) i • pauliBasis' i⊢ ↑((pauliBasis'.repr M) (Sum.inl 0)) = 1 / 2 * (σ (Sum.inl 0) * ↑M).trace
simp only [Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton, Fin.sum_univ_three] at hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))⊢ ↑((pauliBasis'.repr M) (Sum.inl 0)) = 1 / 2 * (σ (Sum.inl 0) * ↑M).trace
have h0 := congrArg (fun A => Matrix.trace (σ0 * A.1)/ 2) hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:(σ (Sum.inl 0) * ↑M).trace / 2 =
(σ (Sum.inl 0) *
↑((pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2)))).trace /
2⊢ ↑((pauliBasis'.repr M) (Sum.inl 0)) = 1 / 2 * (σ (Sum.inl 0) * ↑M).trace
simp only [Fin.isValue, pauliBasis', Basis.mk_repr, Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ0_σ0_trace, real_smul, trace_neg, σ0_σ1_trace, smul_zero, neg_zero,
σ0_σ2_trace, add_zero, σ0_σ3_trace, isUnit_iff_ne_zero, ne_eq, OfNat.ofNat_ne_zero,
not_false_eq_true, IsUnit.mul_div_cancel_right] at h0 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:(σ (Sum.inl 0) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inl 0))⊢ ↑((pauliBasis'.repr M) (Sum.inl 0)) = 1 / 2 * (σ (Sum.inl 0) * ↑M).trace
linear_combination (norm := ring_nf a M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:(σ (Sum.inl 0) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inl 0))⊢ ↑((pauliBasis'.repr M) (Sum.inl 0)) - ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inl 0)) = 0) -h0
simp [pauliBasis'] All goals completed! 🐙
The component of a self-adjoint matrix in the direction -σ1 under
the basis formed by the covariant Pauli matrices.
@[simp]
lemma pauliBasis'_repr_inr_0 (M : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)) :
pauliBasis'.repr M (Sum.inr 0) = - 1 / 2 * Matrix.trace (σ1 * M.1) := by M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ ↑((pauliBasis'.repr M) (Sum.inr 0)) = -1 / 2 * (σ (Sum.inr 0) * ↑M).trace
have hM : M = ∑ i, pauliBasis'.repr M i • pauliBasis' i :=
(Basis.sum_repr pauliBasis' M).symm M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M = ∑ i, (pauliBasis'.repr M) i • pauliBasis' i⊢ ↑((pauliBasis'.repr M) (Sum.inr 0)) = -1 / 2 * (σ (Sum.inr 0) * ↑M).trace
simp only [Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton, Fin.sum_univ_three] at hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))⊢ ↑((pauliBasis'.repr M) (Sum.inr 0)) = -1 / 2 * (σ (Sum.inr 0) * ↑M).trace
have h0 := congrArg (fun A => - Matrix.trace (σ1 * A.1)/ 2) hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 0) * ↑M).trace / 2 =
-(σ (Sum.inr 0) *
↑((pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2)))).trace /
2⊢ ↑((pauliBasis'.repr M) (Sum.inr 0)) = -1 / 2 * (σ (Sum.inr 0) * ↑M).trace
simp only [Fin.isValue, pauliBasis', Basis.mk_repr, Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ1_σ0_trace, smul_zero, trace_neg, σ1_σ1_trace, real_smul, σ1_σ2_trace,
neg_zero, add_zero, σ1_σ3_trace, zero_add, neg_neg, isUnit_iff_ne_zero, ne_eq,
OfNat.ofNat_ne_zero, not_false_eq_true, IsUnit.mul_div_cancel_right] at h0 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 0) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 0))⊢ ↑((pauliBasis'.repr M) (Sum.inr 0)) = -1 / 2 * (σ (Sum.inr 0) * ↑M).trace
linear_combination (norm := ring_nf a M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 0) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 0))⊢ ↑((pauliBasis'.repr M) (Sum.inr 0)) - ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 0)) = 0) -h0
simp [pauliBasis'] All goals completed! 🐙
The component of a self-adjoint matrix in the direction -σ2 under
the basis formed by the covariant Pauli matrices.
@[simp]
lemma pauliBasis'_repr_inr_1 (M : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)) :
pauliBasis'.repr M (Sum.inr 1) = - 1 / 2 * Matrix.trace (σ2 * M.1) := by M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ ↑((pauliBasis'.repr M) (Sum.inr 1)) = -1 / 2 * (σ (Sum.inr 1) * ↑M).trace
have hM : M = ∑ i, pauliBasis'.repr M i • pauliBasis' i :=
(Basis.sum_repr pauliBasis' M).symm M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M = ∑ i, (pauliBasis'.repr M) i • pauliBasis' i⊢ ↑((pauliBasis'.repr M) (Sum.inr 1)) = -1 / 2 * (σ (Sum.inr 1) * ↑M).trace
simp only [Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton, Fin.sum_univ_three] at hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))⊢ ↑((pauliBasis'.repr M) (Sum.inr 1)) = -1 / 2 * (σ (Sum.inr 1) * ↑M).trace
have h0 := congrArg (fun A => - Matrix.trace (σ2 * A.1)/ 2) hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 1) * ↑M).trace / 2 =
-(σ (Sum.inr 1) *
↑((pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2)))).trace /
2⊢ ↑((pauliBasis'.repr M) (Sum.inr 1)) = -1 / 2 * (σ (Sum.inr 1) * ↑M).trace
simp only [Fin.isValue, pauliBasis', Basis.mk_repr, Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ2_σ0_trace, smul_zero, trace_neg, σ2_σ1_trace, neg_zero, σ2_σ2_trace,
real_smul, zero_add, σ2_σ3_trace, add_zero, neg_neg, isUnit_iff_ne_zero, ne_eq,
OfNat.ofNat_ne_zero, not_false_eq_true, IsUnit.mul_div_cancel_right] at h0 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 1) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 1))⊢ ↑((pauliBasis'.repr M) (Sum.inr 1)) = -1 / 2 * (σ (Sum.inr 1) * ↑M).trace
linear_combination (norm := ring_nf a M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 1) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 1))⊢ ↑((pauliBasis'.repr M) (Sum.inr 1)) - ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 1)) = 0) -h0
simp [pauliBasis'] All goals completed! 🐙
The component of a self-adjoint matrix in the direction -σ3 under
the basis formed by the covariant Pauli matrices.
@[simp]
lemma pauliBasis'_repr_inr_2 (M : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)) :
pauliBasis'.repr M (Sum.inr 2) = - 1 / 2 * Matrix.trace (σ3 * M.1) := by M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))⊢ ↑((pauliBasis'.repr M) (Sum.inr 2)) = -1 / 2 * (σ (Sum.inr 2) * ↑M).trace
have hM : M = ∑ i, pauliBasis'.repr M i • pauliBasis' i :=
(Basis.sum_repr pauliBasis' M).symm M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M = ∑ i, (pauliBasis'.repr M) i • pauliBasis' i⊢ ↑((pauliBasis'.repr M) (Sum.inr 2)) = -1 / 2 * (σ (Sum.inr 2) * ↑M).trace
simp only [Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero, Fin.isValue,
Finset.sum_singleton, Fin.sum_univ_three] at hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))⊢ ↑((pauliBasis'.repr M) (Sum.inr 2)) = -1 / 2 * (σ (Sum.inr 2) * ↑M).trace
have h0 := congrArg (fun A => - Matrix.trace (σ3 * A.1)/ 2) hM M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 2) * ↑M).trace / 2 =
-(σ (Sum.inr 2) *
↑((pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2)))).trace /
2⊢ ↑((pauliBasis'.repr M) (Sum.inr 2)) = -1 / 2 * (σ (Sum.inr 2) * ↑M).trace
simp only [Fin.isValue, pauliBasis', Basis.mk_repr, Basis.coe_mk, pauliSelfAdjoint',
AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg, mul_add, Algebra.mul_smul_comm, mul_neg,
trace_add, trace_smul, σ3_σ0_trace, smul_zero, trace_neg, σ3_σ1_trace, neg_zero, σ3_σ2_trace,
add_zero, σ3_σ3_trace, real_smul, zero_add, neg_neg, isUnit_iff_ne_zero, ne_eq,
OfNat.ofNat_ne_zero, not_false_eq_true, IsUnit.mul_div_cancel_right] at h0 M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 2) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 2))⊢ ↑((pauliBasis'.repr M) (Sum.inr 2)) = -1 / 2 * (σ (Sum.inr 2) * ↑M).trace
linear_combination (norm := ring_nf a M:↥(selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ))hM:M =
(pauliBasis'.repr M) (Sum.inl 0) • pauliBasis' (Sum.inl 0) +
((pauliBasis'.repr M) (Sum.inr 0) • pauliBasis' (Sum.inr 0) +
(pauliBasis'.repr M) (Sum.inr 1) • pauliBasis' (Sum.inr 1) +
(pauliBasis'.repr M) (Sum.inr 2) • pauliBasis' (Sum.inr 2))h0:-(σ (Sum.inr 2) * ↑M).trace / 2 = ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 2))⊢ ↑((pauliBasis'.repr M) (Sum.inr 2)) - ↑((pauliSelfAdjoint'_linearly_independent.repr ⟨M, ⋯⟩) (Sum.inr 2)) = 0) -h0
simp only [pauliBasis', Basis.mk_repr, Fin.isValue, sub_self] All goals completed! 🐙
The relationship between the basis pauliBasis of contravariant Pauli-matrices and the basis
pauliBasis' of covariant Pauli matrices is by multiplication by the Minkowski matrix.
lemma pauliBasis_minkowskiMetric_pauliBasis' (i : Fin 1 ⊕ Fin 3) :
pauliBasis i = minkowskiMatrix i i • pauliBasis' i := by i:Fin 1 ⊕ Fin 3⊢ pauliBasis i = minkowskiMatrix i i • pauliBasis' i
fin_cases i «0» ⊢ pauliBasis (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) =
minkowskiMatrix (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) •
pauliBasis' (Sum.inl ((fun i => i) ⟨0, ⋯⟩))«1» ⊢ pauliBasis (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) =
minkowskiMatrix (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) •
pauliBasis' (Sum.inr ((fun i => i) ⟨0, ⋯⟩))«2» ⊢ pauliBasis (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) =
minkowskiMatrix (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) •
pauliBasis' (Sum.inr ((fun i => i) ⟨1, ⋯⟩))«3» ⊢ pauliBasis (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) =
minkowskiMatrix (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) •
pauliBasis' (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) <;> «0» ⊢ pauliBasis (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) =
minkowskiMatrix (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) •
pauliBasis' (Sum.inl ((fun i => i) ⟨0, ⋯⟩))«1» ⊢ pauliBasis (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) =
minkowskiMatrix (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) •
pauliBasis' (Sum.inr ((fun i => i) ⟨0, ⋯⟩))«2» ⊢ pauliBasis (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) =
minkowskiMatrix (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) •
pauliBasis' (Sum.inr ((fun i => i) ⟨1, ⋯⟩))«3» ⊢ pauliBasis (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) =
minkowskiMatrix (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) •
pauliBasis' (Sum.inr ((fun i => i) ⟨2, ⋯⟩))
simp [pauliSelfAdjoint', pauliSelfAdjoint, pauliBasis, pauliBasis',
minkowskiMatrix.inr_i_inr_i, Subtype.ext_iff, NegMemClass.coe_neg, neg_neg] All goals completed! 🐙