Theorem: Matroid.base_compl_iff_mem_maximals_disjoint_base
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
⊢ M.Base (M.E \ B) ↔ B ∈ maximals (fun x x_1 => x ⊆ x_1) {I | I ⊆ M.E ∧ ∃ B, M.Base B ∧ Disjoint I B}
state_after: α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
⊢ M.Base (M.E \ B) ↔
    (∃ B_1, M.Base B_1 ∧ Disjoint B B_1) ∧
      ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
tactic: simp_rw [mem_maximals_setOf_iff, and_iff_right hB, and_imp, forall_exists_index]
state_before: α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
⊢ M.Base (M.E \ B) ↔
    (∃ B_1, M.Base B_1 ∧ Disjoint B B_1) ∧
      ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
state_after: case refine_1
α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
h : M.Base (M.E \ B)
I : Set α
hI : I ⊆ M.E
B' : Set α
x✝ : M.Base B' ∧ Disjoint I B'
hBI : B ⊆ I
hB' : M.Base B'
hIB' : Disjoint I B'
⊢ I ⊆ B

case refine_2
α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
x✝ :
  (∃ B_1, M.Base B_1 ∧ Disjoint B B_1) ∧ ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
B' : Set α
hB' : M.Base B'
hBB' : Disjoint B B'
h : ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
⊢ M.Base (M.E \ B)
tactic: refine ⟨fun h ↦ ⟨⟨_, h, disjoint_sdiff_right⟩,
    fun I hI B' ⟨hB', hIB'⟩ hBI ↦ hBI.antisymm ?_⟩, fun ⟨⟨B', hB', hBB'⟩,h⟩ ↦ ?_⟩
state_before: case refine_2
α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
x✝ :
  (∃ B_1, M.Base B_1 ∧ Disjoint B B_1) ∧ ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
B' : Set α
hB' : M.Base B'
hBB' : Disjoint B B'
h : ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
⊢ M.Base (M.E \ B)
state_after: case refine_2
α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
x✝ :
  (∃ B_1, M.Base B_1 ∧ Disjoint B B_1) ∧ ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
B' : Set α
hB' : M.Base B'
hBB' : Disjoint B B'
h : ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
⊢ M.Base (M.E \ (M.E \ B'))

case refine_2
α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
x✝ :
  (∃ B_1, M.Base B_1 ∧ Disjoint B B_1) ∧ ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
B' : Set α
hB' : M.Base B'
hBB' : Disjoint B B'
h : ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
⊢ B ⊆ M.E \ B'
tactic: rw [h diff_subset B' ⟨hB', disjoint_sdiff_left⟩]
state_before: case refine_2
α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB : autoParam (B ⊆ M.E) _auto✝
x✝ :
  (∃ B_1, M.Base B_1 ∧ Disjoint B B_1) ∧ ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
B' : Set α
hB' : M.Base B'
hBB' : Disjoint B B'
h : ∀ ⦃y : Set α⦄, y ⊆ M.E → ∀ (x : Set α), M.Base x ∧ Disjoint y x → B ⊆ y → B = y
⊢ B ⊆ M.E \ B'
state_after: no goals
tactic: simp [subset_diff, hB, hBB']