Theorem: Submodule.mem_sup
File: Mathlib/LinearAlgebra/Span.lean

tactic: rw [← span_eq p, ← span_eq p', ← span_union] at h
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ p ⊔ p'
⊢ ∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = x

tactic: refine span_induction h ?_ ?_ ?_ ?_
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
⊢ ∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = x

tactic: rintro y (h | h)
state_before: case refine_1
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
⊢ ∀ (x : M), x ∈ ↑p ∪ ↑p' → ∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = x

tactic: exact ⟨y, h, 0, by simp, by simp⟩
state_before: case refine_1.inl
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h✝ : x ∈ span R (↑p ∪ ↑p')
y : M
h : y ∈ ↑p
⊢ ∃ y_1, y_1 ∈ p ∧ ∃ z, z ∈ p' ∧ y_1 + z = y

tactic: simp
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h✝ : x ∈ span R (↑p ∪ ↑p')
y : M
h : y ∈ ↑p
⊢ 0 ∈ p'

tactic: simp
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h✝ : x ∈ span R (↑p ∪ ↑p')
y : M
h : y ∈ ↑p
⊢ y + 0 = y

tactic: exact ⟨0, by simp, y, h, by simp⟩
state_before: case refine_1.inr
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h✝ : x ∈ span R (↑p ∪ ↑p')
y : M
h : y ∈ ↑p'
⊢ ∃ y_1, y_1 ∈ p ∧ ∃ z, z ∈ p' ∧ y_1 + z = y

tactic: simp
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h✝ : x ∈ span R (↑p ∪ ↑p')
y : M
h : y ∈ ↑p'
⊢ 0 ∈ p

tactic: simp
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h✝ : x ∈ span R (↑p ∪ ↑p')
y : M
h : y ∈ ↑p'
⊢ 0 + y = y

tactic: exact ⟨0, by simp, 0, by simp⟩
state_before: case refine_2
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
⊢ ∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = 0

tactic: simp
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
⊢ 0 ∈ p

tactic: simp
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
⊢ 0 ∈ p' ∧ 0 + 0 = 0

tactic: rintro _ _ ⟨y₁, hy₁, z₁, hz₁, rfl⟩ ⟨y₂, hy₂, z₂, hz₂, rfl⟩
state_before: case refine_3
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
⊢ ∀ (x y : M),
    (∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = x) →
      (∃ y_1, y_1 ∈ p ∧ ∃ z, z ∈ p' ∧ y_1 + z = y) → ∃ y_1, y_1 ∈ p ∧ ∃ z, z ∈ p' ∧ y_1 + z = x + y

tactic: exact ⟨_, add_mem hy₁ hy₂, _, add_mem hz₁ hz₂, by
  rw [add_assoc, add_assoc, ← add_assoc y₂,  ← add_assoc z₁, add_comm y₂]⟩
state_before: case refine_3.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
y₁ : M
hy₁ : y₁ ∈ p
z₁ : M
hz₁ : z₁ ∈ p'
y₂ : M
hy₂ : y₂ ∈ p
z₂ : M
hz₂ : z₂ ∈ p'
⊢ ∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = y₁ + z₁ + (y₂ + z₂)

tactic: rw [add_assoc, add_assoc, ← add_assoc y₂,  ← add_assoc z₁, add_comm y₂]
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
y₁ : M
hy₁ : y₁ ∈ p
z₁ : M
hz₁ : z₁ ∈ p'
y₂ : M
hy₂ : y₂ ∈ p
z₂ : M
hz₂ : z₂ ∈ p'
⊢ y₁ + y₂ + (z₁ + z₂) = y₁ + z₁ + (y₂ + z₂)

tactic: rintro a _ ⟨y, hy, z, hz, rfl⟩
state_before: case refine_4
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
⊢ ∀ (a : R) (x : M), (∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = x) → ∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = a • x

tactic: exact ⟨_, smul_mem _ a hy, _, smul_mem _ a hz, by simp [smul_add]⟩
state_before: case refine_4.intro.intro.intro.intro
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
a : R
y : M
hy : y ∈ p
z : M
hz : z ∈ p'
⊢ ∃ y_1, y_1 ∈ p ∧ ∃ z_1, z_1 ∈ p' ∧ y_1 + z_1 = a • (y + z)

tactic: simp [smul_add]
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
h : x ∈ span R (↑p ∪ ↑p')
a : R
y : M
hy : y ∈ p
z : M
hz : z ∈ p'
⊢ a • y + a • z = a • (y + z)

tactic: rintro ⟨y, hy, z, hz, rfl⟩
state_before: R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
x : M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
⊢ (∃ y, y ∈ p ∧ ∃ z, z ∈ p' ∧ y + z = x) → x ∈ p ⊔ p'

tactic: exact add_mem ((le_sup_left : p ≤ p ⊔ p') hy) ((le_sup_right : p' ≤ p ⊔ p') hz)
state_before: case intro.intro.intro.intro
R : Type u_2
R₂ : Type ?u.95383
K : Type ?u.95386
M : Type u_1
M₂ : Type ?u.95392
V : Type ?u.95395
S : Type ?u.95398
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
p p' : Submodule R M
inst✝² : Semiring R₂
σ₁₂ : R →+* R₂
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R₂ M₂
s t : Set M
y : M
hy : y ∈ p
z : M
hz : z ∈ p'
⊢ y + z ∈ p ⊔ p'