Theorem: TensorProduct.mk_surjective
File: Mathlib/LinearAlgebra/TensorProduct/RightExactness.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
⊢ Surjective ⇑((mk R S M) 1)
state_after: R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
⊢ {t | ∃ m n, m ⊗ₜ[R] n = t} ⊆ ↑(range ((mk R S M) 1))
tactic: rw [← LinearMap.range_eq_top, ← top_le_iff, ← TensorProduct.span_tmul_eq_top, Submodule.span_le]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
⊢ {t | ∃ m n, m ⊗ₜ[R] n = t} ⊆ ↑(range ((mk R S M) 1))
state_after: case intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
x : S
y : M
⊢ x ⊗ₜ[R] y ∈ ↑(range ((mk R S M) 1))
tactic: rintro _ ⟨x, y, rfl⟩
state_before: case intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
x : S
y : M
⊢ x ⊗ₜ[R] y ∈ ↑(range ((mk R S M) 1))
state_after: case intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
y : M
x : R
⊢ (algebraMap R S) x ⊗ₜ[R] y ∈ ↑(range ((mk R S M) 1))
tactic: obtain ⟨x, rfl⟩ := h x
state_before: case intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
y : M
x : R
⊢ (algebraMap R S) x ⊗ₜ[R] y ∈ ↑(range ((mk R S M) 1))
state_after: case intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
y : M
x : R
⊢ 1 ⊗ₜ[R] (x • y) ∈ ↑(range ((mk R S M) 1))
tactic: rw [Algebra.algebraMap_eq_smul_one, smul_tmul]
state_before: case intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝¹⁶ : CommRing R
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup P
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
Q : Type u_5
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R Q
hfg : Exact ⇑f ⇑g
hg : Surjective ⇑g
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup N'
inst✝⁵ : AddCommGroup P'
inst✝⁴ : Module R M'
inst✝³ : Module R N'
inst✝² : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact ⇑f' ⇑g'
hg' : Surjective ⇑g'
S : Type u_9
inst✝¹ : Semiring S
inst✝ : Algebra R S
h : Surjective ⇑(algebraMap R S)
y : M
x : R
⊢ 1 ⊗ₜ[R] (x • y) ∈ ↑(range ((mk R S M) 1))
state_after: no goals
tactic: exact ⟨x • y, rfl⟩