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.LorentzGroup.Restricted.BasicRotations
In this module we define rotations of in the Lorentz group.
@[expose] public sectionThe subgroup of rotations of the Lorentz group.
All goals completed! 🐙
· right d:ℕΛ₁:↑(𝓛 d)Λ₂:↑(𝓛 d)h1:Λ₁ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λh2:Λ₂ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ⊢ IsProper (Λ₁ * Λ₂) exact isProper_mul h1.2 h2.2 All goals completed! 🐙
one_mem' := by d:ℕ⊢ 1 ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ
constructor left d:ℕ⊢ ↑1 (Sum.inl 0) (Sum.inl 0) = 1right d:ℕ⊢ IsProper 1 <;> left d:ℕ⊢ ↑1 (Sum.inl 0) (Sum.inl 0) = 1right d:ℕ⊢ IsProper 1 simp All goals completed! 🐙
inv_mem' {Λ} h := by d:ℕΛ:↑(𝓛 d)h:Λ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ⊢ Λ⁻¹ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ
constructor left d:ℕΛ:↑(𝓛 d)h:Λ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ⊢ ↑Λ⁻¹ (Sum.inl 0) (Sum.inl 0) = 1right d:ℕΛ:↑(𝓛 d)h:Λ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ⊢ IsProper Λ⁻¹
· left d:ℕΛ:↑(𝓛 d)h:Λ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ⊢ ↑Λ⁻¹ (Sum.inl 0) (Sum.inl 0) = 1 simp [inv_eq_dual, minkowskiMatrix.dual_apply, h.1] All goals completed! 🐙
· right d:ℕΛ:↑(𝓛 d)h:Λ ∈ fun Λ => ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ⊢ IsProper Λ⁻¹ simpa [inv_eq_dual, IsProper] using h.2 All goals completed! 🐙lemma mem_rotations_iff {d} (Λ : LorentzGroup d) :
Λ ∈ Rotations d ↔ Λ.1 (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ := by d:ℕΛ:↑(𝓛 d)⊢ Λ ∈ Rotations d ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 ∧ IsProper Λ
rfl All goals completed! 🐙@[simp]
lemma transpose_mem_rotations {d} (Λ : LorentzGroup d) :
transpose Λ ∈ Rotations d ↔ Λ ∈ Rotations d := by d:ℕΛ:↑(𝓛 d)⊢ transpose Λ ∈ Rotations d ↔ Λ ∈ Rotations d
simp [mem_rotations_iff, LorentzGroup.transpose_val, IsProper] All goals completed! 🐙The group homomorphism from the special orthogonal group to the Lorentz group.
def ofSpecialOrthogonal {d} :
Matrix.specialOrthogonalGroup (Fin d) ℝ ≃* Rotations d where
toFun A := ⟨⟨Matrix.fromBlocks 1 0 0 A, by d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ Matrix.fromBlocks 1 0 0 ↑A ∈ 𝓛 d
rw [LorentzGroup.mem_iff_dual_mul_self d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ minkowskiMatrix.dual (Matrix.fromBlocks 1 0 0 ↑A) * Matrix.fromBlocks 1 0 0 ↑A = 1 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ minkowskiMatrix.dual (Matrix.fromBlocks 1 0 0 ↑A) * Matrix.fromBlocks 1 0 0 ↑A = 1] d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ minkowskiMatrix.dual (Matrix.fromBlocks 1 0 0 ↑A) * Matrix.fromBlocks 1 0 0 ↑A = 1
simp only [minkowskiMatrix.dual, minkowskiMatrix.as_block, Matrix.fromBlocks_transpose,
Matrix.transpose_one, Matrix.transpose_zero, Matrix.fromBlocks_multiply, mul_one,
Matrix.mul_zero, add_zero, Matrix.zero_mul, Matrix.mul_one, neg_mul, one_mul, zero_add,
Matrix.mul_neg, neg_zero, mul_neg, SubtractionMonoid.neg_neg] d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ Matrix.fromBlocks 1 0 0 ((↑A).transpose * ↑A) = 1
have ha := A.2 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:↑A ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ⊢ Matrix.fromBlocks 1 0 0 ((↑A).transpose * ↑A) = 1
rw [Matrix.mem_specialOrthogonalGroup_iff, d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:↑A ∈ Matrix.orthogonalGroup (Fin d) ℝ ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 ((↑A).transpose * ↑A) = 1 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:(↑A).transpose * ↑A = 1 ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 ((↑A).transpose * ↑A) = 1 Matrix.mem_orthogonalGroup_iff' d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:(↑A).transpose * ↑A = 1 ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 ((↑A).transpose * ↑A) = 1 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:(↑A).transpose * ↑A = 1 ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 ((↑A).transpose * ↑A) = 1] at ha d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:(↑A).transpose * ↑A = 1 ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 ((↑A).transpose * ↑A) = 1
rw [ha.1 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:(↑A).transpose * ↑A = 1 ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 1 = 1 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:(↑A).transpose * ↑A = 1 ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 1 = 1] d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)ha:(↑A).transpose * ↑A = 1 ∧ (↑A).det = 1⊢ Matrix.fromBlocks 1 0 0 1 = 1
simp All goals completed! 🐙⟩, by d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ ⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩ ∈ Rotations d
simp [mem_rotations_iff] d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ (↑A).det = 1
have hA := A.2 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)hA:↑A ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ⊢ (↑A).det = 1
rw [Matrix.mem_specialOrthogonalGroup_iff d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)hA:↑A ∈ Matrix.orthogonalGroup (Fin d) ℝ ∧ (↑A).det = 1⊢ (↑A).det = 1 d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)hA:↑A ∈ Matrix.orthogonalGroup (Fin d) ℝ ∧ (↑A).det = 1⊢ (↑A).det = 1] at hA d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)hA:↑A ∈ Matrix.orthogonalGroup (Fin d) ℝ ∧ (↑A).det = 1⊢ (↑A).det = 1
exact hA.2 All goals completed! 🐙⟩
invFun Λ := ⟨fun i j => Λ.1.1 (Sum.inr i) (Sum.inr j),
by d:ℕΛ:↥(Rotations d)⊢ (fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
match Λ with
| ⟨Λ, h⟩ => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations d⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
let M : Matrix (Fin d) (Fin d) ℝ := fun i j => Λ.1 (Sum.inr i) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
have h1 : Matrix.fromBlocks 1 0 0 M = Λ.1 := by d:ℕΛ:↥(Rotations d)⊢ (fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
have h1 : LorentzGroup.toVector Λ = Lorentz.Vector.basis (Sum.inl 0) := by d:ℕΛ:↥(Rotations d)⊢ (fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
rw [LorentzGroup.toVector_eq_basis_iff_timeComponent_eq_one d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
exact h.1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
have h2 : LorentzGroup.toVector (LorentzGroup.transpose Λ) =
Lorentz.Vector.basis (Sum.inl 0) := by d:ℕΛ:↥(Rotations d)⊢ (fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
rw [LorentzGroup.toVector_eq_basis_iff_timeComponent_eq_one d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ ↑(transpose Λ) (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ ↑(transpose Λ) (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ ↑(transpose Λ) (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
exact h.1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
funext i j d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Matrix.fromBlocks 1 0 0 M i j = ↑Λ i j d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
match i, j with
| .inl 0, .inl 0 => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inl 0) (Sum.inl 0) = ↑Λ (Sum.inl 0) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ simp [h.1] All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
| .inl 0, .inr j => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inl 0) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
simp only [Fin.isValue, Matrix.fromBlocks_apply₁₂, Matrix.zero_apply] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ 0 = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
trans (Lorentz.Vector.basis (Sum.inl 0)) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr j)d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ Lorentz.Vector.basis (Sum.inl 0) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ simp All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
rw [← h2 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ toVector (transpose Λ) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ toVector (transpose Λ) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ toVector (transpose Λ) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
simp [LorentzGroup.transpose_val] All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
| .inr i, .inl 0 => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inr i) (Sum.inl 0) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
simp only [Fin.isValue, Matrix.fromBlocks_apply₂₁, Matrix.zero_apply] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ 0 = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
trans (Lorentz.Vector.basis (Sum.inl 0)) (Sum.inr i) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr i)d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ Lorentz.Vector.basis (Sum.inl 0) (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr i) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ simp All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
rw [← h1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ toVector Λ (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ toVector Λ (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ toVector Λ (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
simp All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
| .inr i, .inr j => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin di:Fin dj:Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inr i) (Sum.inr j) = ↑Λ (Sum.inr i) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ rfl d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.specialOrthogonalGroup (Fin d) ℝ rw [Matrix.mem_specialOrthogonalGroup_iff d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.orthogonalGroup (Fin d) ℝ ∧
(Matrix.det fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.orthogonalGroup (Fin d) ℝ ∧
(Matrix.det fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.orthogonalGroup (Fin d) ℝ ∧
(Matrix.det fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
constructor left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.orthogonalGroup (Fin d) ℝright d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (Matrix.det fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
· left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) ∈ Matrix.orthogonalGroup (Fin d) ℝ rw [Matrix.mem_orthogonalGroup_iff left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1 left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1]left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
have hΛ := Λ.2 left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:↑Λ ∈ 𝓛 d⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
rw [mem_iff_self_mul_dual, left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:↑Λ * minkowskiMatrix.dual ↑Λ = 1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1 left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M * minkowskiMatrix.dual (Matrix.fromBlocks 1 0 0 M) = 1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1 ← h1 left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M * minkowskiMatrix.dual (Matrix.fromBlocks 1 0 0 M) = 1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M * minkowskiMatrix.dual (Matrix.fromBlocks 1 0 0 M) = 1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1] at hΛleft d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M * minkowskiMatrix.dual (Matrix.fromBlocks 1 0 0 M) = 1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
simp [minkowskiMatrix.dual] at hΛ left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M * (minkowskiMatrix * (Matrix.fromBlocks 1 0 0 M).transpose * minkowskiMatrix) = 1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
rw [minkowskiMatrix.as_block left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M *
(Matrix.fromBlocks 1 0 0 (-1) * (Matrix.fromBlocks 1 0 0 M).transpose * Matrix.fromBlocks 1 0 0 (-1)) =
1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1 left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M *
(Matrix.fromBlocks 1 0 0 (-1) * (Matrix.fromBlocks 1 0 0 M).transpose * Matrix.fromBlocks 1 0 0 (-1)) =
1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1] at hΛleft d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 M *
(Matrix.fromBlocks 1 0 0 (-1) * (Matrix.fromBlocks 1 0 0 M).transpose * Matrix.fromBlocks 1 0 0 (-1)) =
1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
simp [Matrix.fromBlocks_transpose, Matrix.fromBlocks_multiply] at hΛ left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1
ext i j left d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) i j =
1 i j
trans (Matrix.fromBlocks (1 : Matrix (Fin 1) (Fin 1) ℝ) 0 0 (M * M.transpose))
(Sum.inr i) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) i j =
Matrix.fromBlocks 1 0 0 (M * M.transpose) (Sum.inr i) (Sum.inr j)d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ Matrix.fromBlocks 1 0 0 (M * M.transpose) (Sum.inr i) (Sum.inr j) = 1 i j
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ ((fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) * Matrix.transpose fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) i j =
Matrix.fromBlocks 1 0 0 (M * M.transpose) (Sum.inr i) (Sum.inr j) simp [M] All goals completed! 🐙
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ Matrix.fromBlocks 1 0 0 (M * M.transpose) (Sum.inr i) (Sum.inr j) = 1 i j rw [hΛ, d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ 1 (Sum.inr i) (Sum.inr j) = 1 i j d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ (if Sum.inr i = Sum.inr j then 1 else 0) = if i = j then 1 else 0 Matrix.one_apply, d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ (if Sum.inr i = Sum.inr j then 1 else 0) = 1 i j d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ (if Sum.inr i = Sum.inr j then 1 else 0) = if i = j then 1 else 0 Matrix.one_apply d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ (if Sum.inr i = Sum.inr j then 1 else 0) = if i = j then 1 else 0 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ (if Sum.inr i = Sum.inr j then 1 else 0) = if i = j then 1 else 0] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑ΛhΛ:Matrix.fromBlocks 1 0 0 (M * M.transpose) = 1i:Fin dj:Fin d⊢ (if Sum.inr i = Sum.inr j then 1 else 0) = if i = j then 1 else 0
simp All goals completed! 🐙
· right d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (Matrix.det fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = 1 trans Λ.1.det d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (Matrix.det fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = (↑Λ).detd:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (↑Λ).det = 1
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (Matrix.det fun i j => ↑↑⟨Λ, h⟩ (Sum.inr i) (Sum.inr j)) = (↑Λ).det rw [← h1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (Matrix.det fun i j => Matrix.fromBlocks 1 0 0 M (Sum.inr i) (Sum.inr j)) = (Matrix.fromBlocks 1 0 0 M).det d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (Matrix.det fun i j => Matrix.fromBlocks 1 0 0 M (Sum.inr i) (Sum.inr j)) = (Matrix.fromBlocks 1 0 0 M).det] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (Matrix.det fun i j => Matrix.fromBlocks 1 0 0 M (Sum.inr i) (Sum.inr j)) = (Matrix.fromBlocks 1 0 0 M).det
simp All goals completed! 🐙
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (↑Λ).det = 1 exact h.2 All goals completed! 🐙⟩
map_mul' A B := by d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)B:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ ⟨⟨Matrix.fromBlocks 1 0 0 ↑(A * B), ⋯⟩, ⋯⟩ = ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩ * ⟨⟨Matrix.fromBlocks 1 0 0 ↑B, ⋯⟩, ⋯⟩
apply Subtype.ext d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)B:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ ↑⟨⟨Matrix.fromBlocks 1 0 0 ↑(A * B), ⋯⟩, ⋯⟩ =
↑(⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩ * ⟨⟨Matrix.fromBlocks 1 0 0 ↑B, ⋯⟩, ⋯⟩)
simp only [Submonoid.coe_mul, MulMemClass.mk_mul_mk] d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)B:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ ⟨Matrix.fromBlocks 1 0 0 (↑A * ↑B), ⋯⟩ = ⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩ * ⟨Matrix.fromBlocks 1 0 0 ↑B, ⋯⟩
apply Subtype.ext d:ℕA:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)B:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ ↑⟨Matrix.fromBlocks 1 0 0 (↑A * ↑B), ⋯⟩ = ↑(⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩ * ⟨Matrix.fromBlocks 1 0 0 ↑B, ⋯⟩)
simp [Matrix.fromBlocks_multiply] All goals completed! 🐙
left_inv Λ := by d:ℕΛ:↥(Matrix.specialOrthogonalGroup (Fin d) ℝ)⊢ (fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ((fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) Λ) = Λ
simp All goals completed! 🐙
right_inv Λ := by d:ℕΛ:↥(Rotations d)⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) Λ) = Λ
match Λ with
| ⟨Λ, h⟩ => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations d⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
let M : Matrix (Fin d) (Fin d) ℝ := fun i j => Λ.1 (Sum.inr i) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
have h1 : Matrix.fromBlocks 1 0 0 M = Λ.1 := by d:ℕΛ:↥(Rotations d)⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) Λ) = Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
have h1 : LorentzGroup.toVector Λ = Lorentz.Vector.basis (Sum.inl 0) := by d:ℕΛ:↥(Rotations d)⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) Λ) = Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
rw [LorentzGroup.toVector_eq_basis_iff_timeComponent_eq_one d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
exact h.1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
have h2 : LorentzGroup.toVector (LorentzGroup.transpose Λ) =
Lorentz.Vector.basis (Sum.inl 0) := by d:ℕΛ:↥(Rotations d)⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) Λ) = Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
rw [LorentzGroup.toVector_eq_basis_iff_timeComponent_eq_one d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ ↑(transpose Λ) (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ ↑(transpose Λ) (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)⊢ ↑(transpose Λ) (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
exact h.1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)⊢ Matrix.fromBlocks 1 0 0 M = ↑Λ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
funext i j d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Matrix.fromBlocks 1 0 0 M i j = ↑Λ i j d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
match i, j with
| .inl 0, .inl 0 => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inl 0) (Sum.inl 0) = ↑Λ (Sum.inl 0) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩ simp [h.1] All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
| .inl 0, .inr j => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inl 0) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
simp only [Fin.isValue, Matrix.fromBlocks_apply₁₂, Matrix.zero_apply] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ 0 = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
trans (Lorentz.Vector.basis (Sum.inl 0)) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr j)d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ Lorentz.Vector.basis (Sum.inl 0) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩ simp All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
rw [← h2 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ toVector (transpose Λ) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ toVector (transpose Λ) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin dj:Fin d⊢ toVector (transpose Λ) (Sum.inr j) = ↑Λ (Sum.inl 0) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
simp [LorentzGroup.transpose_val] All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
| .inr i, .inl 0 => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inr i) (Sum.inl 0) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
simp only [Fin.isValue, Matrix.fromBlocks_apply₂₁, Matrix.zero_apply] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ 0 = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
trans (Lorentz.Vector.basis (Sum.inl 0)) (Sum.inr i) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr i)d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ Lorentz.Vector.basis (Sum.inl 0) (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
· d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ 0 = Lorentz.Vector.basis (Sum.inl 0) (Sum.inr i) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩ simp All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
rw [← h1 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ toVector Λ (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ toVector Λ (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩] d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin di:Fin d⊢ toVector Λ (Sum.inr i) = ↑Λ (Sum.inr i) (Sum.inl 0) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
simp All goals completed! 🐙 d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
| .inr i, .inr j => d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:toVector Λ = Lorentz.Vector.basis (Sum.inl 0)h2:toVector (transpose Λ) = Lorentz.Vector.basis (Sum.inl 0)i✝:Fin 1 ⊕ Fin dj✝:Fin 1 ⊕ Fin di:Fin dj:Fin d⊢ Matrix.fromBlocks 1 0 0 M (Sum.inr i) (Sum.inr j) = ↑Λ (Sum.inr i) (Sum.inr j) d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩ rfl d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩ d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ (fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩) = ⟨Λ, h⟩
apply Subtype.ext d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ ↑((fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩) ((fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩) ⟨Λ, h⟩)) =
↑⟨Λ, h⟩
simp only d:ℕΛ✝:↥(Rotations d)Λ:↑(𝓛 d)h:Λ ∈ Rotations dM:Matrix (Fin d) (Fin d) ℝ := fun i j => ↑Λ (Sum.inr i) (Sum.inr j)h1:Matrix.fromBlocks 1 0 0 M = ↑Λ⊢ ⟨Matrix.fromBlocks 1 0 0 fun i j => ↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩ = Λ
exact eq_of_mulVec_eq (congrFun (congrArg Matrix.mulVec h1)) All goals completed! 🐙@[fun_prop]
lemma ofSpecialOrthogonal_continuous {d} :
Continuous (ofSpecialOrthogonal : Matrix.specialOrthogonalGroup (Fin d) ℝ → Rotations d) := by d:ℕ⊢ Continuous ⇑ofSpecialOrthogonal
simp only [ofSpecialOrthogonal, MulEquiv.coe_mk, Equiv.coe_fn_mk] d:ℕ⊢ Continuous fun A => ⟨⟨Matrix.fromBlocks 1 0 0 ↑A, ⋯⟩, ⋯⟩
fun_prop All goals completed! 🐙@[fun_prop]
lemma ofSpecialOrthogonal_symm_continuous {d} :
Continuous (ofSpecialOrthogonal.symm :
Rotations d → Matrix.specialOrthogonalGroup (Fin d) ℝ) := by d:ℕ⊢ Continuous ⇑ofSpecialOrthogonal.symm
simp only [ofSpecialOrthogonal, MulEquiv.symm_mk, MulEquiv.coe_mk, Equiv.coe_fn_symm_mk] d:ℕ⊢ Continuous fun Λ => ⟨fun i j => ↑↑Λ (Sum.inr i) (Sum.inr j), ⋯⟩
apply Continuous.subtype_mk d:ℕ⊢ Continuous fun x i j => ↑↑x (Sum.inr i) (Sum.inr j)
refine Continuous.matrix_submatrix ?_ Sum.inr Sum.inr d:ℕ⊢ Continuous fun x => (↑x).1
fun_prop All goals completed! 🐙lemma rotations_subset_restricted (d) : Rotations d ≤ LorentzGroup.restricted d := by d:ℕ⊢ Rotations d ≤ restricted d
intro Λ h d:ℕΛ:↑(𝓛 d)h:Λ ∈ Rotations d⊢ Λ ∈ restricted d
constructor left d:ℕΛ:↑(𝓛 d)h:Λ ∈ Rotations d⊢ IsProper Λright d:ℕΛ:↑(𝓛 d)h:Λ ∈ Rotations d⊢ IsOrthochronous Λ
· left d:ℕΛ:↑(𝓛 d)h:Λ ∈ Rotations d⊢ IsProper Λ exact h.2 All goals completed! 🐙
· right d:ℕΛ:↑(𝓛 d)h:Λ ∈ Rotations d⊢ IsOrthochronous Λ simp [IsOrthochronous, h.1] All goals completed! 🐙
@[simp]
lemma toVector_rotation {d} (Λ : Rotations d) :
LorentzGroup.toVector Λ.1= Lorentz.Vector.basis (Sum.inl 0) := by d:ℕΛ:↥(Rotations d)⊢ toVector ↑Λ = Lorentz.Vector.basis (Sum.inl 0)
rw [LorentzGroup.toVector_eq_basis_iff_timeComponent_eq_one d:ℕΛ:↥(Rotations d)⊢ ↑↑Λ (Sum.inl 0) (Sum.inl 0) = 1 d:ℕΛ:↥(Rotations d)⊢ ↑↑Λ (Sum.inl 0) (Sum.inl 0) = 1] d:ℕΛ:↥(Rotations d)⊢ ↑↑Λ (Sum.inl 0) (Sum.inl 0) = 1
exact Λ.2.1 All goals completed! 🐙