Theorem: Submodule.baseChange_span
File: Mathlib/LinearAlgebra/TensorProduct/Tower.lean

tactic: simp only [baseChange, map_coe]
state_before: R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
⊢ baseChange A (span R s) = span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
⊢ span A (⇑((TensorProduct.mk R A M) 1) '' ↑(span R s)) = span A (⇑((TensorProduct.mk R A M) 1) '' s)

tactic: refine le_antisymm (span_le.mpr ?_) (span_mono <| Set.image_subset _ subset_span)
state_before: R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
⊢ span A (⇑((TensorProduct.mk R A M) 1) '' ↑(span R s)) = span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
⊢ ⇑((TensorProduct.mk R A M) 1) '' ↑(span R s) ⊆ ↑(span A (⇑((TensorProduct.mk R A M) 1) '' s))

tactic: rintro - ⟨m : M, hm : m ∈ span R s, rfl⟩
state_before: R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
⊢ ⇑((TensorProduct.mk R A M) 1) '' ↑(span R s) ⊆ ↑(span A (⇑((TensorProduct.mk R A M) 1) '' s))
state_after: case intro.intro
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ((TensorProduct.mk R A M) 1) m ∈ ↑(span A (⇑((TensorProduct.mk R A M) 1) '' s))

tactic: apply span_induction (p := fun m' ↦ (1 : A) ⊗ₜ[R] m' ∈ span A (TensorProduct.mk R A M 1 '' s)) hm
state_before: case intro.intro
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ((TensorProduct.mk R A M) 1) m ∈ ↑(span A (⇑((TensorProduct.mk R A M) 1) '' s))
state_after: case intro.intro.mem
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ∀ x ∈ s, 1 ⊗ₜ[R] x ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

case intro.intro.zero
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ 1 ⊗ₜ[R] 0 ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

case intro.intro.add
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ∀ (x y : M),
    1 ⊗ₜ[R] x ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s) →
      1 ⊗ₜ[R] y ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s) →
        1 ⊗ₜ[R] (x + y) ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

case intro.intro.smul
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ∀ (a : R) (x : M),
    1 ⊗ₜ[R] x ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s) →
      1 ⊗ₜ[R] (a • x) ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

tactic: intro m hm
state_before: case intro.intro.mem
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ∀ x ∈ s, 1 ⊗ₜ[R] x ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: case intro.intro.mem
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m✝ : M
hm✝ : m✝ ∈ span R s
m : M
hm : m ∈ s
⊢ 1 ⊗ₜ[R] m ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

tactic: exact subset_span ⟨m, hm, rfl⟩
state_before: case intro.intro.mem
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m✝ : M
hm✝ : m✝ ∈ span R s
m : M
hm : m ∈ s
⊢ 1 ⊗ₜ[R] m ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: no goals

tactic: simp
state_before: case intro.intro.zero
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ 1 ⊗ₜ[R] 0 ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: no goals

tactic: intro m₁ m₂ hm₁ hm₂
state_before: case intro.intro.add
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ∀ (x y : M),
    1 ⊗ₜ[R] x ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s) →
      1 ⊗ₜ[R] y ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s) →
        1 ⊗ₜ[R] (x + y) ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: case intro.intro.add
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
m₁ m₂ : M
hm₁ : 1 ⊗ₜ[R] m₁ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
hm₂ : 1 ⊗ₜ[R] m₂ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ 1 ⊗ₜ[R] (m₁ + m₂) ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

tactic: rw [tmul_add]
state_before: case intro.intro.add
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
m₁ m₂ : M
hm₁ : 1 ⊗ₜ[R] m₁ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
hm₂ : 1 ⊗ₜ[R] m₂ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ 1 ⊗ₜ[R] (m₁ + m₂) ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: case intro.intro.add
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
m₁ m₂ : M
hm₁ : 1 ⊗ₜ[R] m₁ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
hm₂ : 1 ⊗ₜ[R] m₂ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ 1 ⊗ₜ[R] m₁ + 1 ⊗ₜ[R] m₂ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

tactic: exact Submodule.add_mem _ hm₁ hm₂
state_before: case intro.intro.add
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
m₁ m₂ : M
hm₁ : 1 ⊗ₜ[R] m₁ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
hm₂ : 1 ⊗ₜ[R] m₂ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ 1 ⊗ₜ[R] m₁ + 1 ⊗ₜ[R] m₂ ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: no goals

tactic: intro r m' hm'
state_before: case intro.intro.smul
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
⊢ ∀ (a : R) (x : M),
    1 ⊗ₜ[R] x ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s) →
      1 ⊗ₜ[R] (a • x) ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: case intro.intro.smul
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
r : R
m' : M
hm' : 1 ⊗ₜ[R] m' ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ 1 ⊗ₜ[R] (r • m') ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

tactic: rw [tmul_smul, ← one_smul A ((1 : A) ⊗ₜ[R] m'), ← smul_assoc]
state_before: case intro.intro.smul
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
r : R
m' : M
hm' : 1 ⊗ₜ[R] m' ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ 1 ⊗ₜ[R] (r • m') ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: case intro.intro.smul
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
r : R
m' : M
hm' : 1 ⊗ₜ[R] m' ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ (r • 1) • 1 ⊗ₜ[R] m' ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)

tactic: exact smul_mem _ (r • 1) hm'
state_before: case intro.intro.smul
R : Type u_1
M : Type u_2
A : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
s : Set M
m : M
hm : m ∈ span R s
r : R
m' : M
hm' : 1 ⊗ₜ[R] m' ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
⊢ (r • 1) • 1 ⊗ₜ[R] m' ∈ span A (⇑((TensorProduct.mk R A M) 1) '' s)
state_after: no goals