Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Chapter WeylSl2

Definition
ChapterWeylSl2

by leonardopedro · Oct 1, 2026 · Mathlib 0df444a (Lean v4.33.1)

definitionsformalizationtimepiece

Formal definitions for the timepiece Lean 4 formalization (source chapter BookProof/ChapterWeylSl2.lean): generated def bundle for ChapterWeylSl2. See BookProof/ChapterWeylSl2.lean for full context.

Definition code
import Mathlib


/-!
# Weyl's complete reducibility theorem for `sl(2,ℂ)`

`book.tex` states (Note 23, "Weyl theorem"):

> *All finite-dimensional representations of a semi-simple Lie group (such as SL(2,C))
> are completely reducible.*

and `BookProof.ChapterA3w` carries this as the named external hypothesis
`WeylCompleteReducibility`.  This file **proves** the theorem for the Lie algebra
`sl(2,ℂ)`, i.e. for every finite-dimensional complex vector space carrying operators
`E`, `F`, `H` with the `sl₂` commutation relations

`[H, E] = 2E`,  `[H, F] = -2F`,  `[E, F] = H`,

every invariant subspace has an invariant complement (`weyl_complete_reducibility`).

The proof is the classical Casimir argument, developed from scratch (Mathlib has no
Casimir element and no Weyl theorem):

* `cas` — the Casimir operator `2(EF + FE) + H²`, shown to commute with `E`, `F`, `H`;
* `exists_highestWeight` — every nonzero invariant subspace contains a vector `w ≠ 0`
  with `E w = 0` and `H w = lam • w`;
* `sl2_string_H`, `sl2_string_E` — the `sl₂`-string relations for `Fᵏ w`, giving
  `lam = m` for a natural number `m` and `F^(m+1) w = 0`;
* `cas_highestWeight` — the Casimir acts on such a `w` by `m² + 2m`, which vanishes
  only for the trivial module;
* `codim_one` — the codimension-one case, by induction on the dimension using
  quotient and sub-representations;
* `weyl_complete_reducibility` — the general case, via the `sl₂`-action
  `X · f = X f - f X` on `End V` applied to the space of operators that map `V` into
  `W` and act on `W` by a scalar.

Everything is `sorry`-free and `axiom`-free (only `propext`, `Classical.choice`,
`Quot.sound`).
-/

namespace BookProof.ChapterWeylSl2

universe u

variable {V : Type u} [AddCommGroup V] [Module ℂ V]

/-- A representation of the Lie algebra `sl(2,ℂ)` on `V`: a triple of operators with the
standard commutation relations. -/
structure Sl2Rep (V : Type u) [AddCommGroup V] [Module ℂ V] where
  /-- The raising operator. -/
  E : Module.End ℂ V
  /-- The lowering operator. -/
  F : Module.End ℂ V
  /-- The Cartan (weight) operator. -/
  H : Module.End ℂ V
  /-- `[H, E] = 2E`. -/
  he : H * E - E * H = 2 • E
  /-- `[H, F] = -2F`. -/
  hf : H * F - F * H = -(2 • F)
  /-- `[E, F] = H`. -/
  hef : E * F - F * E = H

namespace Sl2Rep

variable (R : Sl2Rep V)

/-- A subspace is **invariant** iff it is stable under `E`, `F` and `H`. -/
def IsInv (W : Submodule ℂ V) : Prop :=
  (∀ x ∈ W, R.E x ∈ W) ∧ (∀ x ∈ W, R.F x ∈ W) ∧ (∀ x ∈ W, R.H x ∈ W)

/-- The **Casimir operator** `2(EF + FE) + H²`. -/
def cas : Module.End ℂ V := 2 • (R.E * R.F + R.F * R.E) + R.H * R.H

variable {R}









/-! ### The Casimir operator is central -/







/-! ### Sub- and quotient representations -/

/-- The restriction of a representation to an invariant subspace. -/
def restr (R : Sl2Rep V) (W : Submodule ℂ V) (hW : R.IsInv W) : Sl2Rep ↥W where
  E := R.E.restrict hW.1
  F := R.F.restrict hW.2.1
  H := R.H.restrict hW.2.2
  he := by
    ext x
    have h := congrArg (fun T : Module.End ℂ V => T (x : V)) R.he
    simpa [LinearMap.restrict_coe_apply] using h
  hf := by
    ext x
    have h := congrArg (fun T : Module.End ℂ V => T (x : V)) R.hf
    simpa [LinearMap.restrict_coe_apply] using h
  hef := by
    ext x
    have h := congrArg (fun T : Module.End ℂ V => T (x : V)) R.hef
    simpa [LinearMap.restrict_coe_apply] using h







/-- The quotient representation on `V ⧸ W` for an invariant subspace `W`. -/
def quot (R : Sl2Rep V) (W : Submodule ℂ V) (hW : R.IsInv W) : Sl2Rep (V ⧸ W) where
  E := W.mapQ W R.E hW.1
  F := W.mapQ W R.F hW.2.1
  H := W.mapQ W R.H hW.2.2
  he := by
    refine LinearMap.ext fun x => Quotient.inductionOn' x fun v => ?_
    have h := congrArg (fun T : Module.End ℂ V => T v) R.he
    simp only [Module.End.mul_apply, LinearMap.sub_apply, two_nsmul, LinearMap.add_apply] at h
    simp only [Submodule.Quotient.mk''_eq_mk, Module.End.mul_apply, LinearMap.sub_apply,
      two_nsmul, LinearMap.add_apply, Submodule.mapQ_apply, ← Submodule.Quotient.mk_sub,
      ← Submodule.Quotient.mk_add, h]
  hf := by
    refine LinearMap.ext fun x => Quotient.inductionOn' x fun v => ?_
    have h := congrArg (fun T : Module.End ℂ V => T v) R.hf
    simp only [Module.End.mul_apply, LinearMap.sub_apply, LinearMap.neg_apply, two_nsmul,
      LinearMap.add_apply] at h
    simp only [Submodule.Quotient.mk''_eq_mk, Module.End.mul_apply, LinearMap.sub_apply,
      LinearMap.neg_apply, two_nsmul, LinearMap.add_apply, Submodule.mapQ_apply,
      ← Submodule.Quotient.mk_sub, ← Submodule.Quotient.mk_add, ← Submodule.Quotient.mk_neg, h]
  hef := by
    refine LinearMap.ext fun x => Quotient.inductionOn' x fun v => ?_
    have h := congrArg (fun T : Module.End ℂ V => T v) R.hef
    simp only [Module.End.mul_apply, LinearMap.sub_apply] at h
    simp only [Submodule.Quotient.mk''_eq_mk, Module.End.mul_apply, LinearMap.sub_apply,
      Submodule.mapQ_apply, ← Submodule.Quotient.mk_sub, h]







/-! ### Weights, highest-weight vectors and `sl₂`-strings -/

section Weights

variable {R : Sl2Rep V}





















end Weights

/-! ### Invariance of the kernel of the Casimir, and trivial modules -/

section Structure

variable {R : Sl2Rep V}



















/-! ### The codimension-one case -/



/-! ### The adjoint action on operators -/

/-- The adjoint action `ad a : f ↦ a f - f a` of an operator on all operators. -/
def ad (a : Module.End ℂ V) : Module.End ℂ (Module.End ℂ V) :=
  LinearMap.mulLeft ℂ a - LinearMap.mulRight ℂ a

@[simp] theorem ad_apply (a f : Module.End ℂ V) : ad a f = a * f - f * a := by
  simp [ad, LinearMap.mulLeft_apply, LinearMap.mulRight_apply]

theorem ad_add (a b : Module.End ℂ V) : ad (a + b) = ad a + ad b := by
  refine LinearMap.ext fun f => ?_
  simp only [ad_apply, LinearMap.add_apply]
  noncomm_ring

theorem ad_neg (a : Module.End ℂ V) : ad (-a) = -ad a := by
  refine LinearMap.ext fun f => ?_
  simp only [ad_apply, LinearMap.neg_apply]
  noncomm_ring

theorem ad_two_nsmul (a : Module.End ℂ V) : ad (2 • a) = 2 • ad a := by
  rw [two_nsmul, ad_add, two_nsmul]

/-- `ad` is a homomorphism of Lie algebras. -/
theorem ad_bracket (a b : Module.End ℂ V) : ad a * ad b - ad b * ad a = ad (a * b - b * a) := by
  refine LinearMap.ext fun f => ?_
  simp only [Module.End.mul_apply, LinearMap.sub_apply, ad_apply]
  noncomm_ring

/-- The `sl₂`-representation induced on the space of all operators. -/
def adRep (R : Sl2Rep V) : Sl2Rep (Module.End ℂ V) where
  E := ad R.E
  F := ad R.F
  H := ad R.H
  he := by rw [ad_bracket, R.he, ad_two_nsmul]
  hf := by rw [ad_bracket, R.hf, ad_neg, ad_two_nsmul]
  hef := by rw [ad_bracket, R.hef]







/-- The operators that map `V` into `W` and act on `W` by a scalar. -/
def scalarOps (W : Submodule ℂ V) : Submodule ℂ (Module.End ℂ V) where
  carrier := {f | (∀ v : V, f v ∈ W) ∧ ∃ c : ℂ, ∀ w ∈ W, f w = c • w}
  add_mem' := by
    rintro f g ⟨hf1, cf, hf2⟩ ⟨hg1, cg, hg2⟩
    exact ⟨fun v => W.add_mem (hf1 v) (hg1 v), cf + cg, fun w hw => by
      simp [hf2 w hw, hg2 w hw, add_smul]⟩
  zero_mem' := ⟨fun _ => W.zero_mem, 0, fun w _ => by simp⟩
  smul_mem' := by
    rintro a f ⟨hf1, cf, hf2⟩
    exact ⟨fun v => W.smul_mem a (hf1 v), a * cf, fun w hw => by
      simp [hf2 w hw, mul_smul]⟩





/-! ### Weyl's theorem -/



end Structure

end Sl2Rep

end BookProof.ChapterWeylSl2
Source
https://github.com/leonardopedro/timepiece/blob/61595bc/BookProof/ChapterWeylSl2.lean

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me