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

tactic: simp_rw [mem_maximals_setOf_iff, and_iff_right hB, and_imp, forall_exists_index]
state_before: α : Type u_1
M : Matroid α
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 : 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: refine ⟨fun h ↦ ⟨⟨_, h, disjoint_sdiff_right⟩,
  fun I hI B' ⟨hB', hIB'⟩ hBI ↦ hBI.antisymm ?_⟩, fun ⟨⟨B', hB', hBB'⟩,h⟩ ↦ ?_⟩
state_before: α : Type u_1
M : Matroid α
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 : 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 : 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: rw [h diff_subset B' ⟨hB', disjoint_sdiff_left⟩]
state_before: case refine_2
α : Type u_1
M : Matroid α
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 : 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 : 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: simp [subset_diff, hB, hBB']
state_before: case refine_2
α : Type u_1
M : Matroid α
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: rw [hB'.eq_of_subset_base h, ← subset_compl_iff_disjoint_right, diff_eq, compl_inter,
  compl_compl] at hIB'
state_before: case refine_1
α : Type u_1
M : Matroid α
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
state_after: case refine_1
α : Type u_1
M : Matroid α
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' : I ⊆ M.Eᶜ ∪ B
⊢ I ⊆ B

case refine_1
α : Type u_1
M : Matroid α
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'
⊢ B' ⊆ M.E \ B

tactic: rw [subset_diff, and_iff_right hB'.subset_ground, disjoint_comm]
state_before: case refine_1
α : Type u_1
M : Matroid α
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'
⊢ B' ⊆ M.E \ B
state_after: case refine_1
α : Type u_1
M : Matroid α
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'
⊢ Disjoint B B'

tactic: exact disjoint_of_subset_left hBI hIB'
state_before: case refine_1
α : Type u_1
M : Matroid α
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'
⊢ Disjoint B B'
state_after: no goals

tactic: exact fun e he ↦ (hIB' he).elim (fun h' ↦ (h' (hI he)).elim) id
state_before: case refine_1
α : Type u_1
M : Matroid α
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' : I ⊆ M.Eᶜ ∪ B
⊢ I ⊆ B
state_after: no goals

tactic: simpa [hB'.subset_ground]
state_before: case refine_2
α : Type u_1
M : Matroid α
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'))
state_after: no goals