Documentation

LeanPool.Ado.Algebra.Lie.Sl2.WeightString

The weight string of a primitive vector for an sl₂ triple #

Fix an sl₂ triple t : IsSl2Triple h e f in a Lie algebra L over a commutative ring K, and a primitive vector m of weight μ in an L-module M. Mathlib supplies the ladder calculus for the vectors fⁱ • m: their h-eigenvalues (lie_h_pow_toEnd_f), the effect of the raising operator (lie_e_pow_succ_toEnd_f), the integrality μ = n of the weight of a primitive vector of a Noetherian torsion-free module (exists_nat), and the two endpoint statements pow_toEnd_f_ne_zero_of_eq_nat and pow_toEnd_f_eq_zero_of_eq_nat saying that the string m, f • m, …, fⁿ • m consists of nonzero vectors and stops immediately afterwards.

This file first packages the primitive-vector calculus into the generic conversion and endpoint forms used by higher Serre relations. It then assembles the string vectors into a submodule: their span is a Lie submodule for the subalgebra t.toLieSubalgebra K generated by the triple (Ado.weightStringSubmodule), because each of e, f and h carries a string vector to a multiple of a string vector. The string vectors lie in distinct h-eigenspaces, so they are linearly independent; as soon as M is irreducible over that subalgebra the string is therefore a basis, and M is the standard (n+1)-dimensional irreducible V(n). The span is a Lie submodule over any commutative coefficient ring. Over a domain of characteristic zero the string of a torsion-free module is linearly independent; the end of the string, the ladder basis, and the dimension and classification read off from that basis ask in addition, exactly as Mathlib's endpoint statements do, that the module be Noetherian — for the classification, both modules.

Irreducibility over t.toLieSubalgebra K — not over the ambient L — is the correct hypothesis: the adjoint module of sl₃ is irreducible over sl₃ and contains a primitive vector of weight 1 for the sl₂ triple of a simple root, yet has dimension 8, not 2. The two hypotheses agree when t.toLieSubalgebra K = ⊤, which Ado.toLieSubalgebra_isSl2Triple_single_eq_top verifies for the standard triple of sl (Fin 2) K.

Main definitions #

Main results #

References #

This is Layer 0 of TauCetiRoadmap/RepresentationTheory/LieHighestWeight/README.md, whose sl2_finrank_of_hasPrimitiveVector is Ado.finrank_eq_of_hasPrimitiveVectorWith.

theorem Ado.hasPrimitiveVectorWith_symm_of_ne_zero_of_lie_h_eq_smul_of_lie_f_eq_zero {K : Type u_1} {L : Type u_2} {M : Type u_3} [CommRing K] [LieRing L] [AddCommGroup M] [Module K M] [LieRingModule L M] {h e f : L} {m : M} {a : K} (ht : IsSl2Triple h e f) (hm : m ≠ 0) (hhm : ⁅h, m⁆ = a • m) (hfm : ⁅f, m⁆ = 0) :

A nonzero weight vector killed by the lowering element is primitive for the symmetric sl₂-triple, with the negated scalar weight.

The weight string as a Lie submodule #

def Ado.weightStringSubmodule {K : Type u_1} [CommRing K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {μ : K} (P : t.HasPrimitiveVectorWith m μ) :

The span of the weight string m, f • m, f² • m, … of a primitive vector m, as a Lie submodule for the subalgebra t.toLieSubalgebra K generated by the triple. Each of the three generators of that subalgebra carries a string vector to a multiple of a string vector, so the span is invariant; it is not in general invariant under the ambient Lie algebra L.

Equations
Instances For
    @[simp]
    theorem Ado.weightStringSubmodule_toSubmodule {K : Type u_1} [CommRing K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {μ : K} (P : t.HasPrimitiveVectorWith m μ) :
    ↑(weightStringSubmodule P) = Submodule.span K (Set.range fun (i : ℕ) => ((LieModule.toEnd K L M) f ^ i) m)

    The underlying submodule of the weight string is the span of the string.

    This is the abstraction boundary: importing modules should reason through this lemma rather than unfold weightStringSubmodule, which is why the definition is not @[expose].

    theorem Ado.pow_toEnd_f_mem_weightStringSubmodule {K : Type u_1} [CommRing K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {μ : K} (P : t.HasPrimitiveVectorWith m μ) (i : ℕ) :
    theorem Ado.mem_weightStringSubmodule {K : Type u_1} [CommRing K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {μ : K} (P : t.HasPrimitiveVectorWith m μ) :

    The weight string submodule is nontrivial, the primitive vector m witnessing it: m lies in the string and is nonzero. This is what lets irreducibility hypotheses be applied to the weight string.

    theorem Ado.weightStringSubmodule_eq_top {K : Type u_1} [CommRing K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {μ : K} [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m μ) :

    A primitive vector of an irreducible module generates it: its weight string spans.

    Climbing back up the string #

    theorem Ado.pow_toEnd_e_pow_toEnd_f_self {K : Type u_1} [CommRing K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {μ : K} (P : t.HasPrimitiveVectorWith m μ) (j : ℕ) :
    ((LieModule.toEnd K L M) e ^ j) (((LieModule.toEnd K L M) f ^ j) m) = (∏ i ∈ Finset.range j, (↑i + 1) * (μ - ↑i)) • m

    Raising a string vector back to the top. Applying the raising operator j times to the j-th vector fʲ • m of the weight string of a primitive vector of weight μ returns m, scaled by the product of the ladder coefficients (i + 1)(μ - i) picked up on the way up.

    theorem Ado.pow_toEnd_e_pow_toEnd_f_eq_zero {K : Type u_1} [CommRing K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {μ : K} (P : t.HasPrimitiveVectorWith m μ) {i j : ℕ} (hij : i < j) :
    ((LieModule.toEnd K L M) e ^ j) (((LieModule.toEnd K L M) f ^ i) m) = 0

    Raising past the top of the string gives zero. Applying the raising operator more times than the string vector has been lowered lands above the primitive vector, which the raising operator kills.

    theorem Ado.pow_toEnd_f_toNat_add_one_eq_zero_of_hasPrimitiveVectorWith {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] [IsNoetherian K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℤ} (P : t.HasPrimitiveVectorWith m ↑n) :
    ((LieModule.toEnd K L M) f ^ (n.toNat + 1)) m = 0

    The string below a primitive vector of integer eigenvalue n stops after n.toNat lowering steps in any torsion-free Noetherian module.

    theorem Ado.ad_pow_lie_eq_zero_of_isSl2Triple_of_lie_h_eq_smul_of_lie_f_eq_zero {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] [Module.IsTorsionFree K L] [IsNoetherian K L] {h e f m : L} {a : ℤ} (ht : IsSl2Triple h e f) (hhm : ⁅h, m⁆ = ↑a • m) (hfm : ⁅f, m⁆ = 0) :
    ((LieAlgebra.ad K L) e ^ (-a).toNat) ⁅e, m⁆ = 0

    The higher-string relation supplied by an sl₂-triple: if m has integral weight a for h and is killed by f, then one bracket with e followed by (-a).toNat further adjoint applications vanishes.

    The end of the string #

    theorem Ado.pow_toEnd_f_eq_zero_of_lt {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] (P : t.HasPrimitiveVectorWith m ↑n) {i : ℕ} (hi : n < i) :
    ((LieModule.toEnd K L M) f ^ i) m = 0

    The weight string of a primitive vector of weight n : ℕ has length n + 1: lowering past step n gives zero. Mathlib's IsSl2Triple.HasPrimitiveVectorWith.pow_toEnd_f_eq_zero_of_eq_nat is the first such step.

    theorem Ado.span_range_pow_toEnd_f_eq_span_range_fin {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] (P : t.HasPrimitiveVectorWith m ↑n) :
    Submodule.span K (Set.range fun (i : ℕ) => ((LieModule.toEnd K L M) f ^ i) m) = Submodule.span K (Set.range fun (i : Fin (n + 1)) => ((LieModule.toEnd K L M) f ^ ↑i) m)

    The weight string of a primitive vector of weight n : ℕ may be truncated to its n + 1 nonzero positions without changing its span: everything past step n is zero.

    Linear independence of the string #

    theorem Ado.linearIndependent_pow_toEnd_f {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} (P : t.HasPrimitiveVectorWith m ↑n) :
    LinearIndependent K fun (i : Fin (n + 1)) => ((LieModule.toEnd K L M) f ^ ↑i) m

    The n + 1 vectors of the weight string of a primitive vector of weight n are linearly independent: fⁱ • m is a nonzero eigenvector of h for the eigenvalue n - 2i, and these eigenvalues are distinct.

    The ladder basis and the dimension of V(n) #

    theorem Ado.span_range_pow_toEnd_f_eq_top {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) :
    Submodule.span K (Set.range fun (i : Fin (n + 1)) => ((LieModule.toEnd K L M) f ^ ↑i) m) = ⊤

    The weight string of a primitive vector of weight n in an irreducible module spans it, as a family indexed by the n + 1 positions of the string.

    noncomputable def Ado.basisOfHasPrimitiveVectorWith {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) :
    Module.Basis (Fin (n + 1)) K M

    The ladder basis. A module irreducible over the subalgebra of an sl₂ triple, with a primitive vector m of weight n : ℕ, has the weight string m, f • m, …, fⁿ • m as a basis.

    Equations
    Instances For
      @[simp]
      theorem Ado.basisOfHasPrimitiveVectorWith_apply {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) (i : Fin (n + 1)) :
      theorem Ado.basisOfHasPrimitiveVectorWith_zero {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) :
      theorem Ado.finrank_eq_of_hasPrimitiveVectorWith {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) :

      The dimension of V(n). A Noetherian module irreducible over the subalgebra of an sl₂ triple, carrying a primitive vector of weight n, has rank n + 1.

      theorem Ado.lie_h_basisOfHasPrimitiveVectorWith {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) (i : Fin (n + 1)) :

      On the ladder basis, h acts diagonally with the eigenvalues n, n - 2, …, -n.

      theorem Ado.lie_f_basisOfHasPrimitiveVectorWith {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) (i : Fin (n + 1)) (hi : ↑i + 1 < n + 1) :

      On the ladder basis, f is the lowering operator, moving one step down the string.

      theorem Ado.lie_f_basisOfHasPrimitiveVectorWith_last {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) :

      The lowering operator kills the bottom of the ladder basis.

      theorem Ado.lie_e_basisOfHasPrimitiveVectorWith {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) (i : Fin (n + 1)) (hi : ↑i + 1 < n + 1) :
      ⁅e, (basisOfHasPrimitiveVectorWith P) ⟨↑i + 1, hi⟩⁆ = ((↑↑i + 1) * (↑n - ↑↑i)) • (basisOfHasPrimitiveVectorWith P) i

      On the ladder basis, e is the raising operator, moving one step up the string with the Casimir-type coefficient (i + 1)(n - i).

      theorem Ado.lie_e_basisOfHasPrimitiveVectorWith_zero {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] (P : t.HasPrimitiveVectorWith m ↑n) :

      The raising operator kills the primitive vector at the top of the ladder basis.

      The classification: the highest weight determines the module #

      noncomputable def Ado.lieModuleEquivOfHasPrimitiveVectorWith {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] {M' : Type u_4} [AddCommGroup M'] [Module K M'] [LieRingModule L M'] [LieModule K L M'] {m' : M'} [Module.IsTorsionFree K M'] [IsNoetherian K M'] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M'] (P : t.HasPrimitiveVectorWith m ↑n) (P' : t.HasPrimitiveVectorWith m' ↑n) :

      The highest weight determines the irreducible. Two modules irreducible over the subalgebra of an sl₂ triple, each carrying a primitive vector of the same weight n, are equivalent as modules over that subalgebra: the linear equivalence matching the two ladder bases position by position intertwines the action of the triple, because the ladder relations depend only on n.

      The conclusion is an equivalence over t.toLieSubalgebra K, not over the ambient L; outside the subalgebra the two actions have nothing to do with one another.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        The classifying equivalence carries the ladder basis to the ladder basis.

        @[simp]
        theorem Ado.lieModuleEquivOfHasPrimitiveVectorWith_apply_pow_toEnd_f {K : Type u_1} [CommRing K] [IsDomain K] [CharZero K] {L : Type u_2} [LieRing L] [LieAlgebra K L] {M : Type u_3} [AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [Module.IsTorsionFree K M] {h e f : L} {t : IsSl2Triple h e f} {m : M} {n : ℕ} [IsNoetherian K M] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M] {M' : Type u_4} [AddCommGroup M'] [Module K M'] [LieRingModule L M'] [LieModule K L M'] {m' : M'} [Module.IsTorsionFree K M'] [IsNoetherian K M'] [LieModule.IsIrreducible K (↥(IsSl2Triple.toLieSubalgebra K t)) M'] (P : t.HasPrimitiveVectorWith m ↑n) (P' : t.HasPrimitiveVectorWith m' ↑n) (i : ℕ) :
        (lieModuleEquivOfHasPrimitiveVectorWith P P') (((LieModule.toEnd K L M) f ^ i) m) = ((LieModule.toEnd K L M') f ^ i) m'

        The classifying equivalence carries the weight string to the weight string, position by position and past the end of the string too.