Theorem: Equiv.lieModule_isNilpotent_iff
File: Mathlib/Algebra/Lie/Nilpotent.lean

tactic: constructor <;> intro h
state_before: R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
⊢ LieModule.IsNilpotent R L M ↔ LieModule.IsNilpotent R L₂ M₂
state_after: case mp
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L M
⊢ LieModule.IsNilpotent R L₂ M₂

case mpr
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L₂ M₂
⊢ LieModule.IsNilpotent R L M

tactic: have hg : Surjective (g : M →ₗ[R] M₂) := g.surjective
state_before: case mp
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L M
⊢ LieModule.IsNilpotent R L₂ M₂
state_after: case mp
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg✝ : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L M
hg : Surjective ⇑↑g
⊢ LieModule.IsNilpotent R L₂ M₂

tactic: exact f.surjective.lieModuleIsNilpotent hg hfg
state_before: case mp
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg✝ : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L M
hg : Surjective ⇑↑g
⊢ LieModule.IsNilpotent R L₂ M₂
state_after: no goals

tactic: have hg : Surjective (g.symm : M₂ →ₗ[R] M) := g.symm.surjective
state_before: case mpr
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L₂ M₂
⊢ LieModule.IsNilpotent R L M
state_after: case mpr
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg✝ : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L₂ M₂
hg : Surjective ⇑↑g.symm
⊢ LieModule.IsNilpotent R L M

tactic: refine f.symm.surjective.lieModuleIsNilpotent hg fun x m => ?_
state_before: case mpr
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg✝ : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L₂ M₂
hg : Surjective ⇑↑g.symm
⊢ LieModule.IsNilpotent R L M
state_after: case mpr
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg✝ : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L₂ M₂
hg : Surjective ⇑↑g.symm
x : L₂
m : M₂
⊢ ⁅f.symm.toLieHom x, ↑g.symm m⁆ = ↑g.symm ⁅x, m⁆

tactic: rw [LinearEquiv.coe_coe, LieEquiv.coe_to_lieHom, ← g.symm_apply_apply ⁅f.symm x, g.symm m⁆, ←
  hfg, f.apply_symm_apply, g.apply_symm_apply]
state_before: case mpr
R : Type u
L : Type v
M : Type w
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
k : ℕ
N : LieSubmodule R L M
L₂ : Type u_1
M₂ : Type u_2
inst✝⁵ : LieRing L₂
inst✝⁴ : LieAlgebra R L₂
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L₂ M₂
inst✝ : LieModule R L₂ M₂
f✝ : L →ₗ⁅R⁆ L₂
g✝ : M →ₗ[R] M₂
hf : Surjective ⇑f✝
hg✝ : Surjective ⇑g✝
hfg✝ : ∀ (x : L) (m : M), ⁅f✝ x, g✝ m⁆ = g✝ ⁅x, m⁆
f : L ≃ₗ⁅R⁆ L₂
g : M ≃ₗ[R] M₂
hfg : ∀ (x : L) (m : M), ⁅f x, g m⁆ = g ⁅x, m⁆
h : LieModule.IsNilpotent R L₂ M₂
hg : Surjective ⇑↑g.symm
x : L₂
m : M₂
⊢ ⁅f.symm.toLieHom x, ↑g.symm m⁆ = ↑g.symm ⁅x, m⁆
state_after: no goals