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

tactic: let S := { T : Submodule R M | ∃ (m : M) (_ : m ∈ p) (_ : m ≠ 0), T = span R {m} }
state_before: R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S : Type ?u.227894
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
p : Submodule R M
⊢ p = sSup {T | ∃ m x x, T = span R {m}}

tactic: apply le_antisymm
state_before: R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
⊢ p = sSup {T | ∃ m x x, T = span R {m}}

tactic: intro m hm
state_before: case a
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
⊢ p ≤ sSup {T | ∃ m x x, T = span R {m}}

tactic: by_cases h : m = 0
state_before: case a
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
m : M
hm : m ∈ p
⊢ m ∈ sSup {T | ∃ m x x, T = span R {m}}

tactic: rw [h]
state_before: case pos
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
m : M
hm : m ∈ p
h : m = 0
⊢ m ∈ sSup {T | ∃ m x x, T = span R {m}}

tactic: simp
state_before: case pos
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
m : M
hm : m ∈ p
h : m = 0
⊢ 0 ∈ sSup {T | ∃ m x x, T = span R {m}}

tactic: exact @le_sSup _ _ S _ ⟨m, ⟨hm, ⟨h, rfl⟩⟩⟩ m (mem_span_singleton_self m)
state_before: case neg
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
m : M
hm : m ∈ p
h : ¬m = 0
⊢ m ∈ sSup {T | ∃ m x x, T = span R {m}}

tactic: rw [sSup_le_iff]
state_before: case a
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
⊢ sSup {T | ∃ m x x, T = span R {m}} ≤ p

tactic: rintro S ⟨_, ⟨_, ⟨_, rfl⟩⟩⟩
state_before: case a
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
⊢ ∀ (b : Submodule R M), b ∈ {T | ∃ m x x, T = span R {m}} → b ≤ p

tactic: rwa [span_singleton_le_iff_mem]
state_before: case a.intro.intro.intro
R : Type u_1
R₂ : Type ?u.227879
K : Type ?u.227882
M : Type u_2
M₂ : Type ?u.227888
V : Type ?u.227891
S✝ : Type ?u.227894
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
p : Submodule R M
S : Set (Submodule R M) := {T | ∃ m x x, T = span R {m}}
w✝² : M
w✝¹ : w✝² ∈ p
w✝ : w✝² ≠ 0
⊢ span R {w✝²} ≤ p