Theorem: Function.Surjective.lieModule_lcs_map_eq
File: Mathlib/Algebra/Lie/Nilpotent.lean

tactic: induction' k with k ih
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_2
M₂ : Type u_1
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⁆
k : ℕ
⊢ Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)

tactic: simp only [Nat.zero_eq, lowerCentralSeries_zero, LieSubmodule.top_coeSubmodule,
  Submodule.map_top, LinearMap.range_eq_top]
state_before: case zero
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_2
M₂ : Type u_1
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⁆
⊢ Submodule.map g ↑(lowerCentralSeries R L M Nat.zero) = ↑(lowerCentralSeries R L₂ M₂ Nat.zero)

tactic: exact hg
state_before: case zero
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_2
M₂ : Type u_1
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⁆
⊢ Surjective ↑g

tactic: suffices
  g '' {m | ∃ (x : L) (n : _), n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m} =
    {m | ∃ (x : L₂) (n : _), n ∈ lowerCentralSeries R L M k ∧ ⁅x, g n⁆ = m} by
  simp only [← LieSubmodule.mem_coeSubmodule] at this
  simp_rw [lowerCentralSeries_succ, LieSubmodule.lieIdeal_oper_eq_linear_span',
    Submodule.map_span, LieSubmodule.mem_top, true_and, ← LieSubmodule.mem_coeSubmodule, this,
    ← ih, Submodule.mem_map, exists_exists_and_eq_and]
state_before: case succ
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
⊢ Submodule.map g ↑(lowerCentralSeries R L M (Nat.succ k)) = ↑(lowerCentralSeries R L₂ M₂ (Nat.succ k))

tactic: ext m₂
state_before: case succ
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
⊢ ↑g '' {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m} =
    {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, ↑g n⁆ = m}

tactic: constructor
state_before: case succ.h
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
m₂ : M₂
⊢ m₂ ∈ ↑g '' {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m} ↔
    m₂ ∈ {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, ↑g n⁆ = m}

tactic: simp only [← LieSubmodule.mem_coeSubmodule] at this
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
this :
  ↑g '' {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m} =
    {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, ↑g n⁆ = m}
⊢ Submodule.map g ↑(lowerCentralSeries R L M (Nat.succ k)) = ↑(lowerCentralSeries R L₂ M₂ (Nat.succ k))

tactic: simp_rw [lowerCentralSeries_succ, LieSubmodule.lieIdeal_oper_eq_linear_span',
  Submodule.map_span, LieSubmodule.mem_top, true_and, ← LieSubmodule.mem_coeSubmodule, this,
  ← ih, Submodule.mem_map, exists_exists_and_eq_and]
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
this :
  (fun a => ↑g a) '' {m | ∃ x n, n ∈ ↑(lowerCentralSeries R L M k) ∧ ⁅x, n⁆ = m} =
    {m | ∃ x n, n ∈ ↑(lowerCentralSeries R L M k) ∧ ⁅x, ↑g n⁆ = m}
⊢ Submodule.map g ↑(lowerCentralSeries R L M (Nat.succ k)) = ↑(lowerCentralSeries R L₂ M₂ (Nat.succ k))

tactic: rintro ⟨m, ⟨x, n, hn, rfl⟩, rfl⟩
state_before: case succ.h.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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
m₂ : M₂
⊢ m₂ ∈ ↑g '' {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m} →
    m₂ ∈ {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, ↑g n⁆ = m}

tactic: exact ⟨f x, n, hn, hfg x n⟩
state_before: case succ.h.mp.intro.intro.intro.intro.intro
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
x : L
n : M
hn : n ∈ lowerCentralSeries R L M k
⊢ ↑g ⁅x, n⁆ ∈ {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, ↑g n⁆ = m}

tactic: rintro ⟨x, n, hn, rfl⟩
state_before: case succ.h.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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
m₂ : M₂
⊢ m₂ ∈ {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, ↑g n⁆ = m} →
    m₂ ∈ ↑g '' {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m}

tactic: obtain ⟨y, rfl⟩ := hf x
state_before: case succ.h.mpr.intro.intro.intro
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
x : L₂
n : M
hn : n ∈ lowerCentralSeries R L M k
⊢ ⁅x, ↑g n⁆ ∈ ↑g '' {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m}

tactic: exact ⟨⁅y, n⁆, ⟨y, n, hn, rfl⟩, (hfg y n).symm⟩
state_before: case succ.h.mpr.intro.intro.intro.intro
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_2
M₂ : Type u_1
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⁆
k : ℕ
ih : Submodule.map g ↑(lowerCentralSeries R L M k) = ↑(lowerCentralSeries R L₂ M₂ k)
n : M
hn : n ∈ lowerCentralSeries R L M k
y : L
⊢ ⁅↑f y, ↑g n⁆ ∈ ↑g '' {m | ∃ x n, n ∈ lowerCentralSeries R L M k ∧ ⁅x, n⁆ = m}