Theorem: Matroid.Indep.exists_insert_of_not_base
File: Mathlib/Data/Matroid/Basic.lean

tactic: obtain ⟨B', hB', hIB'⟩ := hI.exists_base_superset
state_before: α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)
state_after: case intro.intro
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)

tactic: obtain ⟨x, hxB', hx⟩ := exists_of_ssubset (hIB'.ssubset_of_ne (by (rintro rfl; exact hI' hB')))
state_before: case intro.intro
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)
state_after: case intro.intro.intro.intro
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)

tactic: obtain (hxB | hxB) := em (x ∈ B)
state_before: case intro.intro.intro.intro
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)
state_after: case intro.intro.intro.intro.inl
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
hxB : x ∈ B
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)

case intro.intro.intro.intro.inr
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
hxB : x ∉ B
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)

tactic: obtain ⟨e,he, hBase⟩ := hB'.exchange hB ⟨hxB',hxB⟩
state_before: case intro.intro.intro.intro.inr
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
hxB : x ∉ B
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)
state_after: case intro.intro.intro.intro.inr.intro.intro
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
hxB : x ∉ B
e : α
he : e ∈ B \ B'
hBase : M.Base (insert e (B' \ {x}))
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)

tactic: exact ⟨e, ⟨he.1, not_mem_subset hIB' he.2⟩,
  indep_iff.2 ⟨_, hBase, insert_subset_insert (subset_diff_singleton hIB' hx)⟩⟩
state_before: case intro.intro.intro.intro.inr.intro.intro
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
hxB : x ∉ B
e : α
he : e ∈ B \ B'
hBase : M.Base (insert e (B' \ {x}))
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)
state_after: no goals

tactic: (rintro rfl; exact hI' hB')
state_before: α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
⊢ I ≠ B'
state_after: no goals

tactic: rintro rfl
state_before: α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
⊢ I ≠ B'
state_after: α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
hB' : M.Base I
hIB' : I ⊆ I
⊢ False

tactic: exact hI' hB'
state_before: α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
hB' : M.Base I
hIB' : I ⊆ I
⊢ False
state_after: no goals

tactic: exact ⟨x, ⟨hxB, hx⟩, hB'.indep.subset (insert_subset hxB' hIB') ⟩
state_before: case intro.intro.intro.intro.inl
α : Type u_1
M : Matroid α
I B : Set α
hI : M.Indep I
hI' : ¬M.Base I
hB : M.Base B
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
x : α
hxB' : x ∈ B'
hx : x ∉ I
hxB : x ∈ B
⊢ ∃ e ∈ B \ I, M.Indep (insert e I)
state_after: no goals