Theorem: Matroid.Base.eq_exchange_of_diff_eq_singleton
File: Mathlib/Data/Matroid/Basic.lean

tactic: obtain ⟨f, hf, hb⟩ := hB.exchange hB' (h.symm.subset (mem_singleton e))
state_before: α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
⊢ ∃ f ∈ B' \ B, B' = insert f B \ {e}
state_after: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f (B \ {e}))
⊢ ∃ f ∈ B' \ B, B' = insert f B \ {e}

tactic: have hne : f ≠ e := by rintro rfl; exact hf.2 (h.symm.subset (mem_singleton f)).1
state_before: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f (B \ {e}))
⊢ ∃ f ∈ B' \ B, B' = insert f B \ {e}
state_after: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f (B \ {e}))
hne : f ≠ e
⊢ ∃ f ∈ B' \ B, B' = insert f B \ {e}

tactic: rw [insert_diff_singleton_comm hne] at hb
state_before: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f (B \ {e}))
hne : f ≠ e
⊢ ∃ f ∈ B' \ B, B' = insert f B \ {e}
state_after: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f B \ {e})
hne : f ≠ e
⊢ ∃ f ∈ B' \ B, B' = insert f B \ {e}

tactic: refine ⟨f, hf, (hb.eq_of_subset_base hB' ?_).symm⟩
state_before: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f B \ {e})
hne : f ≠ e
⊢ ∃ f ∈ B' \ B, B' = insert f B \ {e}
state_after: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f B \ {e})
hne : f ≠ e
⊢ insert f B \ {e} ⊆ B'

tactic: rw [diff_subset_iff, insert_subset_iff, union_comm, ← diff_subset_iff, h, and_iff_left rfl.subset]
state_before: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f B \ {e})
hne : f ≠ e
⊢ insert f B \ {e} ⊆ B'
state_after: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f B \ {e})
hne : f ≠ e
⊢ f ∈ B' ∪ {e}

tactic: exact Or.inl hf.1
state_before: case intro.intro
α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f B \ {e})
hne : f ≠ e
⊢ f ∈ B' ∪ {e}
state_after: no goals

tactic: rintro rfl
state_before: α : Type u_1
M : Matroid α
B B' : Set α
e : α
hB : M.Base B
hB' : M.Base B'
h : B \ B' = {e}
f : α
hf : f ∈ B' \ B
hb : M.Base (insert f (B \ {e}))
⊢ f ≠ e
state_after: α : Type u_1
M : Matroid α
B B' : Set α
hB : M.Base B
hB' : M.Base B'
f : α
hf : f ∈ B' \ B
h : B \ B' = {f}
hb : M.Base (insert f (B \ {f}))
⊢ False

tactic: exact hf.2 (h.symm.subset (mem_singleton f)).1
state_before: α : Type u_1
M : Matroid α
B B' : Set α
hB : M.Base B
hB' : M.Base B'
f : α
hf : f ∈ B' \ B
h : B \ B' = {f}
hb : M.Base (insert f (B \ {f}))
⊢ False
state_after: no goals