Theorem: Matroid.skewFamily_iff_exist_bases (Matroid/Modular.lean)

State before:
ι : Type u_1
α : Type u_2
M : Matroid α
B I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
⊢ M.SkewFamily Xs ↔ ∃ Is, Pairwise (Disjoint on Is) ∧ M.Basis (⋃ i, Is i) (⋃ i, Xs i) ∧ ∀ (i : ι), M.Basis (Is i) (Xs i)
Tactic:
refine ⟨fun h ↦ ?_, fun ⟨Is, hdj, hIs, hb⟩ ↦ hIs.indep.skewFamily_of_disjoint_bases hdj hb⟩
State after:
ι : Type u_1
α : Type u_2
M : Matroid α
B I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
⊢ ∃ Is, Pairwise (Disjoint on Is) ∧ M.Basis (⋃ i, Is i) (⋃ i, Xs i) ∧ ∀ (i : ι), M.Basis (Is i) (Xs i)

State before:
ι : Type u_1
α : Type u_2
M : Matroid α
B I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
⊢ ∃ Is, Pairwise (Disjoint on Is) ∧ M.Basis (⋃ i, Is i) (⋃ i, Xs i) ∧ ∀ (i : ι), M.Basis (Is i) (Xs i)
Tactic:
obtain ⟨B, hB⟩ := h.modularFamily
State after:
case intro
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ ∃ Is, Pairwise (Disjoint on Is) ∧ M.Basis (⋃ i, Is i) (⋃ i, Xs i) ∧ ∀ (i : ι), M.Basis (Is i) (Xs i)

State before:
case intro
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ ∃ Is, Pairwise (Disjoint on Is) ∧ M.Basis (⋃ i, Is i) (⋃ i, Xs i) ∧ ∀ (i : ι), M.Basis (Is i) (Xs i)
Tactic:
refine ⟨_, ?_, ?_, hB.basis_inter⟩
State after:
case intro.refine_1
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ Pairwise (Disjoint on fun i => Xs i ∩ B)

case intro.refine_2
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ M.Basis (⋃ i, Xs i ∩ B) (⋃ i, Xs i)

State before:
case intro.refine_2
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ M.Basis (⋃ i, Xs i ∩ B) (⋃ i, Xs i)
Tactic:
rw [← iUnion_inter]
State after:
case intro.refine_2
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ M.Basis ((⋃ i, Xs i) ∩ B) (⋃ i, Xs i)

State before:
case intro.refine_2
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ M.Basis ((⋃ i, Xs i) ∩ B) (⋃ i, Xs i)
Tactic:
exact hB.basis_iUnion
State after:
no goals

State before:
case intro.refine_1
ι : Type u_1
α : Type u_2
M : Matroid α
B✝ I J X X' Y Y' F : Set α
Xs Ys Js Is : ι → Set α
i j : ι
e f : α
h : M.SkewFamily Xs
B : Set α
hB : M.ModularBase B Xs
⊢ Pairwise (Disjoint on fun i => Xs i ∩ B)
Tactic:
exact h.pairwise_disjoint_of_indep_subsets (fun i ↦ inter_subset_left)
  (fun i ↦ hB.indep.inter_left _)
State after:
no goals