Theorem: Matroid.dualIndepMatroid_Indep
File: Mathlib/Data/Matroid/Dual.lean

Proof steps:
state_before: α : Type u_1
M✝ : Matroid α
I B X : Set α
M : Matroid α
⊢ ∀ ⦃I J : Set α⦄,
    (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) J → I ⊆ J → (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X : Set α
M : Matroid α
I J : Set α
hJE : J ⊆ M.E
B : Set α
hB : M.Base B
hJB : Disjoint J B
hIJ : I ⊆ J
⊢ I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B
tactic: rintro I J ⟨hJE, B, hB, hJB⟩ hIJ
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X : Set α
M : Matroid α
I J : Set α
hJE : J ⊆ M.E
B : Set α
hB : M.Base B
hJB : Disjoint J B
hIJ : I ⊆ J
⊢ I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B
state_after: no goals
tactic: exact ⟨hIJ.trans hJE, ⟨B, hB, disjoint_of_subset_left hIJ hJB⟩⟩
state_before: α : Type u_1
M✝ : Matroid α
I B X : Set α
M : Matroid α
⊢ ∀ ⦃I B : Set α⦄,
    (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I →
      I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I} →
        B ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I} →
          ∃ x ∈ B \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: rintro I X ⟨hIE, B, hB, hIB⟩ hI_not_max hX_max
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: have hXE := hX_max.1.1
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
hB' : M.Base (M.E \ X)
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: have hB' := (base_compl_iff_mem_maximals_disjoint_base hXE).mpr hX_max
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
hB' : M.Base (M.E \ X)
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: set B' := M.E \ X with hX
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: have hI := (not_iff_not.mpr (base_compl_iff_mem_maximals_disjoint_base)).mpr hI_not_max
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' \ I ∪ B
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: obtain ⟨B'', hB'', hB''₁, hB''₂⟩ := (hB'.indep.diff I).exists_base_subset_union_base hB
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' \ I ∪ B
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: rw [← compl_subset_compl, ← hIB.sdiff_eq_right, ← union_diff_distrib, diff_eq, compl_inter,
      compl_compl, union_subset_iff, compl_subset_compl] at hB''₂
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: have hssu := (subset_inter (hB''₂.2) hIE).ssubset_of_ne
      (by { rintro rfl; apply hI; convert hB''; simp [hB''.subset_ground] })
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
tactic: obtain ⟨e, ⟨(heB'' : e ∉ _), heE⟩, heI⟩ := exists_of_ssubset hssu
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ ∃ x ∈ X \ I, (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert x I)
state_after: case h
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ e ∈ X \ I ∧ (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert e I)
tactic: use e
state_before: case h
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ e ∈ X \ I ∧ (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (insert e I)
state_after: case h
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ e ∈ X ∧ ∃ B, M.Base B ∧ Disjoint (insert e I) B
tactic: simp_rw [mem_diff, insert_subset_iff, and_iff_left heI, and_iff_right heE, and_iff_right hIE]
state_before: case h
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ e ∈ X ∧ ∃ B, M.Base B ∧ Disjoint (insert e I) B
state_after: case h.refine_1
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
heX : e ∉ X
⊢ e ∈ B'

case h.refine_2
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ Disjoint (insert e I) B''
tactic: refine ⟨by_contra (fun heX ↦ heB'' (hB''₁ ⟨?_, heI⟩)), ⟨B'', hB'', ?_⟩⟩
state_before: case h.refine_2
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ Disjoint (insert e I) B''
state_after: case h.refine_2
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ Disjoint I B''
tactic: rw [← union_singleton, disjoint_union_left, disjoint_singleton_left, and_iff_left heB'']
state_before: case h.refine_2
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
I X : Set α
hIE : I ⊆ M.E
B : Set α
hB : M.Base B
hIB : Disjoint I B
hI_not_max : I ∉ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hX_max : X ∈ maximals (fun x x_1 => x ⊆ x_1) {I | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I}
hXE : X ⊆ M.E
B' : Set α := M.E \ X
hB' : M.Base B'
hX : B' = M.E \ X
hI : ¬M.Base (M.E \ I)
B'' : Set α
hB'' : M.Base B''
hB''₁ : B' \ I ⊆ B''
hB''₂ : B'' ⊆ B' ∪ B ∧ I ⊆ B''ᶜ
hssu : I ⊂ B''ᶜ ∩ M.E
e : α
heI : e ∉ I
heB'' : e ∉ B''
heE : e ∈ M.E
⊢ Disjoint I B''
state_after: no goals
tactic: exact disjoint_of_subset_left hB''₂.2 disjoint_compl_left
state_before: α : Type u_1
M✝ : Matroid α
I B X : Set α
M : Matroid α
⊢ ∀ X ⊆ M.E, ExistsMaximalSubsetProperty (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) X
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
⊢ (maximals (fun x x_1 => x ⊆ x_1) {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X}).Nonempty
tactic: rintro X - I'⟨hI'E, B, hB, hI'B⟩ hI'X
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
I B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
⊢ (maximals (fun x x_1 => x ⊆ x_1) {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X}).Nonempty
state_after: case intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
⊢ (maximals (fun x x_1 => x ⊆ x_1) {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X}).Nonempty
tactic: obtain ⟨I, hI⟩ := M.exists_basis (M.E \ X)
state_before: case intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
⊢ (maximals (fun x x_1 => x ⊆ x_1) {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X}).Nonempty
state_after: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ (maximals (fun x x_1 => x ⊆ x_1) {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X}).Nonempty
tactic: obtain ⟨B', hB', hIB', hB'IB⟩ := hI.indep.exists_base_subset_union_base hB
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ (maximals (fun x x_1 => x ⊆ x_1) {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X}).Nonempty
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_1
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) (X \ B' ∩ M.E)

case intro.intro.intro.intro.intro.intro.intro.refine_2
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ I' ⊆ X ∧ Disjoint I' B'

case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ ∀ ⦃b : Set α⦄,
    b ∈ {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X} →
      (fun x x_1 => x ⊆ x_1) (X \ B' ∩ M.E) b → (fun x x_1 => x ⊆ x_1) b (X \ B' ∩ M.E)
tactic: refine ⟨(X \ B') ∩ M.E,
      ⟨?_, subset_inter (subset_diff.mpr ?_) hI'E, inter_subset_left.trans
        diff_subset⟩, ?_⟩
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ ∀ ⦃b : Set α⦄,
    b ∈ {Y | (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) Y ∧ I' ⊆ Y ∧ Y ⊆ X} →
      (fun x x_1 => x ⊆ x_1) (X \ B' ∩ M.E) b → (fun x x_1 => x ⊆ x_1) b (X \ B' ∩ M.E)
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ ∀ ⦃b : Set α⦄,
    b ⊆ M.E → ∀ (x : Set α), M.Base x → Disjoint b x → I' ⊆ b → b ⊆ X → X \ B' ∩ M.E ⊆ b → b ⊆ X \ B' ∧ b ⊆ M.E
tactic: simp only [mem_setOf_eq, subset_inter_iff, and_imp, forall_exists_index]
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
⊢ ∀ ⦃b : Set α⦄,
    b ⊆ M.E → ∀ (x : Set α), M.Base x → Disjoint b x → I' ⊆ b → b ⊆ X → X \ B' ∩ M.E ⊆ b → b ⊆ X \ B' ∧ b ⊆ M.E
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X \ B' ∩ M.E ⊆ J
⊢ J ⊆ X \ B' ∧ J ⊆ M.E
tactic: intros J hJE B'' hB'' hdj _ hJX hssJ
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X \ B' ∩ M.E ⊆ J
⊢ J ⊆ X \ B' ∧ J ⊆ M.E
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X \ B' ∩ M.E ⊆ J
⊢ J ⊆ X \ B'
tactic: rw [and_iff_left hJE]
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X \ B' ∩ M.E ⊆ J
⊢ J ⊆ X \ B'
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
⊢ J ⊆ X \ B'
tactic: rw [diff_eq, inter_right_comm, ← diff_eq, diff_subset_iff] at hssJ
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
⊢ J ⊆ X \ B'
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
⊢ J ⊆ X \ B'
tactic: have hI' : (B'' ∩ X) ∪ (B' \ X) ⊆ B' := by
      rw [union_subset_iff, and_iff_left diff_subset,
        ← inter_eq_self_of_subset_left hB''.subset_ground, inter_right_comm, inter_assoc]

      calc _ ⊆ _ := inter_subset_inter_right _ hssJ
           _ ⊆ _ := by rw [inter_union_distrib_left, hdj.symm.inter_eq, union_empty]
           _ ⊆ _ := inter_subset_right
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
⊢ J ⊆ X \ B'
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
B₁ : Set α
hB₁ : M.Base B₁
hI'B₁ : B'' ∩ X ∪ B' \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∩ X ∪ B' \ X ∪ B''
⊢ J ⊆ X \ B'
tactic: obtain ⟨B₁,hB₁,hI'B₁,hB₁I⟩ := (hB'.indep.subset hI').exists_base_subset_union_base hB''
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
B₁ : Set α
hB₁ : M.Base B₁
hI'B₁ : B'' ∩ X ∪ B' \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∩ X ∪ B' \ X ∪ B''
⊢ J ⊆ X \ B'
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
B₁ : Set α
hB₁ : M.Base B₁
hI'B₁ : B'' ∩ X ∪ B' \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B' \ X
⊢ J ⊆ X \ B'
tactic: rw [union_comm, ← union_assoc, union_eq_self_of_subset_right inter_subset_left] at hB₁I
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
B₁ : Set α
hB₁ : M.Base B₁
hI'B₁ : B'' ∩ X ∪ B' \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B' \ X
⊢ J ⊆ X \ B'
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
B₁ : Set α
hB₁ : M.Base B₁
hI'B₁ : B'' ∩ X ∪ B' \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B' \ X
this : B₁ = B'
⊢ J ⊆ X \ B'
tactic: have : B₁ = B' := by
      refine hB₁.eq_of_subset_indep hB'.indep (fun e he ↦ ?_)
      refine (hB₁I he).elim (fun heB'' ↦ ?_) (fun h ↦ h.1)
      refine (em (e ∈ X)).elim (fun heX ↦ hI' (Or.inl ⟨heB'', heX⟩)) (fun heX ↦ hIB' ?_)
      refine hI.mem_of_insert_indep ⟨hB₁.subset_ground he, heX⟩
        (hB₁.indep.subset (insert_subset he ?_))
      refine (subset_union_of_subset_right (subset_diff.mpr ⟨hIB',?_⟩) _).trans hI'B₁
      exact disjoint_of_subset_left hI.subset disjoint_sdiff_left
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
B' : Set α
hB' : M.Base B'
hIB' : I ⊆ B'
hB'IB : B' ⊆ I ∪ B
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
hssJ : X ∩ M.E ⊆ B' ∪ J
hI' : B'' ∩ X ∪ B' \ X ⊆ B'
B₁ : Set α
hB₁ : M.Base B₁
hI'B₁ : B'' ∩ X ∪ B' \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B' \ X
this : B₁ = B'
⊢ J ⊆ X \ B'
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
⊢ J ⊆ X \ B₁
tactic: subst this
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
⊢ J ⊆ X \ B₁
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
hne : ¬Disjoint J B₁
⊢ False
tactic: refine subset_diff.mpr ⟨hJX, by_contra (fun hne ↦ ?_)⟩
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
hne : ¬Disjoint J B₁
⊢ False
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
hne : ¬Disjoint J B₁
e : α
heJ : e ∈ J
heB' : e ∈ B₁
⊢ False
tactic: obtain ⟨e, heJ, heB'⟩ := not_disjoint_iff.mp hne
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
hne : ¬Disjoint J B₁
e : α
heJ : e ∈ J
heB' : e ∈ B₁
⊢ False
state_after: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.inl
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
hne : ¬Disjoint J B₁
e : α
heJ : e ∈ J
heB' : e ∈ B₁
heB'' : e ∈ B''
⊢ False

case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.inr.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
hne : ¬Disjoint J B₁
e : α
heJ : e ∈ J
heB' : e ∈ B₁
heX : e ∉ X
⊢ False
tactic: obtain (heB'' | ⟨-,heX⟩ ) := hB₁I heB'
state_before: case intro.intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro.intro.intro.inr.intro
α : Type u_1
M✝ : Matroid α
I✝ B✝ X✝ : Set α
M : Matroid α
X I' : Set α
hI'E : I' ⊆ M.E
B : Set α
hB : M.Base B
hI'B : Disjoint I' B
hI'X : I' ⊆ X
I : Set α
hI : M.Basis I (M.E \ X)
J : Set α
hJE : J ⊆ M.E
B'' : Set α
hB'' : M.Base B''
hdj : Disjoint J B''
a✝ : I' ⊆ J
hJX : J ⊆ X
B₁ : Set α
hB₁ hB' : M.Base B₁
hIB' : I ⊆ B₁
hB'IB : B₁ ⊆ I ∪ B
hssJ : X ∩ M.E ⊆ B₁ ∪ J
hI' hI'B₁ : B'' ∩ X ∪ B₁ \ X ⊆ B₁
hB₁I : B₁ ⊆ B'' ∪ B₁ \ X
hne : ¬Disjoint J B₁
e : α
heJ : e ∈ J
heB' : e ∈ B₁
heX : e ∉ X
⊢ False
state_after: no goals
tactic: exact heX (hJX heJ)
state_before: α : Type u_1
M✝ : Matroid α
I B X : Set α
M : Matroid α
⊢ ∀ (I : Set α), (fun I => I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B) I → I ⊆ M.E
state_after: no goals
tactic: tauto