Theorem: Module.finitePresentation_of_ker
File: Mathlib/Algebra/Module/FinitePresentation.lean

tactic: refine ⟨s, hs, ?_⟩
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
⊢ FinitePresentation R M
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: let π := Finsupp.total s M R Subtype.val
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: have H : Function.Surjective π :=
  LinearMap.range_eq_top.mp (by rw [Finsupp.range_total, Subtype.range_val, ← hs]; rfl)
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: have inst : Module.Finite R (LinearMap.ker (l ∘ₗ π)) := by
  constructor
  rw [Submodule.fg_top]; exact Module.FinitePresentation.fg_ker _ (hl.comp H)
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: letI : AddCommGroup (LinearMap.ker (l ∘ₗ π)) := inferInstance
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: let f : LinearMap.ker (l ∘ₗ π) →ₗ[R] LinearMap.ker l := LinearMap.restrict π (fun x ↦ id)
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: have e : π ∘ₗ Submodule.subtype _ = Submodule.subtype _ ∘ₗ f := by ext; rfl
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: have hf : Function.Surjective f := by
  rw [← LinearMap.range_eq_top]
  apply Submodule.map_injective_of_injective (Submodule.injective_subtype _)
  rw [Submodule.map_top, Submodule.range_subtype, ← LinearMap.range_comp, ← e,
    LinearMap.range_comp, Submodule.range_subtype, LinearMap.ker_comp,
    Submodule.map_comap_eq_of_surjective H]
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG

tactic: show (LinearMap.ker π).FG
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
⊢ (LinearMap.ker (Finsupp.total { x // x ∈ s } M R Subtype.val)).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
⊢ (LinearMap.ker π).FG

tactic: have : LinearMap.ker π ≤ LinearMap.ker (l ∘ₗ π) :=
  Submodule.comap_mono (f := π) (bot_le (a := LinearMap.ker l))
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
⊢ (LinearMap.ker π).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this✝ : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
this : LinearMap.ker π ≤ LinearMap.ker (l ∘ₗ π)
⊢ (LinearMap.ker π).FG

tactic: rw [← inf_eq_right.mpr this, ← Submodule.range_subtype (LinearMap.ker _),
  ← Submodule.map_comap_eq, ← LinearMap.ker_comp, e, LinearMap.ker_comp f,
  LinearMap.ker_eq_bot.mpr (Submodule.injective_subtype _), Submodule.comap_bot]
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this✝ : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
this : LinearMap.ker π ≤ LinearMap.ker (l ∘ₗ π)
⊢ (LinearMap.ker π).FG
state_after: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this✝ : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
this : LinearMap.ker π ≤ LinearMap.ker (l ∘ₗ π)
⊢ (Submodule.map (LinearMap.ker (l ∘ₗ π)).subtype (LinearMap.ker f)).FG

tactic: exact (Module.FinitePresentation.fg_ker f hf).map (Submodule.subtype _)
state_before: case intro
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this✝ : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
hf : Function.Surjective ⇑f
this : LinearMap.ker π ≤ LinearMap.ker (l ∘ₗ π)
⊢ (Submodule.map (LinearMap.ker (l ∘ₗ π)).subtype (LinearMap.ker f)).FG
state_after: no goals

tactic: apply Submodule.fg_of_fg_map_of_fg_inf_ker l
state_before: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ ⊤.FG
state_after: case hs1
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ (Submodule.map l ⊤).FG

case hs2
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ (⊤ ⊓ LinearMap.ker l).FG

tactic: rw [Submodule.map_top, LinearMap.range_eq_top.mpr hl]
state_before: case hs1
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ (Submodule.map l ⊤).FG
state_after: case hs1
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ ⊤.FG

tactic: exact Module.Finite.out
state_before: case hs1
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ ⊤.FG
state_after: no goals

tactic: rw [top_inf_eq, ← Submodule.fg_top]
state_before: case hs2
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ (⊤ ⊓ LinearMap.ker l).FG
state_after: case hs2
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ ⊤.FG

tactic: exact Module.Finite.out
state_before: case hs2
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
⊢ ⊤.FG
state_after: no goals

tactic: rw [Finsupp.range_total, Subtype.range_val, ← hs]
state_before: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
⊢ LinearMap.range π = ⊤
state_after: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
⊢ (Submodule.span R fun x => x ∈ s.val) = Submodule.span R ↑s

tactic: rfl
state_before: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
⊢ (Submodule.span R fun x => x ∈ s.val) = Submodule.span R ↑s
state_after: no goals

tactic: constructor
state_before: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
⊢ Finite R ↥(LinearMap.ker (l ∘ₗ π))
state_after: case out
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
⊢ ⊤.FG

tactic: rw [Submodule.fg_top]
state_before: case out
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
⊢ ⊤.FG
state_after: case out
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
⊢ (LinearMap.ker (l ∘ₗ π)).FG

tactic: exact Module.FinitePresentation.fg_ker _ (hl.comp H)
state_before: case out
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
⊢ (LinearMap.ker (l ∘ₗ π)).FG
state_after: no goals

tactic: ext
state_before: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
⊢ π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
state_after: case h
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
x✝ : ↥(LinearMap.ker (l ∘ₗ π))
⊢ (π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype) x✝ = ((LinearMap.ker l).subtype ∘ₗ f) x✝

tactic: rfl
state_before: case h
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
x✝ : ↥(LinearMap.ker (l ∘ₗ π))
⊢ (π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype) x✝ = ((LinearMap.ker l).subtype ∘ₗ f) x✝
state_after: no goals

tactic: rw [← LinearMap.range_eq_top]
state_before: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
⊢ Function.Surjective ⇑f
state_after: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
⊢ LinearMap.range f = ⊤

tactic: apply Submodule.map_injective_of_injective (Submodule.injective_subtype _)
state_before: R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
⊢ LinearMap.range f = ⊤
state_after: case a
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
⊢ Submodule.map (LinearMap.ker l).subtype (LinearMap.range f) = Submodule.map (LinearMap.ker l).subtype ⊤

tactic: rw [Submodule.map_top, Submodule.range_subtype, ← LinearMap.range_comp, ← e,
  LinearMap.range_comp, Submodule.range_subtype, LinearMap.ker_comp,
  Submodule.map_comap_eq_of_surjective H]
state_before: case a
R : Type u_1
M : Type u_3
N : Type u_2
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
ι : Sort ?u.163044
inst✝² : _root_.Finite ι
inst✝¹ : FinitePresentation R N
l : M →ₗ[R] N
hl : Function.Surjective ⇑l
inst✝ : FinitePresentation R ↥(LinearMap.ker l)
s : Finset M
hs : Submodule.span R ↑s = ⊤
π : ({ x // x ∈ s } →₀ R) →ₗ[R] M := Finsupp.total { x // x ∈ s } M R Subtype.val
H : Function.Surjective ⇑π
inst : Finite R ↥(LinearMap.ker (l ∘ₗ π))
this : AddCommGroup ↥(LinearMap.ker (l ∘ₗ π)) := inferInstance
f : ↥(LinearMap.ker (l ∘ₗ π)) →ₗ[R] ↥(LinearMap.ker l) := π.restrict ⋯
e : π ∘ₗ (LinearMap.ker (l ∘ₗ π)).subtype = (LinearMap.ker l).subtype ∘ₗ f
⊢ Submodule.map (LinearMap.ker l).subtype (LinearMap.range f) = Submodule.map (LinearMap.ker l).subtype ⊤
state_after: no goals