Theorem: TensorProduct.span_tmul_eq_top
File: Mathlib/LinearAlgebra/TensorProduct.lean

tactic: ext t
state_before: R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
⊢ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} = ⊤

tactic: simp only [Submodule.mem_top, iff_true_iff]
state_before: case h
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ t ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} ↔ t ∈ ⊤

tactic: refine t.induction_on ?_ ?_ ?_
state_before: case h
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ t ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}

tactic: exact Submodule.zero_mem _
state_before: case h.refine_1
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ 0 ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}

tactic: intro m n
state_before: case h.refine_2
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ ∀ (x : M) (y : N), x ⊗ₜ[R] y ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}

tactic: apply Submodule.subset_span
state_before: case h.refine_2
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
m : M
n : N
⊢ m ⊗ₜ[R] n ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}

tactic: use m, n
state_before: case h.refine_2.a
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
m : M
n : N
⊢ m ⊗ₜ[R] n ∈ {t | ∃ m n, m ⊗ₜ[R] n = t}

tactic: intro t₁ t₂ ht₁ ht₂
state_before: case h.refine_3
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ ∀ (x y : M ⊗[R] N),
    x ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} →
      y ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} → x + y ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}

tactic: exact Submodule.add_mem _ ht₁ ht₂
state_before: case h.refine_3
R : Type u_3
inst✝¹⁶ : CommSemiring R
R' : Type ?u.481863
inst✝¹⁵ : Monoid R'
R'' : Type ?u.481869
inst✝¹⁴ : Semiring R''
M : Type u_1
N : Type u_2
P : Type ?u.481881
Q : Type ?u.481884
S : Type ?u.481887
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t t₁ t₂ : M ⊗[R] N
ht₁ : t₁ ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
ht₂ : t₂ ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
⊢ t₁ + t₂ ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}