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

tactic: constructor
state_before: R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
⊢ I < I ⊔ span R {a} ↔ ¬a ∈ I

tactic: intro h
state_before: case mp
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
⊢ I < I ⊔ span R {a} → ¬a ∈ I

tactic: by_contra akey
state_before: case mp
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : I < I ⊔ span R {a}
⊢ ¬a ∈ I

tactic: have h2 := gt_of_ge_of_gt h1 h
state_before: case mp
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : I < I ⊔ span R {a}
akey : a ∈ I
h1 : I ⊔ span R {a} ≤ I
⊢ False

tactic: exact lt_irrefl I h2
state_before: case mp
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : I < I ⊔ span R {a}
akey : a ∈ I
h1 : I ⊔ span R {a} ≤ I
h2 : I > I
⊢ False

tactic: simp only [sup_le_iff]
state_before: R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : I < I ⊔ span R {a}
akey : a ∈ I
⊢ I ⊔ span R {a} ≤ I

tactic: constructor
state_before: R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : I < I ⊔ span R {a}
akey : a ∈ I
⊢ I ≤ I ∧ span R {a} ≤ I

tactic: exact le_refl I
state_before: case left
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : I < I ⊔ span R {a}
akey : a ∈ I
⊢ I ≤ I

tactic: exact (span_singleton_le_iff_mem a I).mpr akey
state_before: case right
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : I < I ⊔ span R {a}
akey : a ∈ I
⊢ span R {a} ≤ I

tactic: intro h
state_before: case mpr
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
⊢ ¬a ∈ I → I < I ⊔ span R {a}

tactic: apply SetLike.lt_iff_le_and_exists.mpr
state_before: case mpr
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ I < I ⊔ span R {a}

tactic: constructor
state_before: case mpr
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ I ≤ I ⊔ span R {a} ∧ ∃ x, x ∈ I ⊔ span R {a} ∧ ¬x ∈ I

tactic: simp only [le_sup_left]
state_before: case mpr.left
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ I ≤ I ⊔ span R {a}

case mpr.right
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ ∃ x, x ∈ I ⊔ span R {a} ∧ ¬x ∈ I

tactic: use a
state_before: case mpr.right
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ ∃ x, x ∈ I ⊔ span R {a} ∧ ¬x ∈ I

tactic: constructor
state_before: case mpr.right
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ a ∈ I ⊔ span R {a} ∧ ¬a ∈ I

tactic: swap
state_before: case mpr.right.left
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ a ∈ I ⊔ span R {a}

case mpr.right.right
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ ¬a ∈ I

tactic: assumption
state_before: case mpr.right.right
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ ¬a ∈ I

tactic: have : (R ∙ a) ≤ I ⊔ R ∙ a := le_sup_right
state_before: case mpr.right.left
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
⊢ a ∈ I ⊔ span R {a}

tactic: exact this (mem_span_singleton_self a)
state_before: case mpr.right.left
R : Type u_1
R₂ : Type ?u.235836
K : Type ?u.235839
M : Type u_2
M₂ : Type ?u.235845
V : Type ?u.235848
S : Type ?u.235851
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
I : Submodule R M
a : M
h : ¬a ∈ I
this : span R {a} ≤ I ⊔ span R {a}
⊢ a ∈ I ⊔ span R {a}