File: Mathlib/Algebra/Lie/Classical.lean

full_name: LieAlgebra.matrix_trace_commutator_zero
code: @[simp]
theorem matrix_trace_commutator_zero [Fintype n] (X Y : Matrix n n R) : Matrix.trace ⁅X, Y⁆ = 0 
goal: ⁅X, Y⁆.trace = 0

full_name: LieAlgebra.SpecialLinear.sl
code: /-- The special linear Lie algebra: square matrices of trace zero. -/
def sl [Fintype n] : LieSubalgebra R (Matrix n n R) 
goal: LieSubalgebra R (Matrix n n R)

full_name: LieAlgebra.SpecialLinear.sl_bracket
code: theorem sl_bracket [Fintype n] (A B : sl n R) : ⁅A, B⁆.val = A.val * B.val - B.val * A.val 
goal: ↑⁅A, B⁆ = ↑A * ↑B - ↑B * ↑A

full_name: LieAlgebra.SpecialLinear.Eb
code: /-- When j ≠ i, the elementary matrices are elements of sl n R, in fact they are part of a natural
basis of `sl n R`. -/
def Eb (h : j ≠ i) : sl n R 
goal: ↥(LieAlgebra.SpecialLinear.sl n R)

full_name: LieAlgebra.SpecialLinear.eb_val
code: @[simp]
theorem eb_val (h : j ≠ i) : (Eb R i j h).val = Matrix.stdBasisMatrix i j 1 
goal: ↑(LieAlgebra.SpecialLinear.Eb R i j h) = Matrix.stdBasisMatrix i j 1

full_name: LieAlgebra.SpecialLinear.sl_non_abelian
code: theorem sl_non_abelian [Fintype n] [Nontrivial R] (h : 1 < Fintype.card n) :
    ¬IsLieAbelian (sl n R) 
goal: ¬IsLieAbelian ↥(LieAlgebra.SpecialLinear.sl n R)

full_name: LieAlgebra.Symplectic.sp
code: /-- The symplectic Lie algebra: skew-adjoint matrices with respect to the canonical skew-symmetric
bilinear form. -/
def sp [Fintype l] : LieSubalgebra R (Matrix (l ⊕ l) (l ⊕ l) R) 
goal: LieSubalgebra R (Matrix (l ⊕ l) (l ⊕ l) R)

full_name: LieAlgebra.Orthogonal.so
code: /-- The definite orthogonal Lie subalgebra: skew-adjoint matrices with respect to the symmetric
bilinear form defined by the identity matrix. -/
def so [Fintype n] : LieSubalgebra R (Matrix n n R) 
goal: LieSubalgebra R (Matrix n n R)

full_name: LieAlgebra.Orthogonal.mem_so
code: @[simp]
theorem mem_so [Fintype n] (A : Matrix n n R) : A ∈ so n R ↔ Aᵀ = -A 
goal: A ∈ LieAlgebra.Orthogonal.so n R ↔ A.transpose = -A

full_name: LieAlgebra.Orthogonal.indefiniteDiagonal
code: /-- The indefinite diagonal matrix with `p` 1s and `q` -1s. -/
def indefiniteDiagonal : Matrix (p ⊕ q) (p ⊕ q) R 
goal: Matrix (p ⊕ q) (p ⊕ q) R

full_name: LieAlgebra.Orthogonal.so'
code: /-- The indefinite orthogonal Lie subalgebra: skew-adjoint matrices with respect to the symmetric
bilinear form defined by the indefinite diagonal matrix. -/
def so' [Fintype p] [Fintype q] : LieSubalgebra R (Matrix (p ⊕ q) (p ⊕ q) R) 
goal: LieSubalgebra R (Matrix (p ⊕ q) (p ⊕ q) R)

full_name: LieAlgebra.Orthogonal.Pso
code: /-- A matrix for transforming the indefinite diagonal bilinear form into the definite one, provided
the parameter `i` is a square root of -1. -/
def Pso (i : R) : Matrix (p ⊕ q) (p ⊕ q) R 
goal: Matrix (p ⊕ q) (p ⊕ q) R

full_name: LieAlgebra.Orthogonal.pso_inv
code: theorem pso_inv {i : R} (hi : i * i = -1) : Pso p q R i * Pso p q R (-i) = 1 
goal: LieAlgebra.Orthogonal.Pso p q R i * LieAlgebra.Orthogonal.Pso p q R (-i) = 1

full_name: LieAlgebra.Orthogonal.invertiblePso
code: /-- There is a constructive inverse of `Pso p q R i`. -/
def invertiblePso {i : R} (hi : i * i = -1) : Invertible (Pso p q R i) 
goal: Invertible (LieAlgebra.Orthogonal.Pso p q R i)

full_name: LieAlgebra.Orthogonal.indefiniteDiagonal_transform
code: theorem indefiniteDiagonal_transform {i : R} (hi : i * i = -1) :
    (Pso p q R i)ᵀ * indefiniteDiagonal p q R * Pso p q R i = 1 
goal: (LieAlgebra.Orthogonal.Pso p q R i).transpose * LieAlgebra.Orthogonal.indefiniteDiagonal p q R *
    LieAlgebra.Orthogonal.Pso p q R i =
  1

full_name: LieAlgebra.Orthogonal.soIndefiniteEquiv
code: /-- An equivalence between the indefinite and definite orthogonal Lie algebras, over a ring
containing a square root of -1. -/
noncomputable def soIndefiniteEquiv {i : R} (hi : i * i = -1) : so' p q R ≃ₗ⁅R⁆ so (p ⊕ q) R 
goal: ↥(LieAlgebra.Orthogonal.so' p q R) ≃ₗ⁅R⁆ ↥(LieAlgebra.Orthogonal.so (p ⊕ q) R)

full_name: LieAlgebra.Orthogonal.soIndefiniteEquiv_apply
code: theorem soIndefiniteEquiv_apply {i : R} (hi : i * i = -1) (A : so' p q R) :
    (soIndefiniteEquiv p q R hi A : Matrix (p ⊕ q) (p ⊕ q) R) =
      (Pso p q R i)⁻¹ * (A : Matrix (p ⊕ q) (p ⊕ q) R) * Pso p q R i 
goal: ↑((LieAlgebra.Orthogonal.soIndefiniteEquiv p q R hi) A) =
  (LieAlgebra.Orthogonal.Pso p q R i)⁻¹ * ↑A * LieAlgebra.Orthogonal.Pso p q R i

full_name: LieAlgebra.Orthogonal.JD
code: /-- A matrix defining a canonical even-rank symmetric bilinear form.

It looks like this as a `2l x 2l` matrix of `l x l` blocks:

   [ 0 1 ]
   [ 1 0 ]
-/
def JD : Matrix (l ⊕ l) (l ⊕ l) R 
goal: Matrix (l ⊕ l) (l ⊕ l) R

full_name: LieAlgebra.Orthogonal.typeD
code: /-- The classical Lie algebra of type D as a Lie subalgebra of matrices associated to the matrix
`JD`. -/
def typeD [Fintype l] 
goal: LieSubalgebra R (Matrix (l ⊕ l) (l ⊕ l) R)

full_name: LieAlgebra.Orthogonal.PD
code: /-- A matrix transforming the bilinear form defined by the matrix `JD` into a split-signature
diagonal matrix.

It looks like this as a `2l x 2l` matrix of `l x l` blocks:

   [ 1 -1 ]
   [ 1  1 ]
-/
def PD : Matrix (l ⊕ l) (l ⊕ l) R 
goal: Matrix (l ⊕ l) (l ⊕ l) R

full_name: LieAlgebra.Orthogonal.S
code: /-- The split-signature diagonal matrix. -/
def S 
goal: Matrix (l ⊕ l) (l ⊕ l) R

full_name: LieAlgebra.Orthogonal.s_as_blocks
code: theorem s_as_blocks : S l R = Matrix.fromBlocks 1 0 0 (-1) 
goal: LieAlgebra.Orthogonal.S l R = Matrix.fromBlocks 1 0 0 (-1)

full_name: LieAlgebra.Orthogonal.jd_transform
code: theorem jd_transform [Fintype l] : (PD l R)ᵀ * JD l R * PD l R = (2 : R) • S l R 
goal: (LieAlgebra.Orthogonal.PD l R).transpose * LieAlgebra.Orthogonal.JD l R * LieAlgebra.Orthogonal.PD l R =
  2 • LieAlgebra.Orthogonal.S l R

full_name: LieAlgebra.Orthogonal.pd_inv
code: theorem pd_inv [Fintype l] [Invertible (2 : R)] : PD l R * ⅟ (2 : R) • (PD l R)ᵀ = 1 
goal: LieAlgebra.Orthogonal.PD l R * ⅟2 • (LieAlgebra.Orthogonal.PD l R).transpose = 1

full_name: LieAlgebra.Orthogonal.invertiblePD
code: instance invertiblePD [Fintype l] [Invertible (2 : R)] : Invertible (PD l R) 
goal: Invertible (LieAlgebra.Orthogonal.PD l R)

full_name: LieAlgebra.Orthogonal.typeDEquivSo'
code: /-- An equivalence between two possible definitions of the classical Lie algebra of type D. -/
noncomputable def typeDEquivSo' [Fintype l] [Invertible (2 : R)] : typeD l R ≃ₗ⁅R⁆ so' l l R 
goal: ↥(LieAlgebra.Orthogonal.typeD l R) ≃ₗ⁅R⁆ ↥(LieAlgebra.Orthogonal.so' l l R)

full_name: LieAlgebra.Orthogonal.JB
code: /-- A matrix defining a canonical odd-rank symmetric bilinear form.

It looks like this as a `(2l+1) x (2l+1)` matrix of blocks:

   [ 2 0 0 ]
   [ 0 0 1 ]
   [ 0 1 0 ]

where sizes of the blocks are:

   [`1 x 1` `1 x l` `1 x l`]
   [`l x 1` `l x l` `l x l`]
   [`l x 1` `l x l` `l x l`]
-/
def JB 
goal: Matrix (Unit ⊕ l ⊕ l) (Unit ⊕ l ⊕ l) R

full_name: LieAlgebra.Orthogonal.typeB
code: /-- The classical Lie algebra of type B as a Lie subalgebra of matrices associated to the matrix
`JB`. -/
def typeB [Fintype l] 
goal: LieSubalgebra R (Matrix (Unit ⊕ l ⊕ l) (Unit ⊕ l ⊕ l) R)

full_name: LieAlgebra.Orthogonal.PB
code: /-- A matrix transforming the bilinear form defined by the matrix `JB` into an
almost-split-signature diagonal matrix.

It looks like this as a `(2l+1) x (2l+1)` matrix of blocks:

   [ 1 0  0 ]
   [ 0 1 -1 ]
   [ 0 1  1 ]

where sizes of the blocks are:

   [`1 x 1` `1 x l` `1 x l`]
   [`l x 1` `l x l` `l x l`]
   [`l x 1` `l x l` `l x l`]
-/
def PB 
goal: Matrix (Unit ⊕ l ⊕ l) (Unit ⊕ l ⊕ l) R

full_name: LieAlgebra.Orthogonal.pb_inv
code: theorem pb_inv [Invertible (2 : R)] : PB l R * Matrix.fromBlocks 1 0 0 (⅟ (PD l R)) = 1 
goal: LieAlgebra.Orthogonal.PB l R * Matrix.fromBlocks 1 0 0 ⅟(LieAlgebra.Orthogonal.PD l R) = 1

full_name: LieAlgebra.Orthogonal.invertiblePB
code: instance invertiblePB [Invertible (2 : R)] : Invertible (PB l R) 
goal: Invertible (LieAlgebra.Orthogonal.PB l R)

full_name: LieAlgebra.Orthogonal.jb_transform
code: theorem jb_transform : (PB l R)ᵀ * JB l R * PB l R = (2 : R) • Matrix.fromBlocks 1 0 0 (S l R) 
goal: (LieAlgebra.Orthogonal.PB l R).transpose * LieAlgebra.Orthogonal.JB l R * LieAlgebra.Orthogonal.PB l R =
  2 • Matrix.fromBlocks 1 0 0 (LieAlgebra.Orthogonal.S l R)

full_name: LieAlgebra.Orthogonal.indefiniteDiagonal_assoc
code: theorem indefiniteDiagonal_assoc :
    indefiniteDiagonal (Unit ⊕ l) l R =
      Matrix.reindexLieEquiv (Equiv.sumAssoc Unit l l).symm
        (Matrix.fromBlocks 1 0 0 (indefiniteDiagonal l l R)) 
goal: LieAlgebra.Orthogonal.indefiniteDiagonal (Unit ⊕ l) l R =
  (Matrix.reindexLieEquiv (Equiv.sumAssoc Unit l l).symm)
    (Matrix.fromBlocks 1 0 0 (LieAlgebra.Orthogonal.indefiniteDiagonal l l R))

full_name: LieAlgebra.Orthogonal.typeBEquivSo'
code: /-- An equivalence between two possible definitions of the classical Lie algebra of type B. -/
noncomputable def typeBEquivSo' [Invertible (2 : R)] : typeB l R ≃ₗ⁅R⁆ so' (Unit ⊕ l) l R 
goal: ↥(LieAlgebra.Orthogonal.typeB l R) ≃ₗ⁅R⁆ ↥(LieAlgebra.Orthogonal.so' (Unit ⊕ l) l R)