Theorem: LieIdeal.coe_map_of_surjective
File: Mathlib/Algebra/Lie/Submodule.lean

tactic: let J : LieIdeal R L' :=
  { (I : Submodule R L).map (f : L →ₗ[R] L') with
    lie_mem := fun {x y} hy ↦ by
      have hy' : ∃ x : L, x ∈ I ∧ f x = y := by simpa [hy]
      obtain ⟨z₂, hz₂, rfl⟩ := hy'
      obtain ⟨z₁, rfl⟩ := h x
      simp only [LieHom.coe_toLinearMap, SetLike.mem_coe, Set.mem_image,
        LieSubmodule.mem_coeSubmodule, Submodule.mem_carrier, Submodule.map_coe]
      use ⁅z₁, z₂⁆
      exact ⟨I.lie_mem hz₂, f.map_lie z₁ z₂⟩ }
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
⊢ ↑(map f I) = Submodule.map ↑f ↑I

tactic: erw [LieSubmodule.coe_lieSpan_submodule_eq_iff]
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J✝ : LieIdeal R L'
h : Function.Surjective ↑f
J : LieIdeal R L' :=
  let src := Submodule.map (↑f) (↑R L I).toSubmodule;
  {
    toSubmodule :=
      { toAddSubmonoid := src.toAddSubmonoid,
        smul_mem' := (_ : ∀ (c : R) {x : L'}, x ∈ src.carrier → c • x ∈ src.carrier) },
    lie_mem :=
      (_ :
        ∀ {x y : L'},
          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) }
⊢ ↑(map f I) = Submodule.map ↑f ↑I

tactic: use J
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J✝ : LieIdeal R L'
h : Function.Surjective ↑f
J : LieIdeal R L' :=
  let src := Submodule.map (↑f) (↑R L I).toSubmodule;
  {
    toSubmodule :=
      { toAddSubmonoid := src.toAddSubmonoid,
        smul_mem' := (_ : ∀ (c : R) {x : L'}, x ∈ src.carrier → c • x ∈ src.carrier) },
    lie_mem :=
      (_ :
        ∀ {x y : L'},
          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) }
⊢ ∃ N, ↑N = Submodule.map (↑f) (↑R L I).toSubmodule

tactic: have hy' : ∃ x : L, x ∈ I ∧ f x = y := by simpa [hy]
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
src✝ : Submodule R L' := Submodule.map (↑f) (↑R L I).toSubmodule
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

tactic: obtain ⟨z₂, hz₂, rfl⟩ := hy'
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
src✝ : Submodule R L' := Submodule.map (↑f) (↑R L I).toSubmodule
x y : L'
hy :
  y ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
hy' : ∃ x, x ∈ I ∧ ↑f x = y
⊢ ⁅x, y⁆ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier

tactic: obtain ⟨z₁, rfl⟩ := h x
state_before: case intro.intro
R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
src✝ : Submodule R L' := Submodule.map (↑f) (↑R L I).toSubmodule
x : L'
z₂ : L
hz₂ : z₂ ∈ I
hy :
  ↑f z₂ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
⊢ ⁅x, ↑f z₂⁆ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier

tactic: simp only [LieHom.coe_toLinearMap, SetLike.mem_coe, Set.mem_image,
  LieSubmodule.mem_coeSubmodule, Submodule.mem_carrier, Submodule.map_coe]
state_before: case intro.intro.intro
R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
src✝ : Submodule R L' := Submodule.map (↑f) (↑R L I).toSubmodule
z₂ : L
hz₂ : z₂ ∈ I
hy :
  ↑f z₂ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
z₁ : L
⊢ ⁅↑f z₁, ↑f z₂⁆ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier

tactic: use ⁅z₁, z₂⁆
state_before: case intro.intro.intro
R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
src✝ : Submodule R L' := Submodule.map (↑f) (↑R L I).toSubmodule
z₂ : L
hz₂ : z₂ ∈ I
hy :
  ↑f z₂ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
z₁ : L
⊢ ∃ x, x ∈ (↑R L I).toSubmodule ∧ ↑f x = ⁅↑f z₁, ↑f z₂⁆

tactic: exact ⟨I.lie_mem hz₂, f.map_lie z₁ z₂⟩
state_before: case intro.intro.intro
R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
src✝ : Submodule R L' := Submodule.map (↑f) (↑R L I).toSubmodule
z₂ : L
hz₂ : z₂ ∈ I
hy :
  ↑f z₂ ∈
    { toAddSubmonoid := src✝.toAddSubmonoid,
            smul_mem' :=
              (_ :
                ∀ (c : R) {x : L'}, x ∈ src✝.carrier → c • x ∈ src✝.carrier) }.toAddSubmonoid.toAddSubsemigroup.carrier
z₁ : L
⊢ ⁅z₁, z₂⁆ ∈ (↑R L I).toSubmodule ∧ ↑f ⁅z₁, z₂⁆ = ⁅↑f z₁, ↑f z₂⁆

tactic: simpa [hy]
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : Function.Surjective ↑f
src✝ : Submodule R L' := Submodule.map (↑f) (↑R L I).toSubmodule
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, x ∈ I ∧ ↑f x = y