Theorem: AdicCompletion.tensor_map_id_left_injective_of_injective
File: Mathlib/RingTheory/AdicCompletion/AsTensorProduct.lean

Proof steps:
state_before: R✝ : Type u_1
inst✝¹⁴ : CommRing R✝
I✝ : Ideal R✝
M✝¹ : Type u_2
inst✝¹³ : AddCommGroup M✝¹
inst✝¹² : Module R✝ M✝¹
N✝ : Type u_3
inst✝¹¹ : AddCommGroup N✝
inst✝¹⁰ : Module R✝ N✝
R : Type u
inst✝⁹ : CommRing R
I : Ideal R
M✝ : Type u
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R M✝
inst✝⁶ : IsNoetherianRing R
M : Type u
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
f : M →ₗ[R] N
inst✝¹ : Module.Finite R M
inst✝ : Module.Finite R N
hf : Function.Injective ⇑f
⊢ Function.Injective ⇑(AlgebraTensorModule.map LinearMap.id f)
state_after: R✝ : Type u_1
inst✝¹⁴ : CommRing R✝
I✝ : Ideal R✝
M✝¹ : Type u_2
inst✝¹³ : AddCommGroup M✝¹
inst✝¹² : Module R✝ M✝¹
N✝ : Type u_3
inst✝¹¹ : AddCommGroup N✝
inst✝¹⁰ : Module R✝ N✝
R : Type u
inst✝⁹ : CommRing R
I : Ideal R
M✝ : Type u
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R M✝
inst✝⁶ : IsNoetherianRing R
M : Type u
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
f : M →ₗ[R] N
inst✝¹ : Module.Finite R M
inst✝ : Module.Finite R N
hf : Function.Injective ⇑f
⊢ Function.Injective
    ⇑(↑(ofTensorProductEquivOfFiniteNoetherian I N).symm ∘ₗ map I f ∘ₗ ↑(ofTensorProductEquivOfFiniteNoetherian I M))
tactic: rw [tensor_map_id_left_eq_map I f]
state_before: R✝ : Type u_1
inst✝¹⁴ : CommRing R✝
I✝ : Ideal R✝
M✝¹ : Type u_2
inst✝¹³ : AddCommGroup M✝¹
inst✝¹² : Module R✝ M✝¹
N✝ : Type u_3
inst✝¹¹ : AddCommGroup N✝
inst✝¹⁰ : Module R✝ N✝
R : Type u
inst✝⁹ : CommRing R
I : Ideal R
M✝ : Type u
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R M✝
inst✝⁶ : IsNoetherianRing R
M : Type u
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
f : M →ₗ[R] N
inst✝¹ : Module.Finite R M
inst✝ : Module.Finite R N
hf : Function.Injective ⇑f
⊢ Function.Injective
    ⇑(↑(ofTensorProductEquivOfFiniteNoetherian I N).symm ∘ₗ map I f ∘ₗ ↑(ofTensorProductEquivOfFiniteNoetherian I M))
state_after: R✝ : Type u_1
inst✝¹⁴ : CommRing R✝
I✝ : Ideal R✝
M✝¹ : Type u_2
inst✝¹³ : AddCommGroup M✝¹
inst✝¹² : Module R✝ M✝¹
N✝ : Type u_3
inst✝¹¹ : AddCommGroup N✝
inst✝¹⁰ : Module R✝ N✝
R : Type u
inst✝⁹ : CommRing R
I : Ideal R
M✝ : Type u
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R M✝
inst✝⁶ : IsNoetherianRing R
M : Type u
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
f : M →ₗ[R] N
inst✝¹ : Module.Finite R M
inst✝ : Module.Finite R N
hf : Function.Injective ⇑f
⊢ Function.Injective ⇑(map I f)
tactic: simp only [LinearMap.coe_comp, LinearEquiv.coe_coe, EmbeddingLike.comp_injective,
    EquivLike.injective_comp]
state_before: R✝ : Type u_1
inst✝¹⁴ : CommRing R✝
I✝ : Ideal R✝
M✝¹ : Type u_2
inst✝¹³ : AddCommGroup M✝¹
inst✝¹² : Module R✝ M✝¹
N✝ : Type u_3
inst✝¹¹ : AddCommGroup N✝
inst✝¹⁰ : Module R✝ N✝
R : Type u
inst✝⁹ : CommRing R
I : Ideal R
M✝ : Type u
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R M✝
inst✝⁶ : IsNoetherianRing R
M : Type u
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
f : M →ₗ[R] N
inst✝¹ : Module.Finite R M
inst✝ : Module.Finite R N
hf : Function.Injective ⇑f
⊢ Function.Injective ⇑(map I f)
state_after: no goals
tactic: exact map_injective I hf