Theorem: Module.free_of_lTensor_residueField_injective
File: Mathlib/RingTheory/LocalRing/Module.lean

Proof steps:
state_before: R : Type u_1
S : Type ?u.268667
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
inst✝⁹ : LocalRing R
M : Type u_2
N : Type u_3
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup N
inst✝⁶ : Module R M
inst✝⁵ : Module R N
P : Type u_4
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hg : Surjective ⇑g
h : Exact ⇑f ⇑g
inst✝² : Finite R M
inst✝¹ : Finite R N
inst✝ : Free R N
hf : Function.Injective ⇑(LinearMap.lTensor k f)
⊢ Free R P
state_after: R : Type u_1
S : Type ?u.268667
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
inst✝⁹ : LocalRing R
M : Type u_2
N : Type u_3
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup N
inst✝⁶ : Module R M
inst✝⁵ : Module R N
P : Type u_4
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hg : Surjective ⇑g
h : Exact ⇑f ⇑g
inst✝² : Finite R M
inst✝¹ : Finite R N
inst✝ : Free R N
hf : Function.Injective ⇑(LinearMap.lTensor k f)
this : FinitePresentation R P
⊢ Free R P
tactic: have := Module.finitePresentation_of_free_of_surjective g hg
    (by rw [h.linearMap_ker_eq, LinearMap.range_eq_map]; exact (Module.Finite.out).map f)
state_before: R : Type u_1
S : Type ?u.268667
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
inst✝⁹ : LocalRing R
M : Type u_2
N : Type u_3
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup N
inst✝⁶ : Module R M
inst✝⁵ : Module R N
P : Type u_4
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hg : Surjective ⇑g
h : Exact ⇑f ⇑g
inst✝² : Finite R M
inst✝¹ : Finite R N
inst✝ : Free R N
hf : Function.Injective ⇑(LinearMap.lTensor k f)
this : FinitePresentation R P
⊢ Free R P
state_after: case H
R : Type u_1
S : Type ?u.268667
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
inst✝⁹ : LocalRing R
M : Type u_2
N : Type u_3
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup N
inst✝⁶ : Module R M
inst✝⁵ : Module R N
P : Type u_4
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hg : Surjective ⇑g
h : Exact ⇑f ⇑g
inst✝² : Finite R M
inst✝¹ : Finite R N
inst✝ : Free R N
hf : Function.Injective ⇑(LinearMap.lTensor k f)
this : FinitePresentation R P
⊢ Function.Injective ⇑(LinearMap.rTensor P (Submodule.subtype 𝔪))
tactic: apply free_of_maximalIdeal_rTensor_injective
state_before: case H
R : Type u_1
S : Type ?u.268667
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
inst✝⁹ : LocalRing R
M : Type u_2
N : Type u_3
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup N
inst✝⁶ : Module R M
inst✝⁵ : Module R N
P : Type u_4
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hg : Surjective ⇑g
h : Exact ⇑f ⇑g
inst✝² : Finite R M
inst✝¹ : Finite R N
inst✝ : Free R N
hf : Function.Injective ⇑(LinearMap.lTensor k f)
this : FinitePresentation R P
⊢ Function.Injective ⇑(LinearMap.rTensor P (Submodule.subtype 𝔪))
state_after: case H
R : Type u_1
S : Type ?u.268667
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
inst✝⁹ : LocalRing R
M : Type u_2
N : Type u_3
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup N
inst✝⁶ : Module R M
inst✝⁵ : Module R N
P : Type u_4
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hg : Surjective ⇑g
h : Exact ⇑f ⇑g
inst✝² : Finite R M
inst✝¹ : Finite R N
inst✝ : Free R N
hf : Function.Injective ⇑(LinearMap.lTensor k f)
this : FinitePresentation R P
⊢ Function.Injective ⇑(LinearMap.lTensor P (Submodule.subtype 𝔪))
tactic: rw [← LinearMap.lTensor_inj_iff_rTensor_inj]
state_before: case H
R : Type u_1
S : Type ?u.268667
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
inst✝⁹ : LocalRing R
M : Type u_2
N : Type u_3
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup N
inst✝⁶ : Module R M
inst✝⁵ : Module R N
P : Type u_4
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hg : Surjective ⇑g
h : Exact ⇑f ⇑g
inst✝² : Finite R M
inst✝¹ : Finite R N
inst✝ : Free R N
hf : Function.Injective ⇑(LinearMap.lTensor k f)
this : FinitePresentation R P
⊢ Function.Injective ⇑(LinearMap.lTensor P (Submodule.subtype 𝔪))
state_after: no goals
tactic: apply lTensor_injective_of_exact_of_exact_of_rTensor_injective
    h hg (LinearMap.exact_subtype_mkQ 𝔪) (Submodule.mkQ_surjective _)
    ((LinearMap.lTensor_inj_iff_rTensor_inj _ _).mp hf)
    (Module.Flat.lTensor_preserves_injective_linearMap _ Subtype.val_injective)