File: Mathlib/Algebra/Lie/Sl2.lean

full_name: IsSl2Triple.lie_e_f
code: /-- An `sl₂` triple within a Lie ring `L` is a triple of elements `h`, `e`, `f` obeying relations
which ensure that the Lie subalgebra they generate is equivalent to `sl₂`. -/
structure IsSl2Triple (h e f : L) : Prop where
  h_ne_zero : h ≠ 0
  lie_e_f : ⁅e, f⁆ = h
  lie_h_e_nsmul : ⁅h, e⁆ = 2 • e
  lie_h_f_nsmul : ⁅h, f⁆ = - (2 • f)
goal: ⁅e, f⁆ = h

full_name: IsSl2Triple.h_ne_zero
code: /-- An `sl₂` triple within a Lie ring `L` is a triple of elements `h`, `e`, `f` obeying relations
which ensure that the Lie subalgebra they generate is equivalent to `sl₂`. -/
structure IsSl2Triple (h e f : L) : Prop where
  h_ne_zero : h ≠ 0
  lie_e_f : ⁅e, f⁆ = h
  lie_h_e_nsmul : ⁅h, e⁆ = 2 • e
  lie_h_f_nsmul : ⁅h, f⁆ = - (2 • f)
goal: h ≠ 0

full_name: IsSl2Triple.lie_h_e_nsmul
code: /-- An `sl₂` triple within a Lie ring `L` is a triple of elements `h`, `e`, `f` obeying relations
which ensure that the Lie subalgebra they generate is equivalent to `sl₂`. -/
structure IsSl2Triple (h e f : L) : Prop where
  h_ne_zero : h ≠ 0
  lie_e_f : ⁅e, f⁆ = h
  lie_h_e_nsmul : ⁅h, e⁆ = 2 • e
  lie_h_f_nsmul : ⁅h, f⁆ = - (2 • f)
goal: ⁅h, e⁆ = 2 • e

full_name: IsSl2Triple
code: /-- An `sl₂` triple within a Lie ring `L` is a triple of elements `h`, `e`, `f` obeying relations
which ensure that the Lie subalgebra they generate is equivalent to `sl₂`. -/
structure IsSl2Triple (h e f : L) : Prop where
  h_ne_zero : h ≠ 0
  lie_e_f : ⁅e, f⁆ = h
  lie_h_e_nsmul : ⁅h, e⁆ = 2 • e
  lie_h_f_nsmul : ⁅h, f⁆ = - (2 • f)
goal: Prop

full_name: IsSl2Triple.lie_h_f_nsmul
code: /-- An `sl₂` triple within a Lie ring `L` is a triple of elements `h`, `e`, `f` obeying relations
which ensure that the Lie subalgebra they generate is equivalent to `sl₂`. -/
structure IsSl2Triple (h e f : L) : Prop where
  h_ne_zero : h ≠ 0
  lie_e_f : ⁅e, f⁆ = h
  lie_h_e_nsmul : ⁅h, e⁆ = 2 • e
  lie_h_f_nsmul : ⁅h, f⁆ = - (2 • f)
goal: ⁅h, f⁆ = -(2 • f)

full_name: IsSl2Triple.symm
code: lemma symm (ht : IsSl2Triple h e f) : IsSl2Triple (-h) f e 
goal: IsSl2Triple (-h) f e

full_name: IsSl2Triple.symm_iff
code: @[simp] lemma symm_iff : IsSl2Triple (-h) f e ↔ IsSl2Triple h e f 
goal: IsSl2Triple (-h) f e ↔ IsSl2Triple h e f

full_name: IsSl2Triple.lie_h_e_smul
code: lemma lie_h_e_smul (t : IsSl2Triple h e f) : ⁅h, e⁆ = (2 : R) • e 
goal: ⁅h, e⁆ = 2 • e

full_name: IsSl2Triple.lie_lie_smul_f
code: lemma lie_lie_smul_f (t : IsSl2Triple h e f) : ⁅h, f⁆ = -((2 : R) • f) 
goal: ⁅h, f⁆ = -(2 • f)

full_name: IsSl2Triple.e_ne_zero
code: lemma e_ne_zero (t : IsSl2Triple h e f) : e ≠ 0 
goal: e ≠ 0

full_name: IsSl2Triple.f_ne_zero
code: lemma f_ne_zero (t : IsSl2Triple h e f) : f ≠ 0 
goal: f ≠ 0

full_name: IsSl2Triple.HasPrimitiveVectorWith.lie_h
code: /-- Given a representation of a Lie algebra with distinguished `sl₂` triple, a vector is said to be
primitive if it is a simultaneous eigenvector for the action of both `h`, `e`, and the eigenvalue
for `e` is zero. -/
structure HasPrimitiveVectorWith (t : IsSl2Triple h e f) (m : M) (μ : R) : Prop where
  ne_zero : m ≠ 0
  lie_h : ⁅h, m⁆ = μ • m
  lie_e : ⁅e, m⁆ = 0
goal: ⁅h, m⁆ = μ • m

full_name: IsSl2Triple.HasPrimitiveVectorWith.ne_zero
code: /-- Given a representation of a Lie algebra with distinguished `sl₂` triple, a vector is said to be
primitive if it is a simultaneous eigenvector for the action of both `h`, `e`, and the eigenvalue
for `e` is zero. -/
structure HasPrimitiveVectorWith (t : IsSl2Triple h e f) (m : M) (μ : R) : Prop where
  ne_zero : m ≠ 0
  lie_h : ⁅h, m⁆ = μ • m
  lie_e : ⁅e, m⁆ = 0
goal: m ≠ 0

full_name: IsSl2Triple.HasPrimitiveVectorWith.lie_e
code: /-- Given a representation of a Lie algebra with distinguished `sl₂` triple, a vector is said to be
primitive if it is a simultaneous eigenvector for the action of both `h`, `e`, and the eigenvalue
for `e` is zero. -/
structure HasPrimitiveVectorWith (t : IsSl2Triple h e f) (m : M) (μ : R) : Prop where
  ne_zero : m ≠ 0
  lie_h : ⁅h, m⁆ = μ • m
  lie_e : ⁅e, m⁆ = 0
goal: ⁅e, m⁆ = 0

full_name: IsSl2Triple.HasPrimitiveVectorWith
code: /-- Given a representation of a Lie algebra with distinguished `sl₂` triple, a vector is said to be
primitive if it is a simultaneous eigenvector for the action of both `h`, `e`, and the eigenvalue
for `e` is zero. -/
structure HasPrimitiveVectorWith (t : IsSl2Triple h e f) (m : M) (μ : R) : Prop where
  ne_zero : m ≠ 0
  lie_h : ⁅h, m⁆ = μ • m
  lie_e : ⁅e, m⁆ = 0
goal: Prop

full_name: IsSl2Triple.HasPrimitiveVectorWith.mk'
code: /-- Given a representation of a Lie algebra with distinguished `sl₂` triple, a simultaneous
eigenvector for the action of both `h` and `e` necessarily has eigenvalue zero for `e`. -/
lemma HasPrimitiveVectorWith.mk' [NoZeroSMulDivisors ℤ M] (t : IsSl2Triple h e f) (m : M) (μ ρ : R)
    (hm : m ≠ 0) (hm' : ⁅h, m⁆ = μ • m) (he : ⁅e, m⁆ = ρ • m) :
    HasPrimitiveVectorWith t m μ  
goal: t.HasPrimitiveVectorWith m μ

full_name: IsSl2Triple.HasPrimitiveVectorWith._aux_Mathlib_Algebra_Lie_Sl2___macroRules_IsSl2Triple_HasPrimitiveVectorWith_termψ__1
code: local notation "ψ" n => ((toEnd R L M f) ^ n) m
goal: Lean.Macro

full_name: IsSl2Triple.HasPrimitiveVectorWith.lie_h_pow_toEnd_f
code: lemma lie_h_pow_toEnd_f (n : ℕ) :
    ⁅h, ψ n⁆ = (μ - 2 * n) • ψ n 
goal: ⁅h, ((LieModule.toEnd R L M) f ^ n) m⁆ = (μ - 2 * ↑n) • ((LieModule.toEnd R L M) f ^ n) m

full_name: IsSl2Triple.HasPrimitiveVectorWith.lie_f_pow_toEnd_f
code: @[nolint unusedArguments]
lemma lie_f_pow_toEnd_f (P : HasPrimitiveVectorWith t m μ) (n : ℕ) :
    ⁅f, ψ n⁆ = ψ (n + 1) 
goal: ⁅f, ((LieModule.toEnd R L M) f ^ n) m⁆ = ((LieModule.toEnd R L M) f ^ (n + 1)) m

full_name: IsSl2Triple.HasPrimitiveVectorWith.lie_e_pow_succ_toEnd_f
code: lemma lie_e_pow_succ_toEnd_f (n : ℕ) :
    ⁅e, ψ (n + 1)⁆ = ((n + 1) * (μ - n)) • ψ n 
goal: ⁅e, ((LieModule.toEnd R L M) f ^ (n + 1)) m⁆ = ((↑n + 1) * (μ - ↑n)) • ((LieModule.toEnd R L M) f ^ n) m

full_name: IsSl2Triple.HasPrimitiveVectorWith.exists_nat
code: /-- The eigenvalue of a primitive vector must be a natural number if the representation is
finite-dimensional. -/
lemma exists_nat [IsNoetherian R M] [NoZeroSMulDivisors R M] [IsDomain R] [CharZero R] :
    ∃ n : ℕ, μ = n 
goal: ∃ n, μ = ↑n

full_name: IsSl2Triple.HasPrimitiveVectorWith.pow_toEnd_f_ne_zero_of_eq_nat
code: lemma pow_toEnd_f_ne_zero_of_eq_nat
    [CharZero R] [NoZeroSMulDivisors R M]
    {n : ℕ} (hn : μ = n) {i} (hi : i ≤ n) : (ψ i) ≠ 0 
goal: ((LieModule.toEnd R L M) f ^ i) m ≠ 0

full_name: IsSl2Triple.HasPrimitiveVectorWith.pow_toEnd_f_eq_zero_of_eq_nat
code: lemma pow_toEnd_f_eq_zero_of_eq_nat
    [IsNoetherian R M] [NoZeroSMulDivisors R M] [IsDomain R] [CharZero R]
    {n : ℕ} (hn : μ = n) : (ψ (n + 1)) = 0 
goal: ((LieModule.toEnd R L M) f ^ (n + 1)) m = 0