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₂

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₂

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₂

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

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 ↑↑(LinearEquiv.symm g)
⊢ LieModule.IsNilpotent R L 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 ↑↑(LinearEquiv.symm g)
x : L₂
m : M₂
⊢ ⁅↑(LieEquiv.symm f).toLieHom x, ↑↑(LinearEquiv.symm g) m⁆ = ↑↑(LinearEquiv.symm g) ⁅x, m⁆