-- Mathlib/LinearAlgebra/TensorProduct/Finiteness.lean
theorem exists_finite_submodule_left_of_finite' (s : Set (M₁ ⊗[R] N₁)) (hs : s.Finite) :
    ∃ (M' : Submodule R M) (hM : M' ≤ M₁), Module.Finite R M' ∧
      s ⊆ LinearMap.range ((inclusion hM).rTensor N₁)

Proof state:
case intro.intro.intro.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid N
inst✝¹ : Module R M
inst✝ : Module R N
M₁ : Submodule R M
N₁ : Submodule R N
s : Set (↥M₁ ⊗[R] ↥N₁)
hs : s.Finite
M' : Submodule R M
w✝¹ : Submodule R N
hM : M' ≤ M₁
w✝ : w✝¹ ≤ N₁
hfin : Module.Finite R ↥M'
left✝ : Module.Finite R ↥w✝¹
h : s ⊆ ↑(LinearMap.range (map (inclusion hM) (inclusion w✝)))
⊢ ∃ M', ∃ (hM : M' ≤ M₁), Module.Finite R ↥M' ∧ s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM)))

Tactic:
refine ⟨M', hM, hfin, ?_⟩

Result:
case intro.intro.intro.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid N
inst✝¹ : Module R M
inst✝ : Module R N
M₁ : Submodule R M
N₁ : Submodule R N
s : Set (↥M₁ ⊗[R] ↥N₁)
hs : s.Finite
M' : Submodule R M
w✝¹ : Submodule R N
hM : M' ≤ M₁
w✝ : w✝¹ ≤ N₁
hfin : Module.Finite R ↥M'
left✝ : Module.Finite R ↥w✝¹
h : s ⊆ ↑(LinearMap.range (map (inclusion hM) (inclusion w✝)))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM)))

Proof state:
case intro.intro.intro.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid N
inst✝¹ : Module R M
inst✝ : Module R N
M₁ : Submodule R M
N₁ : Submodule R N
s : Set (↥M₁ ⊗[R] ↥N₁)
hs : s.Finite
M' : Submodule R M
w✝¹ : Submodule R N
hM : M' ≤ M₁
w✝ : w✝¹ ≤ N₁
hfin : Module.Finite R ↥M'
left✝ : Module.Finite R ↥w✝¹
h : s ⊆ ↑(LinearMap.range (map (inclusion hM) (inclusion w✝)))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM)))

Tactic:
rw [← LinearMap.rTensor_comp_lTensor] at h

Result:
case intro.intro.intro.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid N
inst✝¹ : Module R M
inst✝ : Module R N
M₁ : Submodule R M
N₁ : Submodule R N
s : Set (↥M₁ ⊗[R] ↥N₁)
hs : s.Finite
M' : Submodule R M
w✝¹ : Submodule R N
hM : M' ≤ M₁
w✝ : w✝¹ ≤ N₁
hfin : Module.Finite R ↥M'
left✝ : Module.Finite R ↥w✝¹
h : s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM) ∘ₗ LinearMap.lTensor (↥M') (inclusion w✝)))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM)))

Proof state:
case intro.intro.intro.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid N
inst✝¹ : Module R M
inst✝ : Module R N
M₁ : Submodule R M
N₁ : Submodule R N
s : Set (↥M₁ ⊗[R] ↥N₁)
hs : s.Finite
M' : Submodule R M
w✝¹ : Submodule R N
hM : M' ≤ M₁
w✝ : w✝¹ ≤ N₁
hfin : Module.Finite R ↥M'
left✝ : Module.Finite R ↥w✝¹
h : s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM) ∘ₗ LinearMap.lTensor (↥M') (inclusion w✝)))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM)))

Tactic:
exact h.trans (LinearMap.range_comp_le_range _ _)

Result:
no goals

Proof state:
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid N
inst✝¹ : Module R M
inst✝ : Module R N
M₁ : Submodule R M
N₁ : Submodule R N
s : Set (↥M₁ ⊗[R] ↥N₁)
hs : s.Finite
⊢ ∃ M', ∃ (hM : M' ≤ M₁), Module.Finite R ↥M' ∧ s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM)))

Tactic:
obtain ⟨M', _, hM, _, hfin, _, h⟩ := exists_finite_submodule_of_finite' s hs

Result:
case intro.intro.intro.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid N
inst✝¹ : Module R M
inst✝ : Module R N
M₁ : Submodule R M
N₁ : Submodule R N
s : Set (↥M₁ ⊗[R] ↥N₁)
hs : s.Finite
M' : Submodule R M
w✝¹ : Submodule R N
hM : M' ≤ M₁
w✝ : w✝¹ ≤ N₁
hfin : Module.Finite R ↥M'
left✝ : Module.Finite R ↥w✝¹
h : s ⊆ ↑(LinearMap.range (map (inclusion hM) (inclusion w✝)))
⊢ ∃ M', ∃ (hM : M' ≤ M₁), Module.Finite R ↥M' ∧ s ⊆ ↑(LinearMap.range (LinearMap.rTensor (↥N₁) (inclusion hM)))