Theorem: TensorProduct.exists_finite_submodule_right_of_finite
File: Mathlib/LinearAlgebra/TensorProduct/Finiteness.lean

Proof steps:
state_before: 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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s : Set (M ⊗[R] N)
hs : s.Finite
⊢ ∃ N', Module.Finite R ↥N' ∧ s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype))
state_after: case 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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s : Set (M ⊗[R] N)
hs : s.Finite
w✝ : Submodule R M
N' : Submodule R N
left✝ : Module.Finite R ↥w✝
hfin : Module.Finite R ↥N'
h : s ⊆ ↑(LinearMap.range (mapIncl w✝ N'))
⊢ ∃ N', Module.Finite R ↥N' ∧ s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype))
tactic: obtain ⟨_, N', _, hfin, h⟩ := exists_finite_submodule_of_finite s hs
state_before: case 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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s : Set (M ⊗[R] N)
hs : s.Finite
w✝ : Submodule R M
N' : Submodule R N
left✝ : Module.Finite R ↥w✝
hfin : Module.Finite R ↥N'
h : s ⊆ ↑(LinearMap.range (mapIncl w✝ N'))
⊢ ∃ N', Module.Finite R ↥N' ∧ s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype))
state_after: case 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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s : Set (M ⊗[R] N)
hs : s.Finite
w✝ : Submodule R M
N' : Submodule R N
left✝ : Module.Finite R ↥w✝
hfin : Module.Finite R ↥N'
h : s ⊆ ↑(LinearMap.range (mapIncl w✝ N'))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype))
tactic: refine ⟨N', hfin, ?_⟩
state_before: case 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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s : Set (M ⊗[R] N)
hs : s.Finite
w✝ : Submodule R M
N' : Submodule R N
left✝ : Module.Finite R ↥w✝
hfin : Module.Finite R ↥N'
h : s ⊆ ↑(LinearMap.range (mapIncl w✝ N'))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype))
state_after: case 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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s : Set (M ⊗[R] N)
hs : s.Finite
w✝ : Submodule R M
N' : Submodule R N
left✝ : Module.Finite R ↥w✝
hfin : Module.Finite R ↥N'
h : s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype ∘ₗ LinearMap.rTensor (↥N') w✝.subtype))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype))
tactic: rw [mapIncl, ← LinearMap.lTensor_comp_rTensor] at h
state_before: case 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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s : Set (M ⊗[R] N)
hs : s.Finite
w✝ : Submodule R M
N' : Submodule R N
left✝ : Module.Finite R ↥w✝
hfin : Module.Finite R ↥N'
h : s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype ∘ₗ LinearMap.rTensor (↥N') w✝.subtype))
⊢ s ⊆ ↑(LinearMap.range (LinearMap.lTensor M N'.subtype))
state_after: no goals
tactic: exact h.trans (LinearMap.range_comp_le_range _ _)