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

tactic: simp_rw [Module.Finite.iff_fg]
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
⊢ ∃ M' N', Module.Finite R ↥M' ∧ Module.Finite R ↥N' ∧ s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: 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
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ s ⊆ ↑(LinearMap.range (mapIncl M' N'))

tactic: refine hs.induction_on ⟨_, _, fg_bot, fg_bot, Set.empty_subset _⟩ ?_
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
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: 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
⊢ ∀ {a : M ⊗[R] N} {s : Set (M ⊗[R] N)},
    a ∉ s →
      s.Finite →
        (∃ M' N', M'.FG ∧ N'.FG ∧ s ⊆ ↑(LinearMap.range (mapIncl M' N'))) →
          ∃ M' N', M'.FG ∧ N'.FG ∧ insert a s ⊆ ↑(LinearMap.range (mapIncl M' N'))

tactic: rintro a s - - ⟨M', N', hM', hN', h⟩
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
⊢ ∀ {a : M ⊗[R] N} {s : Set (M ⊗[R] N)},
    a ∉ s →
      s.Finite →
        (∃ M' N', M'.FG ∧ N'.FG ∧ s ⊆ ↑(LinearMap.range (mapIncl M' N'))) →
          ∃ M' N', M'.FG ∧ N'.FG ∧ insert a s ⊆ ↑(LinearMap.range (mapIncl M' N'))
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert a s ⊆ ↑(LinearMap.range (mapIncl M' N'))

tactic: refine TensorProduct.induction_on a ?_ (fun x y ↦ ?_) fun x y hx hy ↦ ?_
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert a s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: case intro.intro.intro.intro.refine_1
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert 0 s ⊆ ↑(LinearMap.range (mapIncl M' N'))

case intro.intro.intro.intro.refine_2
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x : M
y : N
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x ⊗ₜ[R] y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))

case intro.intro.intro.intro.refine_3
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
hx : ∃ M' N', M'.FG ∧ N'.FG ∧ insert x s ⊆ ↑(LinearMap.range (mapIncl M' N'))
hy : ∃ M' N', M'.FG ∧ N'.FG ∧ insert y s ⊆ ↑(LinearMap.range (mapIncl M' N'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x + y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))

tactic: exact ⟨M', N', hM', hN', Set.insert_subset (zero_mem _) h⟩
state_before: case intro.intro.intro.intro.refine_1
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert 0 s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: no goals

tactic: refine ⟨_, _, hM'.sup (fg_span_singleton x),
  hN'.sup (fg_span_singleton y), Set.insert_subset ?_ fun z hz ↦ ?_⟩
state_before: case intro.intro.intro.intro.refine_2
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x : M
y : N
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x ⊗ₜ[R] y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: case intro.intro.intro.intro.refine_2.refine_1
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x : M
y : N
⊢ x ⊗ₜ[R] y ∈ ↑(LinearMap.range (mapIncl (M' ⊔ span R {x}) (N' ⊔ span R {y})))

case intro.intro.intro.intro.refine_2.refine_2
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x : M
y : N
z : M ⊗[R] N
hz : z ∈ s
⊢ z ∈ ↑(LinearMap.range (mapIncl (M' ⊔ span R {x}) (N' ⊔ span R {y})))

tactic: exact ⟨⟨x, mem_sup_right (mem_span_singleton_self x)⟩ ⊗ₜ
  ⟨y, mem_sup_right (mem_span_singleton_self y)⟩, rfl⟩
state_before: case intro.intro.intro.intro.refine_2.refine_1
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x : M
y : N
⊢ x ⊗ₜ[R] y ∈ ↑(LinearMap.range (mapIncl (M' ⊔ span R {x}) (N' ⊔ span R {y})))
state_after: no goals

tactic: exact range_mapIncl_mono le_sup_left le_sup_left (h hz)
state_before: case intro.intro.intro.intro.refine_2.refine_2
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x : M
y : N
z : M ⊗[R] N
hz : z ∈ s
⊢ z ∈ ↑(LinearMap.range (mapIncl (M' ⊔ span R {x}) (N' ⊔ span R {y})))
state_after: no goals

tactic: obtain ⟨M₁', N₁', hM₁', hN₁', h₁⟩ := hx
state_before: case intro.intro.intro.intro.refine_3
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
hx : ∃ M' N', M'.FG ∧ N'.FG ∧ insert x s ⊆ ↑(LinearMap.range (mapIncl M' N'))
hy : ∃ M' N', M'.FG ∧ N'.FG ∧ insert y s ⊆ ↑(LinearMap.range (mapIncl M' N'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x + y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: case intro.intro.intro.intro.refine_3.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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
hy : ∃ M' N', M'.FG ∧ N'.FG ∧ insert y s ⊆ ↑(LinearMap.range (mapIncl M' N'))
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x + y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))

tactic: obtain ⟨M₂', N₂', hM₂', hN₂', h₂⟩ := hy
state_before: case intro.intro.intro.intro.refine_3.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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
hy : ∃ M' N', M'.FG ∧ N'.FG ∧ insert y s ⊆ ↑(LinearMap.range (mapIncl M' N'))
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x + y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: case intro.intro.intro.intro.refine_3.intro.intro.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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s✝ : Set (M ⊗[R] N)
hs : s✝.Finite
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x + y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))

tactic: refine ⟨_, _, hM₁'.sup hM₂', hN₁'.sup hN₂', Set.insert_subset (add_mem ?_ ?_) fun z hz ↦ ?_⟩
state_before: case intro.intro.intro.intro.refine_3.intro.intro.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₁ M₂ : Submodule R M
N₁ N₂ : Submodule R N
s✝ : Set (M ⊗[R] N)
hs : s✝.Finite
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
⊢ ∃ M' N', M'.FG ∧ N'.FG ∧ insert (x + y) s ⊆ ↑(LinearMap.range (mapIncl M' N'))
state_after: case intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.intro.intro.intro.refine_1
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
⊢ x ∈ LinearMap.range (mapIncl (M₁' ⊔ M₂') (N₁' ⊔ N₂'))

case intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.intro.intro.intro.refine_2
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
⊢ y ∈ LinearMap.range (mapIncl (M₁' ⊔ M₂') (N₁' ⊔ N₂'))

case intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.intro.intro.intro.refine_3
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
z : M ⊗[R] N
hz : z ∈ s
⊢ z ∈ ↑(LinearMap.range (mapIncl (M₁' ⊔ M₂') (N₁' ⊔ N₂')))

tactic: exact range_mapIncl_mono le_sup_left le_sup_left (h₁ (Set.mem_insert x s))
state_before: case intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.intro.intro.intro.refine_1
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
⊢ x ∈ LinearMap.range (mapIncl (M₁' ⊔ M₂') (N₁' ⊔ N₂'))
state_after: no goals

tactic: exact range_mapIncl_mono le_sup_right le_sup_right (h₂ (Set.mem_insert y s))
state_before: case intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.intro.intro.intro.refine_2
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
⊢ y ∈ LinearMap.range (mapIncl (M₁' ⊔ M₂') (N₁' ⊔ N₂'))
state_after: no goals

tactic: exact range_mapIncl_mono le_sup_left le_sup_left (h₁ (Set.subset_insert x s hz))
state_before: case intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.intro.intro.intro.refine_3
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
a : M ⊗[R] N
s : Set (M ⊗[R] N)
M' : Submodule R M
N' : Submodule R N
hM' : M'.FG
hN' : N'.FG
h : s ⊆ ↑(LinearMap.range (mapIncl M' N'))
x y : M ⊗[R] N
M₁' : Submodule R M
N₁' : Submodule R N
hM₁' : M₁'.FG
hN₁' : N₁'.FG
h₁ : insert x s ⊆ ↑(LinearMap.range (mapIncl M₁' N₁'))
M₂' : Submodule R M
N₂' : Submodule R N
hM₂' : M₂'.FG
hN₂' : N₂'.FG
h₂ : insert y s ⊆ ↑(LinearMap.range (mapIncl M₂' N₂'))
z : M ⊗[R] N
hz : z ∈ s
⊢ z ∈ ↑(LinearMap.range (mapIncl (M₁' ⊔ M₂') (N₁' ⊔ N₂')))
state_after: no goals