l3lab/ntp-mathlib huggingface dataset:
/-- Note that this result is slightly stronger than it might look at first glance: we only assume
that `N` is trivial over `I` rather than all of `L`. This means that it applies in the important
case of an Abelian ideal (which has `M = L` and `N = I`). -/
lemma traceForm_eq_zero_of_isTrivial [LieModule.IsTrivial I N] :
    trace R M (φ x ∘ₗ φ y) = 0 := by
  let hy' : ∀ m ∈ N, (φ x ∘ₗ φ y) m ∈ N := fun m _ ↦ N.lie_mem (N.mem_idealizer.mp (h hy) m)
  suffices : (φ x ∘ₗ φ y).restrict hy' = 0
  · simp [this, N.trace_eq_trace_restrict_of_le_idealizer I h x hy]
  ext n
  suffices ⁅y, (n : M)⁆ = 0 by 

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : LieRing L
inst✝¹⁴ : LieAlgebra R L
inst✝¹³ : AddCommGroup M
inst✝¹² : Module R M
inst✝¹¹ : LieRingModule L M
inst✝¹⁰ : LieModule R L M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Field K
inst✝⁶ : LieAlgebra K L
inst✝⁵ : Module K M
inst✝⁴ : LieModule K L M
inst✝³ : FiniteDimensional K M
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
N : LieSubmodule R L M
I : LieIdeal R L
h : I ≤ idealizer N
x y : L
hy : y ∈ I
inst✝ : LieModule.IsTrivial ↥↑I ↥↑N
hy' : ∀ m ∈ N, (φ x ∘ₗ φ y) m ∈ N := fun m x_1 => lie_mem N ((mem_idealizer N).mp (h hy) m)
n : ↥↑N
this : ⁅y, ↑n⁆ = 0
⊢ ↑((LinearMap.restrict (φ x ∘ₗ φ y) hy') n) = ↑(0 n)

Next tactic:
simp [this]
/-- Note that this result is slightly stronger than it might look at first glance: we only assume
that `N` is trivial over `I` rather than all of `L`. This means that it applies in the important
case of an Abelian ideal (which has `M = L` and `N = I`). -/
lemma traceForm_eq_zero_of_isTrivial [LieModule.IsTrivial I N] :
    trace R M (φ x ∘ₗ φ y) = 0 := by
  let hy' : ∀ m ∈ N, (φ x ∘ₗ φ y) m ∈ N := fun m _ ↦ N.lie_mem (N.mem_idealizer.mp (h hy) m)
  suffices : (φ x ∘ₗ φ y).restrict hy' = 0
  · simp [this, N.trace_eq_trace_restrict_of_le_idealizer I h x hy]
  ext n
  suffices ⁅y, (n : M)⁆ = 0 by simp [this]
  

Proof state:
case this.h.a
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : LieRing L
inst✝¹⁴ : LieAlgebra R L
inst✝¹³ : AddCommGroup M
inst✝¹² : Module R M
inst✝¹¹ : LieRingModule L M
inst✝¹⁰ : LieModule R L M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Field K
inst✝⁶ : LieAlgebra K L
inst✝⁵ : Module K M
inst✝⁴ : LieModule K L M
inst✝³ : FiniteDimensional K M
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
N : LieSubmodule R L M
I : LieIdeal R L
h : I ≤ idealizer N
x y : L
hy : y ∈ I
inst✝ : LieModule.IsTrivial ↥↑I ↥↑N
hy' : ∀ m ∈ N, (φ x ∘ₗ φ y) m ∈ N := fun m x_1 => lie_mem N ((mem_idealizer N).mp (h hy) m)
n : ↥↑N
⊢ ⁅y, ↑n⁆ = 0

Next tactic:
exact Submodule.coe_eq_zero.mpr (LieModule.IsTrivial.trivial (⟨y, hy⟩ : I) n)
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
⊢ ∀ {x m : L},
    m ∈
        { toAddSubmonoid := src✝.toAddSubmonoid,
                smul_mem' :=
                  (_ :
                    ∀ (c : R) {x : L},
                      x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier →
      ⁅x, m⁆ ∈
        { toAddSubmonoid := src✝.toAddSubmonoid,
                smul_mem' :=
                  (_ :
                    ∀ (c : R) {x : L},
                      x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier

Next tactic:
intro x y hy
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      intro x y hy
      

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
x y : L
hy :
  y ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
⊢ ⁅x, y⁆ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier

Next tactic:
ext ⟨z, hz⟩
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      intro x y hy
      ext ⟨z, hz⟩
      

Proof state:
case h.mk
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
x y : L
hy :
  y ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
z : L
hz : z ∈ ↑I
⊢ ((LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I)) ⁅x, y⁆) { val := z, property := hz } =
    0 { val := z, property := hz }

Next tactic:
suffices killingForm R L ⁅x, y⁆ z = 0 by simpa
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      intro x y hy
      ext ⟨z, hz⟩
      suffices killingForm R L ⁅x, y⁆ z = 0 by 

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
x y : L
hy :
  y ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
z : L
hz : z ∈ ↑I
this : ((killingForm R L) ⁅x, y⁆) z = 0
⊢ ((LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I)) ⁅x, y⁆) { val := z, property := hz } =
    0 { val := z, property := hz }

Next tactic:
simpa
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      intro x y hy
      ext ⟨z, hz⟩
      suffices killingForm R L ⁅x, y⁆ z = 0 by simpa
      

Proof state:
case h.mk
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
x y : L
hy :
  y ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
z : L
hz : z ∈ ↑I
⊢ ((killingForm R L) ⁅x, y⁆) z = 0

Next tactic:
rw [LieModule.traceForm_comm, ← LieModule.traceForm_apply_lie_apply, LieModule.traceForm_comm]
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      intro x y hy
      ext ⟨z, hz⟩
      suffices killingForm R L ⁅x, y⁆ z = 0 by simpa
      rw [LieModule.traceForm_comm, ← LieModule.traceForm_apply_lie_apply, LieModule.traceForm_comm]
      

Proof state:
case h.mk
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
x y : L
hy :
  y ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
z : L
hz : z ∈ ↑I
⊢ ((LieModule.traceForm R L L) y) ⁅z, x⁆ = 0

Next tactic:
simp only [AddSubsemigroup.mem_carrier, AddSubmonoid.mem_toSubsemigroup,
        Submodule.mem_toAddSubmonoid, LinearMap.mem_ker] at hy
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      intro x y hy
      ext ⟨z, hz⟩
      suffices killingForm R L ⁅x, y⁆ z = 0 by simpa
      rw [LieModule.traceForm_comm, ← LieModule.traceForm_apply_lie_apply, LieModule.traceForm_comm]
      simp only [AddSubsemigroup.mem_carrier, AddSubmonoid.mem_toSubsemigroup,
        Submodule.mem_toAddSubmonoid, LinearMap.mem_ker] at hy
      

Proof state:
case h.mk
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
x y z : L
hz : z ∈ ↑I
hy : (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I)) y = 0
⊢ ((LieModule.traceForm R L L) y) ⁅z, x⁆ = 0

Next tactic:
replace hy := LinearMap.congr_fun hy ⟨⁅z, x⁆, lie_mem_left R L I z x hz⟩
/-- The orthogonal complement of an ideal with respect to the killing form is an ideal. -/
noncomputable def killingCompl : LieIdeal R L :=
  { LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) with
    lie_mem := by
      intro x y hy
      ext ⟨z, hz⟩
      suffices killingForm R L ⁅x, y⁆ z = 0 by simpa
      rw [LieModule.traceForm_comm, ← LieModule.traceForm_apply_lie_apply, LieModule.traceForm_comm]
      simp only [AddSubsemigroup.mem_carrier, AddSubmonoid.mem_toSubsemigroup,
        Submodule.mem_toAddSubmonoid, LinearMap.mem_ker] at hy
      replace hy := LinearMap.congr_fun hy ⟨⁅z, x⁆, lie_mem_left R L I z x hz⟩
      

Proof state:
case h.mk
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
src✝ : Submodule R L := LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I))
x y z : L
hz : z ∈ ↑I
hy :
  ((LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I)) y)
      { val := ⁅z, x⁆, property := (_ : ⁅z, x⁆ ∈ I) } =
    0 { val := ⁅z, x⁆, property := (_ : ⁅z, x⁆ ∈ I) }
⊢ ((LieModule.traceForm R L L) y) ⁅z, x⁆ = 0

Next tactic:
simpa using hy
@[simp] lemma mem_killingCompl {x : L} :
    x ∈ I.killingCompl ↔ ∀ y ∈ I, killingForm R L x y = 0 := by
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
x : L
⊢ x ∈ killingCompl R L I ↔ ∀ y ∈ I, ((killingForm R L) x) y = 0

Next tactic:
change x ∈ LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) ↔ _
@[simp] lemma mem_killingCompl {x : L} :
    x ∈ I.killingCompl ↔ ∀ y ∈ I, killingForm R L x y = 0 := by
  change x ∈ LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) ↔ _
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
x : L
⊢ x ∈ LinearMap.ker (LinearMap.compl₁₂ (killingForm R L) LinearMap.id (Submodule.subtype ↑I)) ↔
    ∀ y ∈ I, ((killingForm R L) x) y = 0

Next tactic:
simp only [LinearMap.mem_ker, LieModule.traceForm_apply_apply, LinearMap.ext_iff,
    LinearMap.compl₁₂_apply, LinearMap.id_coe, id_eq, Submodule.coeSubtype,
    LieModule.traceForm_apply_apply, LinearMap.zero_apply, Subtype.forall]
@[simp] lemma mem_killingCompl {x : L} :
    x ∈ I.killingCompl ↔ ∀ y ∈ I, killingForm R L x y = 0 := by
  change x ∈ LinearMap.ker ((killingForm R L).compl₁₂ LinearMap.id I.subtype) ↔ _
  simp only [LinearMap.mem_ker, LieModule.traceForm_apply_apply, LinearMap.ext_iff,
    LinearMap.compl₁₂_apply, LinearMap.id_coe, id_eq, Submodule.coeSubtype,
    LieModule.traceForm_apply_apply, LinearMap.zero_apply, Subtype.forall]
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
x : L
⊢ (∀ a ∈ ↑I, (trace R L) ((LieModule.toEndomorphism R L L) x ∘ₗ (LieModule.toEndomorphism R L L) a) = 0) ↔
    ∀ y ∈ I, (trace R L) ((LieModule.toEndomorphism R L L) x ∘ₗ (LieModule.toEndomorphism R L L) y) = 0

Next tactic:
rfl
lemma coe_killingCompl_top :
    killingCompl R L ⊤ = LinearMap.ker (killingForm R L) := by
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
⊢ (lieIdealSubalgebra R L (killingCompl R L ⊤)).toSubmodule = LinearMap.ker (killingForm R L)

Next tactic:
ext
lemma coe_killingCompl_top :
    killingCompl R L ⊤ = LinearMap.ker (killingForm R L) := by
  ext
  

Proof state:
case h
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁵ : CommRing R
inst✝¹⁴ : LieRing L
inst✝¹³ : LieAlgebra R L
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : LieRingModule L M
inst✝⁹ : LieModule R L M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : Module K M
inst✝³ : LieModule K L M
inst✝² : FiniteDimensional K M
inst✝¹ : Module.Free R L
inst✝ : Module.Finite R L
I : LieIdeal R L
x✝ : L
⊢ x✝ ∈ (lieIdealSubalgebra R L (killingCompl R L ⊤)).toSubmodule ↔ x✝ ∈ LinearMap.ker (killingForm R L)

Next tactic:
simp [LinearMap.ext_iff]
lemma killingForm_eq :
    killingForm R I = I.restrictBilinear (killingForm R L) :=
  LieSubmodule.traceForm_eq_of_le_idealizer I I $ by 

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁷ : CommRing R
inst✝¹⁶ : LieRing L
inst✝¹⁵ : LieAlgebra R L
inst✝¹⁴ : AddCommGroup M
inst✝¹³ : Module R M
inst✝¹² : LieRingModule L M
inst✝¹¹ : LieModule R L M
inst✝¹⁰ : Module.Free R M
inst✝⁹ : Module.Finite R M
inst✝⁸ : Field K
inst✝⁷ : LieAlgebra K L
inst✝⁶ : Module K M
inst✝⁵ : LieModule K L M
inst✝⁴ : FiniteDimensional K M
inst✝³ : Module.Free R L
inst✝² : Module.Finite R L
I : LieIdeal R L
inst✝¹ : IsDomain R
inst✝ : IsPrincipalIdealRing R
⊢ I ≤ LieSubmodule.idealizer I

Next tactic:
simp
@[simp] lemma le_killingCompl_top_of_isLieAbelian [IsLieAbelian I] :
    I ≤ LieIdeal.killingCompl R L ⊤ := by
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁸ : CommRing R
inst✝¹⁷ : LieRing L
inst✝¹⁶ : LieAlgebra R L
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
inst✝¹³ : LieRingModule L M
inst✝¹² : LieModule R L M
inst✝¹¹ : Module.Free R M
inst✝¹⁰ : Module.Finite R M
inst✝⁹ : Field K
inst✝⁸ : LieAlgebra K L
inst✝⁷ : Module K M
inst✝⁶ : LieModule K L M
inst✝⁵ : FiniteDimensional K M
inst✝⁴ : Module.Free R L
inst✝³ : Module.Finite R L
I : LieIdeal R L
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
inst✝ : IsLieAbelian ↥↑I
⊢ I ≤ killingCompl R L ⊤

Next tactic:
intro x (hx : x ∈ I)
@[simp] lemma le_killingCompl_top_of_isLieAbelian [IsLieAbelian I] :
    I ≤ LieIdeal.killingCompl R L ⊤ := by
  intro x (hx : x ∈ I)
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁸ : CommRing R
inst✝¹⁷ : LieRing L
inst✝¹⁶ : LieAlgebra R L
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
inst✝¹³ : LieRingModule L M
inst✝¹² : LieModule R L M
inst✝¹¹ : Module.Free R M
inst✝¹⁰ : Module.Finite R M
inst✝⁹ : Field K
inst✝⁸ : LieAlgebra K L
inst✝⁷ : Module K M
inst✝⁶ : LieModule K L M
inst✝⁵ : FiniteDimensional K M
inst✝⁴ : Module.Free R L
inst✝³ : Module.Finite R L
I : LieIdeal R L
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
inst✝ : IsLieAbelian ↥↑I
x : L
hx : x ∈ I
⊢ x ∈ killingCompl R L ⊤

Next tactic:
simp only [mem_killingCompl, LieSubmodule.mem_top, forall_true_left]
@[simp] lemma le_killingCompl_top_of_isLieAbelian [IsLieAbelian I] :
    I ≤ LieIdeal.killingCompl R L ⊤ := by
  intro x (hx : x ∈ I)
  simp only [mem_killingCompl, LieSubmodule.mem_top, forall_true_left]
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁸ : CommRing R
inst✝¹⁷ : LieRing L
inst✝¹⁶ : LieAlgebra R L
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
inst✝¹³ : LieRingModule L M
inst✝¹² : LieModule R L M
inst✝¹¹ : Module.Free R M
inst✝¹⁰ : Module.Finite R M
inst✝⁹ : Field K
inst✝⁸ : LieAlgebra K L
inst✝⁷ : Module K M
inst✝⁶ : LieModule K L M
inst✝⁵ : FiniteDimensional K M
inst✝⁴ : Module.Free R L
inst✝³ : Module.Finite R L
I : LieIdeal R L
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
inst✝ : IsLieAbelian ↥↑I
x : L
hx : x ∈ I
⊢ ∀ (y : L), ((killingForm R L) x) y = 0

Next tactic:
intro y
@[simp] lemma le_killingCompl_top_of_isLieAbelian [IsLieAbelian I] :
    I ≤ LieIdeal.killingCompl R L ⊤ := by
  intro x (hx : x ∈ I)
  simp only [mem_killingCompl, LieSubmodule.mem_top, forall_true_left]
  intro y
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁸ : CommRing R
inst✝¹⁷ : LieRing L
inst✝¹⁶ : LieAlgebra R L
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
inst✝¹³ : LieRingModule L M
inst✝¹² : LieModule R L M
inst✝¹¹ : Module.Free R M
inst✝¹⁰ : Module.Finite R M
inst✝⁹ : Field K
inst✝⁸ : LieAlgebra K L
inst✝⁷ : Module K M
inst✝⁶ : LieModule K L M
inst✝⁵ : FiniteDimensional K M
inst✝⁴ : Module.Free R L
inst✝³ : Module.Finite R L
I : LieIdeal R L
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
inst✝ : IsLieAbelian ↥↑I
x : L
hx : x ∈ I
y : L
⊢ ((killingForm R L) x) y = 0

Next tactic:
rw [LieModule.traceForm_comm, LieModule.traceForm_apply_apply]
@[simp] lemma le_killingCompl_top_of_isLieAbelian [IsLieAbelian I] :
    I ≤ LieIdeal.killingCompl R L ⊤ := by
  intro x (hx : x ∈ I)
  simp only [mem_killingCompl, LieSubmodule.mem_top, forall_true_left]
  intro y
  rw [LieModule.traceForm_comm, LieModule.traceForm_apply_apply]
  

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁸ : CommRing R
inst✝¹⁷ : LieRing L
inst✝¹⁶ : LieAlgebra R L
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
inst✝¹³ : LieRingModule L M
inst✝¹² : LieModule R L M
inst✝¹¹ : Module.Free R M
inst✝¹⁰ : Module.Finite R M
inst✝⁹ : Field K
inst✝⁸ : LieAlgebra K L
inst✝⁷ : Module K M
inst✝⁶ : LieModule K L M
inst✝⁵ : FiniteDimensional K M
inst✝⁴ : Module.Free R L
inst✝³ : Module.Finite R L
I : LieIdeal R L
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
inst✝ : IsLieAbelian ↥↑I
x : L
hx : x ∈ I
y : L
⊢ (trace R L) ((LieModule.toEndomorphism R L L) y ∘ₗ (LieModule.toEndomorphism R L L) x) = 0

Next tactic:
exact LieSubmodule.traceForm_eq_zero_of_isTrivial I I (by simp) _ hx
@[simp] lemma le_killingCompl_top_of_isLieAbelian [IsLieAbelian I] :
    I ≤ LieIdeal.killingCompl R L ⊤ := by
  intro x (hx : x ∈ I)
  simp only [mem_killingCompl, LieSubmodule.mem_top, forall_true_left]
  intro y
  rw [LieModule.traceForm_comm, LieModule.traceForm_apply_apply]
  exact LieSubmodule.traceForm_eq_zero_of_isTrivial I I (by 

Proof state:
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁸ : CommRing R
inst✝¹⁷ : LieRing L
inst✝¹⁶ : LieAlgebra R L
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
inst✝¹³ : LieRingModule L M
inst✝¹² : LieModule R L M
inst✝¹¹ : Module.Free R M
inst✝¹⁰ : Module.Finite R M
inst✝⁹ : Field K
inst✝⁸ : LieAlgebra K L
inst✝⁷ : Module K M
inst✝⁶ : LieModule K L M
inst✝⁵ : FiniteDimensional K M
inst✝⁴ : Module.Free R L
inst✝³ : Module.Finite R L
I : LieIdeal R L
inst✝² : IsDomain R
inst✝¹ : IsPrincipalIdealRing R
inst✝ : IsLieAbelian ↥↑I
x : L
hx : x ∈ I
y : L
⊢ I ≤ LieSubmodule.idealizer I

Next tactic:
simp