Theorem: Module.Flat.exists_factorization_of_comp_eq_zero_of_free
File: Mathlib/RingTheory/Flat/EquationalCriterion.lean

tactic: convert this ⊤ Finite.out
state_before: R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K N : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
h : x ∘ₗ f = 0
this : ∀ (K' : Submodule R K), K'.FG → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K' ≤ ker (a ∘ₗ f)
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ a ∘ₗ f = 0
state_after: case h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.a
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K N : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
h : x ∘ₗ f = 0
this : ∀ (K' : Submodule R K), K'.FG → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K' ≤ ker (a ∘ₗ f)
x✝³ : Type u
x✝² : Fintype x✝³
x✝¹ : N →ₗ[R] x✝³ →₀ R
x✝ : (x✝³ →₀ R) →ₗ[R] M
⊢ x✝¹ ∘ₗ f = 0 ↔ ⊤ ≤ ker (x✝¹ ∘ₗ f)

tactic: simp only [top_le_iff, ker_eq_top]
state_before: case h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.a
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K N : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
h : x ∘ₗ f = 0
this : ∀ (K' : Submodule R K), K'.FG → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K' ≤ ker (a ∘ₗ f)
x✝³ : Type u
x✝² : Fintype x✝³
x✝¹ : N →ₗ[R] x✝³ →₀ R
x✝ : (x✝³ →₀ R) →ₗ[R] M
⊢ x✝¹ ∘ₗ f = 0 ↔ ⊤ ≤ ker (x✝¹ ∘ₗ f)
state_after: no goals

tactic: revert N
state_before: R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K N : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
h : x ∘ₗ f = 0
K' : Submodule R K
hK' : K'.FG
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ K' ≤ ker (a ∘ₗ f)
state_after: R M : Type u
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Flat R M
K : Type u
inst✝² : AddCommGroup K
inst✝¹ : Module R K
inst✝ : Finite R K
K' : Submodule R K
hK' : K'.FG
⊢ ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K' ≤ ker (a ∘ₗ f)

tactic: apply Submodule.fg_induction (P := _) (N := K') (hN := hK')
state_before: R M : Type u
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Flat R M
K : Type u
inst✝² : AddCommGroup K
inst✝¹ : Module R K
inst✝ : Finite R K
K' : Submodule R K
hK' : K'.FG
⊢ ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K' ≤ ker (a ∘ₗ f)
state_after: case h₁
R M : Type u
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Flat R M
K : Type u
inst✝² : AddCommGroup K
inst✝¹ : Module R K
inst✝ : Finite R K
K' : Submodule R K
hK' : K'.FG
⊢ ∀ (x : K) {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
    {f : K →ₗ[R] N} {x_1 : N →ₗ[R] M}, x_1 ∘ₗ f = 0 → ∃ κ x_2 a y, x_1 = y ∘ₗ a ∧ Submodule.span R {x} ≤ ker (a ∘ₗ f)

case h₂
R M : Type u
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Flat R M
K : Type u
inst✝² : AddCommGroup K
inst✝¹ : Module R K
inst✝ : Finite R K
K' : Submodule R K
hK' : K'.FG
⊢ ∀ (M₁ M₂ : Submodule R K),
    (∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
        {f : K →ₗ[R] N} {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ M₁ ≤ ker (a ∘ₗ f)) →
      (∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
          {f : K →ₗ[R] N} {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ M₂ ≤ ker (a ∘ₗ f)) →
        ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
          {f : K →ₗ[R] N} {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ M₁ ⊔ M₂ ≤ ker (a ∘ₗ f)

tactic: intro k N _ _ _ _ f x hfx
state_before: case h₁
R M : Type u
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Flat R M
K : Type u
inst✝² : AddCommGroup K
inst✝¹ : Module R K
inst✝ : Finite R K
K' : Submodule R K
hK' : K'.FG
⊢ ∀ (x : K) {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
    {f : K →ₗ[R] N} {x_1 : N →ₗ[R] M}, x_1 ∘ₗ f = 0 → ∃ κ x_2 a y, x_1 = y ∘ₗ a ∧ Submodule.span R {x} ≤ ker (a ∘ₗ f)
state_after: case h₁
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
k : K
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
hfx : x ∘ₗ f = 0
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ Submodule.span R {k} ≤ ker (a ∘ₗ f)

tactic: have : x (f k) = 0 := by simpa using LinearMap.congr_fun hfx k
state_before: case h₁
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
k : K
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
hfx : x ∘ₗ f = 0
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ Submodule.span R {k} ≤ ker (a ∘ₗ f)
state_after: case h₁
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
k : K
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
hfx : x ∘ₗ f = 0
this : x (f k) = 0
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ Submodule.span R {k} ≤ ker (a ∘ₗ f)

tactic: simpa using exists_factorization_of_apply_eq_zero_of_free this
state_before: case h₁
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
k : K
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
hfx : x ∘ₗ f = 0
this : x (f k) = 0
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ Submodule.span R {k} ≤ ker (a ∘ₗ f)
state_after: no goals

tactic: simpa using LinearMap.congr_fun hfx k
state_before: R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
k : K
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
hfx : x ∘ₗ f = 0
⊢ x (f k) = 0
state_after: no goals

tactic: intro K₁ K₂ ih₁ ih₂ N _ _ _ _ f x hfx
state_before: case h₂
R M : Type u
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Flat R M
K : Type u
inst✝² : AddCommGroup K
inst✝¹ : Module R K
inst✝ : Finite R K
K' : Submodule R K
hK' : K'.FG
⊢ ∀ (M₁ M₂ : Submodule R K),
    (∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
        {f : K →ₗ[R] N} {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ M₁ ≤ ker (a ∘ₗ f)) →
      (∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
          {f : K →ₗ[R] N} {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ M₂ ≤ ker (a ∘ₗ f)) →
        ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N]
          {f : K →ₗ[R] N} {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ M₁ ⊔ M₂ ≤ ker (a ∘ₗ f)
state_after: case h₂
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
hfx : x ∘ₗ f = 0
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)

tactic: obtain ⟨κ₁, _, a₁, y₁, rfl, ha₁⟩ := ih₁ hfx
state_before: case h₂
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
x : N →ₗ[R] M
hfx : x ∘ₗ f = 0
⊢ ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)
state_after: case h₂.intro.intro.intro.intro.intro
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
y₁ : (κ₁ →₀ R) →ₗ[R] M
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
hfx : (y₁ ∘ₗ a₁) ∘ₗ f = 0
⊢ ∃ κ x a y, y₁ ∘ₗ a₁ = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)

tactic: have : y₁ ∘ₗ (a₁ ∘ₗ f) = 0 := by rw [← comp_assoc, hfx]
state_before: case h₂.intro.intro.intro.intro.intro
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
y₁ : (κ₁ →₀ R) →ₗ[R] M
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
hfx : (y₁ ∘ₗ a₁) ∘ₗ f = 0
⊢ ∃ κ x a y, y₁ ∘ₗ a₁ = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)
state_after: case h₂.intro.intro.intro.intro.intro
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
y₁ : (κ₁ →₀ R) →ₗ[R] M
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
hfx : (y₁ ∘ₗ a₁) ∘ₗ f = 0
this : y₁ ∘ₗ a₁ ∘ₗ f = 0
⊢ ∃ κ x a y, y₁ ∘ₗ a₁ = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)

tactic: obtain ⟨κ₂, hκ₂, a₂, y₂, rfl, ha₂⟩ := ih₂ this
state_before: case h₂.intro.intro.intro.intro.intro
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
y₁ : (κ₁ →₀ R) →ₗ[R] M
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
hfx : (y₁ ∘ₗ a₁) ∘ₗ f = 0
this : y₁ ∘ₗ a₁ ∘ₗ f = 0
⊢ ∃ κ x a y, y₁ ∘ₗ a₁ = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)
state_after: case h₂.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
κ₂ : Type u
hκ₂ : Fintype κ₂
a₂ : (κ₁ →₀ R) →ₗ[R] κ₂ →₀ R
y₂ : (κ₂ →₀ R) →ₗ[R] M
ha₂ : K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)
hfx : ((y₂ ∘ₗ a₂) ∘ₗ a₁) ∘ₗ f = 0
this : (y₂ ∘ₗ a₂) ∘ₗ a₁ ∘ₗ f = 0
⊢ ∃ κ x a y, (y₂ ∘ₗ a₂) ∘ₗ a₁ = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)

tactic: use κ₂, hκ₂, a₂ ∘ₗ a₁, y₂
state_before: case h₂.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
κ₂ : Type u
hκ₂ : Fintype κ₂
a₂ : (κ₁ →₀ R) →ₗ[R] κ₂ →₀ R
y₂ : (κ₂ →₀ R) →ₗ[R] M
ha₂ : K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)
hfx : ((y₂ ∘ₗ a₂) ∘ₗ a₁) ∘ₗ f = 0
this : (y₂ ∘ₗ a₂) ∘ₗ a₁ ∘ₗ f = 0
⊢ ∃ κ x a y, (y₂ ∘ₗ a₂) ∘ₗ a₁ = y ∘ₗ a ∧ K₁ ⊔ K₂ ≤ ker (a ∘ₗ f)
state_after: case h
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
κ₂ : Type u
hκ₂ : Fintype κ₂
a₂ : (κ₁ →₀ R) →ₗ[R] κ₂ →₀ R
y₂ : (κ₂ →₀ R) →ₗ[R] M
ha₂ : K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)
hfx : ((y₂ ∘ₗ a₂) ∘ₗ a₁) ∘ₗ f = 0
this : (y₂ ∘ₗ a₂) ∘ₗ a₁ ∘ₗ f = 0
⊢ (y₂ ∘ₗ a₂) ∘ₗ a₁ = y₂ ∘ₗ a₂ ∘ₗ a₁ ∧ K₁ ⊔ K₂ ≤ ker ((a₂ ∘ₗ a₁) ∘ₗ f)

tactic: simp_rw [comp_assoc]
state_before: case h
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
κ₂ : Type u
hκ₂ : Fintype κ₂
a₂ : (κ₁ →₀ R) →ₗ[R] κ₂ →₀ R
y₂ : (κ₂ →₀ R) →ₗ[R] M
ha₂ : K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)
hfx : ((y₂ ∘ₗ a₂) ∘ₗ a₁) ∘ₗ f = 0
this : (y₂ ∘ₗ a₂) ∘ₗ a₁ ∘ₗ f = 0
⊢ (y₂ ∘ₗ a₂) ∘ₗ a₁ = y₂ ∘ₗ a₂ ∘ₗ a₁ ∧ K₁ ⊔ K₂ ≤ ker ((a₂ ∘ₗ a₁) ∘ₗ f)
state_after: case h
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
κ₂ : Type u
hκ₂ : Fintype κ₂
a₂ : (κ₁ →₀ R) →ₗ[R] κ₂ →₀ R
y₂ : (κ₂ →₀ R) →ₗ[R] M
ha₂ : K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)
hfx : ((y₂ ∘ₗ a₂) ∘ₗ a₁) ∘ₗ f = 0
this : (y₂ ∘ₗ a₂) ∘ₗ a₁ ∘ₗ f = 0
⊢ True ∧ K₁ ⊔ K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)

tactic: exact ⟨trivial, sup_le (ha₁.trans (ker_le_ker_comp _ _)) ha₂⟩
state_before: case h
R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
κ₂ : Type u
hκ₂ : Fintype κ₂
a₂ : (κ₁ →₀ R) →ₗ[R] κ₂ →₀ R
y₂ : (κ₂ →₀ R) →ₗ[R] M
ha₂ : K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)
hfx : ((y₂ ∘ₗ a₂) ∘ₗ a₁) ∘ₗ f = 0
this : (y₂ ∘ₗ a₂) ∘ₗ a₁ ∘ₗ f = 0
⊢ True ∧ K₁ ⊔ K₂ ≤ ker (a₂ ∘ₗ a₁ ∘ₗ f)
state_after: no goals

tactic: rw [← comp_assoc, hfx]
state_before: R M : Type u
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Flat R M
K : Type u
inst✝⁶ : AddCommGroup K
inst✝⁵ : Module R K
inst✝⁴ : Finite R K
K' : Submodule R K
hK' : K'.FG
K₁ K₂ : Submodule R K
ih₁ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₁ ≤ ker (a ∘ₗ f)
ih₂ :
  ∀ {N : Type u} [inst : AddCommGroup N] [inst_1 : Module R N] [inst_2 : Free R N] [inst_3 : Finite R N] {f : K →ₗ[R] N}
    {x : N →ₗ[R] M}, x ∘ₗ f = 0 → ∃ κ x_1 a y, x = y ∘ₗ a ∧ K₂ ≤ ker (a ∘ₗ f)
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Free R N
inst✝ : Finite R N
f : K →ₗ[R] N
κ₁ : Type u
w✝ : Fintype κ₁
a₁ : N →ₗ[R] κ₁ →₀ R
y₁ : (κ₁ →₀ R) →ₗ[R] M
ha₁ : K₁ ≤ ker (a₁ ∘ₗ f)
hfx : (y₁ ∘ₗ a₁) ∘ₗ f = 0
⊢ y₁ ∘ₗ a₁ ∘ₗ f = 0
state_after: no goals