File: Mathlib/Data/Matroid/Closure.lean

full_name: Matroid.Flat.subset_of_basis_of_basis
code: /-- A flat is a maximal set having a given basis  -/
@[mk_iff]
structure Flat (M : Matroid α) (F : Set α) : Prop where
  subset_of_basis_of_basis : ∀ ⦃I X⦄, M.Basis I F → M.Basis I X → X ⊆ F
  subset_ground : F ⊆ M.E
goal: M.Basis I F → M.Basis I X → X ⊆ F

full_name: Matroid.flat_iff
code: /-- A flat is a maximal set having a given basis  -/
@[mk_iff]
structure Flat (M : Matroid α) (F : Set α) : Prop where
  subset_of_basis_of_basis : ∀ ⦃I X⦄, M.Basis I F → M.Basis I X → X ⊆ F
  subset_ground : F ⊆ M.E
goal: M.Flat F ↔ (∀ ⦃I X : Set α⦄, M.Basis I F → M.Basis I X → X ⊆ F) ∧ F ⊆ M.E

full_name: Matroid.Flat
code: /-- A flat is a maximal set having a given basis  -/
@[mk_iff]
structure Flat (M : Matroid α) (F : Set α) : Prop where
  subset_of_basis_of_basis : ∀ ⦃I X⦄, M.Basis I F → M.Basis I X → X ⊆ F
  subset_ground : F ⊆ M.E
goal: Prop

full_name: Matroid.Flat.subset_ground
code: /-- A flat is a maximal set having a given basis  -/
@[mk_iff]
structure Flat (M : Matroid α) (F : Set α) : Prop where
  subset_of_basis_of_basis : ∀ ⦃I X⦄, M.Basis I F → M.Basis I X → X ⊆ F
  subset_ground : F ⊆ M.E
goal: F ⊆ M.E

full_name: Matroid.ground_flat
code: @[simp] lemma ground_flat (M : Matroid α) : M.Flat M.E 
goal: M.Flat M.E

full_name: Matroid.Flat.iInter
code: lemma Flat.iInter {ι : Type*} [Nonempty ι] {Fs : ι → Set α}
    (hFs : ∀ i, M.Flat (Fs i)) : M.Flat (⋂ i, Fs i) 
goal: M.Flat (⋂ i, Fs i)

full_name: Matroid.subtypeClosure
code: /-- The property of being a flat gives rise to a `ClosureOperator` on the subsets of `M.E`,
in which the `IsClosed` sets correspond to `Flat`s.
(We can't define such an operator on all of `Set α`,
since this would incorrectly force `univ` to always be a flat.) -/
def subtypeClosure (M : Matroid α) : ClosureOperator (Iic M.E) 
goal: ClosureOperator ↑(Set.Iic M.E)

full_name: Matroid.flat_iff_isClosed
code: lemma flat_iff_isClosed : M.Flat F ↔ ∃ h : F ⊆ M.E, M.subtypeClosure.IsClosed ⟨F, h⟩ 
goal: M.Flat F ↔ ∃ (h : F ⊆ M.E), M.subtypeClosure.IsClosed ⟨F, h⟩

full_name: Matroid.isClosed_iff_flat
code: lemma isClosed_iff_flat {F : Iic M.E} : M.subtypeClosure.IsClosed F ↔ M.Flat F 
goal: M.subtypeClosure.IsClosed F ↔ M.Flat ↑F

full_name: Matroid.closure
code: /-- The closure of `X ⊆ M.E` is the intersection of all the flats of `M` containing `X`.
A set `X` that doesn't satisfy `X ⊆ M.E` has the junk value `M.closure X := M.closure (X ∩ M.E)`. -/
def closure (M : Matroid α) (X : Set α) : Set α 
goal: Set α

full_name: Matroid.closure_def
code: lemma closure_def (M : Matroid α) (X : Set α) : M.closure X = ⋂₀ {F | M.Flat F ∧ X ∩ M.E ⊆ F} 
goal: M.closure X = ⋂₀ {F | M.Flat F ∧ X ∩ M.E ⊆ F}

full_name: Matroid.closure_def'
code: lemma closure_def' (M : Matroid α) (X : Set α) (hX : X ⊆ M.E := by aesop_mat) :
    M.closure X = ⋂₀ {F | M.Flat F ∧ X ⊆ F} 
goal: M.closure X = ⋂₀ {F | M.Flat F ∧ X ⊆ F}

full_name: Matroid.closure_eq_subtypeClosure
code: lemma closure_eq_subtypeClosure (M : Matroid α) (X : Set α) :
    M.closure X = M.subtypeClosure ⟨X ∩ M.E, inter_subset_right⟩  
goal: M.closure X = ↑(M.subtypeClosure ⟨X ∩ M.E, ⋯⟩)

full_name: Matroid.closure_subset_ground
code: @[aesop unsafe 10% (rule_sets := [Matroid])]
lemma closure_subset_ground (M : Matroid α) (X : Set α) : M.closure X ⊆ M.E 
goal: M.closure X ⊆ M.E

full_name: Matroid.ground_subset_closure_iff
code: @[simp] lemma ground_subset_closure_iff : M.E ⊆ M.closure X ↔ M.closure X = M.E 
goal: M.E ⊆ M.closure X ↔ M.closure X = M.E

full_name: Matroid.closure_inter_ground
code: @[simp] lemma closure_inter_ground (M : Matroid α) (X : Set α) :
    M.closure (X ∩ M.E) = M.closure X 
goal: M.closure (X ∩ M.E) = M.closure X

full_name: Matroid.inter_ground_subset_closure
code: lemma inter_ground_subset_closure (M : Matroid α) (X : Set α) : X ∩ M.E ⊆ M.closure X 
goal: X ∩ M.E ⊆ M.closure X

full_name: Matroid.mem_closure_iff_forall_mem_flat
code: lemma mem_closure_iff_forall_mem_flat (X : Set α) (hX : X ⊆ M.E := by aesop_mat) :
    e ∈ M.closure X ↔ ∀ F, M.Flat F → X ⊆ F → e ∈ F 
goal: e ∈ M.closure X ↔ ∀ (F : Set α), M.Flat F → X ⊆ F → e ∈ F

full_name: Matroid.subset_closure_iff_forall_subset_flat
code: lemma subset_closure_iff_forall_subset_flat (X : Set α) (hX : X ⊆ M.E := by aesop_mat) :
    Y ⊆ M.closure X ↔ ∀ F, M.Flat F → X ⊆ F → Y ⊆ F 
goal: Y ⊆ M.closure X ↔ ∀ (F : Set α), M.Flat F → X ⊆ F → Y ⊆ F

full_name: Matroid.subset_closure
code: lemma subset_closure (M : Matroid α) (X : Set α) (hX : X ⊆ M.E := by aesop_mat) :
    X ⊆ M.closure X 
goal: X ⊆ M.closure X

full_name: Matroid.Flat.closure
code: lemma Flat.closure (hF : M.Flat F) : M.closure F = F 
goal: M.closure F = F

full_name: Matroid.closure_ground
code: @[simp] lemma closure_ground (M : Matroid α) : M.closure M.E = M.E 
goal: M.closure M.E = M.E

full_name: Matroid.closure_univ
code: @[simp] lemma closure_univ (M : Matroid α) : M.closure univ = M.E 
goal: M.closure Set.univ = M.E

full_name: Matroid.closure_subset_closure
code: lemma closure_subset_closure (M : Matroid α) (h : X ⊆ Y) : M.closure X ⊆ M.closure Y 
goal: M.closure X ⊆ M.closure Y

full_name: Matroid.closure_mono
code: lemma closure_mono (M : Matroid α) : Monotone M.closure 
goal: Monotone M.closure

full_name: Matroid.closure_closure
code: @[simp] lemma closure_closure (M : Matroid α) (X : Set α) : M.closure (M.closure X) = M.closure X 
goal: M.closure (M.closure X) = M.closure X

full_name: Matroid.closure_subset_closure_of_subset_closure
code: lemma closure_subset_closure_of_subset_closure (hXY : X ⊆ M.closure Y) :
    M.closure X ⊆ M.closure Y 
goal: M.closure X ⊆ M.closure Y

full_name: Matroid.closure_subset_closure_iff_subset_closure
code: lemma closure_subset_closure_iff_subset_closure (hX : X ⊆ M.E := by aesop_mat) :
    M.closure X ⊆ M.closure Y ↔ X ⊆ M.closure Y 
goal: M.closure X ⊆ M.closure Y ↔ X ⊆ M.closure Y

full_name: Matroid.subset_closure_of_subset
code: lemma subset_closure_of_subset (M : Matroid α) (hXY : X ⊆ Y) (hY : Y ⊆ M.E := by aesop_mat) :
    X ⊆ M.closure Y 
goal: X ⊆ M.closure Y

full_name: Matroid.subset_closure_of_subset'
code: lemma subset_closure_of_subset' (M : Matroid α) (hXY : X ⊆ Y) (hX : X ⊆ M.E := by aesop_mat) :
    X ⊆ M.closure Y 
goal: X ⊆ M.closure Y

full_name: Matroid.exists_of_closure_ssubset
code: lemma exists_of_closure_ssubset (hXY : M.closure X ⊂ M.closure Y) : ∃ e ∈ Y, e ∉ M.closure X 
goal: ∃ e ∈ Y, e ∉ M.closure X

full_name: Matroid.mem_closure_of_mem
code: lemma mem_closure_of_mem (M : Matroid α) (h : e ∈ X) (hX : X ⊆ M.E := by aesop_mat) :
    e ∈ M.closure X 
goal: e ∈ M.closure X

full_name: Matroid.mem_closure_of_mem'
code: lemma mem_closure_of_mem' (M : Matroid α) (heX : e ∈ X) (h : e ∈ M.E := by aesop_mat) :
    e ∈ M.closure X 
goal: e ∈ M.closure X

full_name: Matroid.not_mem_of_mem_diff_closure
code: lemma not_mem_of_mem_diff_closure (he : e ∈ M.E \ M.closure X) : e ∉ X 
goal: e ∉ X

full_name: Matroid.mem_ground_of_mem_closure
code: @[aesop unsafe 10% (rule_sets := [Matroid])]
lemma mem_ground_of_mem_closure (he : e ∈ M.closure X) : e ∈ M.E 
goal: e ∈ M.E

full_name: Matroid.closure_iUnion_closure_eq_closure_iUnion
code: lemma closure_iUnion_closure_eq_closure_iUnion (M : Matroid α) (Xs : ι → Set α) :
    M.closure (⋃ i, M.closure (Xs i)) = M.closure (⋃ i, Xs i) 
goal: M.closure (⋃ i, M.closure (Xs i)) = M.closure (⋃ i, Xs i)

full_name: Matroid.closure_iUnion_congr
code: lemma closure_iUnion_congr (Xs Ys : ι → Set α) (h : ∀ i, M.closure (Xs i) = M.closure (Ys i)) :
    M.closure (⋃ i, Xs i) = M.closure (⋃ i, Ys i) 
goal: M.closure (⋃ i, Xs i) = M.closure (⋃ i, Ys i)

full_name: Matroid.closure_biUnion_closure_eq_closure_sUnion
code: lemma closure_biUnion_closure_eq_closure_sUnion (M : Matroid α) (Xs : Set (Set α)) :
    M.closure (⋃ X ∈ Xs, M.closure X) = M.closure (⋃₀ Xs) 
goal: M.closure (⋃ X ∈ Xs, M.closure X) = M.closure (⋃₀ Xs)

full_name: Matroid.closure_biUnion_closure_eq_closure_biUnion
code: lemma closure_biUnion_closure_eq_closure_biUnion (M : Matroid α) (Xs : ι → Set α) (A : Set ι) :
    M.closure (⋃ i ∈ A, M.closure (Xs i)) = M.closure (⋃ i ∈ A, Xs i) 
goal: M.closure (⋃ i ∈ A, M.closure (Xs i)) = M.closure (⋃ i ∈ A, Xs i)

full_name: Matroid.closure_biUnion_congr
code: lemma closure_biUnion_congr (M : Matroid α) (Xs Ys : ι → Set α) (A : Set ι)
    (h : ∀ i ∈ A, M.closure (Xs i) = M.closure (Ys i)) :
    M.closure (⋃ i ∈ A, Xs i) = M.closure (⋃ i ∈ A, Ys i) 
goal: M.closure (⋃ i ∈ A, Xs i) = M.closure (⋃ i ∈ A, Ys i)

full_name: Matroid.closure_closure_union_closure_eq_closure_union
code: lemma closure_closure_union_closure_eq_closure_union (M : Matroid α) (X Y : Set α) :
    M.closure (M.closure X ∪ M.closure Y) = M.closure (X ∪ Y) 
goal: M.closure (M.closure X ∪ M.closure Y) = M.closure (X ∪ Y)

full_name: Matroid.closure_union_closure_right_eq
code: @[simp] lemma closure_union_closure_right_eq (M : Matroid α) (X Y : Set α) :
    M.closure (X ∪ M.closure Y) = M.closure (X ∪ Y) 
goal: M.closure (X ∪ M.closure Y) = M.closure (X ∪ Y)

full_name: Matroid.closure_union_closure_left_eq
code: @[simp] lemma closure_union_closure_left_eq (M : Matroid α) (X Y : Set α) :
    M.closure (M.closure X ∪ Y) = M.closure (X ∪ Y) 
goal: M.closure (M.closure X ∪ Y) = M.closure (X ∪ Y)

full_name: Matroid.closure_insert_closure_eq_closure_insert
code: @[simp] lemma closure_insert_closure_eq_closure_insert (M : Matroid α) (e : α) (X : Set α) :
    M.closure (insert e (M.closure X)) = M.closure (insert e X) 
goal: M.closure (insert e (M.closure X)) = M.closure (insert e X)

full_name: Matroid.closure_union_closure_empty_eq
code: @[simp] lemma closure_union_closure_empty_eq (M : Matroid α) (X : Set α) :
    M.closure X ∪ M.closure ∅ = M.closure X 
goal: M.closure X ∪ M.closure ∅ = M.closure X

full_name: Matroid.closure_empty_union_closure_eq
code: @[simp] lemma closure_empty_union_closure_eq (M : Matroid α) (X : Set α) :
    M.closure ∅ ∪ M.closure X = M.closure X 
goal: M.closure ∅ ∪ M.closure X = M.closure X

full_name: Matroid.closure_insert_eq_of_mem_closure
code: lemma closure_insert_eq_of_mem_closure (he : e ∈ M.closure X) :
    M.closure (insert e X) = M.closure X 
goal: M.closure (insert e X) = M.closure X

full_name: Matroid.mem_closure_self
code: lemma mem_closure_self (M : Matroid α) (e : α) (he : e ∈ M.E := by aesop_mat) : e ∈ M.closure {e} 
goal: e ∈ M.closure {e}

full_name: Matroid.Indep.closure_eq_setOf_basis_insert
code: lemma Indep.closure_eq_setOf_basis_insert (hI : M.Indep I) :
    M.closure I = {x | M.Basis I (insert x I)} 
goal: M.closure I = {x | M.Basis I (insert x I)}

full_name: Matroid.Indep.insert_basis_iff_mem_closure
code: lemma Indep.insert_basis_iff_mem_closure (hI : M.Indep I) :
    M.Basis I (insert e I) ↔ e ∈ M.closure I 
goal: M.Basis I (insert e I) ↔ e ∈ M.closure I

full_name: Matroid.Indep.basis_closure
code: lemma Indep.basis_closure (hI : M.Indep I) : M.Basis I (M.closure I) 
goal: M.Basis I (M.closure I)

full_name: Matroid.Basis.closure_eq_closure
code: lemma Basis.closure_eq_closure (h : M.Basis I X) : M.closure I = M.closure X 
goal: M.closure I = M.closure X

full_name: Matroid.Basis.closure_eq_right
code: lemma Basis.closure_eq_right (h : M.Basis I (M.closure X)) : M.closure I = M.closure X 
goal: M.closure I = M.closure X

full_name: Matroid.Basis'.closure_eq_closure
code: lemma Basis'.closure_eq_closure (h : M.Basis' I X) : M.closure I = M.closure X 
goal: M.closure I = M.closure X

full_name: Matroid.Basis.subset_closure
code: lemma Basis.subset_closure (h : M.Basis I X) : X ⊆ M.closure I 
goal: X ⊆ M.closure I

full_name: Matroid.Basis'.basis_closure_right
code: lemma Basis'.basis_closure_right (h : M.Basis' I X) : M.Basis I (M.closure X) 
goal: M.Basis I (M.closure X)

full_name: Matroid.Basis.basis_closure_right
code: lemma Basis.basis_closure_right (h : M.Basis I X) : M.Basis I (M.closure X) 
goal: M.Basis I (M.closure X)

full_name: Matroid.Indep.mem_closure_iff
code: lemma Indep.mem_closure_iff (hI : M.Indep I) :
    x ∈ M.closure I ↔ M.Dep (insert x I) ∨ x ∈ I 
goal: x ∈ M.closure I ↔ M.Dep (insert x I) ∨ x ∈ I

full_name: Matroid.Indep.mem_closure_iff'
code: lemma Indep.mem_closure_iff' (hI : M.Indep I) :
    x ∈ M.closure I ↔ x ∈ M.E ∧ (M.Indep (insert x I) → x ∈ I) 
goal: x ∈ M.closure I ↔ x ∈ M.E ∧ (M.Indep (insert x I) → x ∈ I)

full_name: Matroid.Indep.insert_dep_iff
code: lemma Indep.insert_dep_iff (hI : M.Indep I) : M.Dep (insert e I) ↔ e ∈ M.closure I \ I 
goal: M.Dep (insert e I) ↔ e ∈ M.closure I \ I

full_name: Matroid.Indep.mem_closure_iff_of_not_mem
code: lemma Indep.mem_closure_iff_of_not_mem (hI : M.Indep I) (heI : e ∉ I) :
    e ∈ M.closure I ↔ M.Dep (insert e I) 
goal: e ∈ M.closure I ↔ M.Dep (insert e I)

full_name: Matroid.Indep.not_mem_closure_iff
code: lemma Indep.not_mem_closure_iff (hI : M.Indep I) (he : e ∈ M.E := by aesop_mat) :
    e ∉ M.closure I ↔ M.Indep (insert e I) ∧ e ∉ I 
goal: e ∉ M.closure I ↔ M.Indep (insert e I) ∧ e ∉ I

full_name: Matroid.Indep.not_mem_closure_iff_of_not_mem
code: lemma Indep.not_mem_closure_iff_of_not_mem (hI : M.Indep I) (heI : e ∉ I)
    (he : e ∈ M.E := by aesop_mat) : e ∉ M.closure I ↔ M.Indep (insert e I) 
goal: e ∉ M.closure I ↔ M.Indep (insert e I)

full_name: Matroid.Indep.insert_indep_iff_of_not_mem
code: lemma Indep.insert_indep_iff_of_not_mem (hI : M.Indep I) (heI : e ∉ I) :
    M.Indep (insert e I) ↔ e ∈ M.E \ M.closure I 
goal: M.Indep (insert e I) ↔ e ∈ M.E \ M.closure I

full_name: Matroid.Indep.insert_indep_iff
code: lemma Indep.insert_indep_iff (hI : M.Indep I) :
    M.Indep (insert e I) ↔ e ∈ M.E \ M.closure I ∨ e ∈ I 
goal: M.Indep (insert e I) ↔ e ∈ M.E \ M.closure I ∨ e ∈ I

full_name: Matroid.insert_indep_iff
code: lemma insert_indep_iff : M.Indep (insert e I) ↔ M.Indep I ∧ (e ∉ I → e ∈ M.E \ M.closure I) 
goal: M.Indep (insert e I) ↔ M.Indep I ∧ (e ∉ I → e ∈ M.E \ M.closure I)

full_name: Matroid.Indep.insert_diff_indep_iff
code: /-- This can be used for rewriting if the LHS is inside a binder and whether `f = e` is unknown.-/
lemma Indep.insert_diff_indep_iff (hI : M.Indep (I \ {e})) (heI : e ∈ I) :
    M.Indep (insert f I \ {e}) ↔ f ∈ M.E \ M.closure (I \ {e}) ∨ f ∈ I 
goal: M.Indep (insert f I \ {e}) ↔ f ∈ M.E \ M.closure (I \ {e}) ∨ f ∈ I

full_name: Matroid.Indep.basis_of_subset_of_subset_closure
code: lemma Indep.basis_of_subset_of_subset_closure (hI : M.Indep I) (hIX : I ⊆ X)
    (hXI : X ⊆ M.closure I) : M.Basis I X 
goal: M.Basis I X

full_name: Matroid.basis_iff_indep_subset_closure
code: lemma basis_iff_indep_subset_closure : M.Basis I X ↔ M.Indep I ∧ I ⊆ X ∧ X ⊆ M.closure I 
goal: M.Basis I X ↔ M.Indep I ∧ I ⊆ X ∧ X ⊆ M.closure I

full_name: Matroid.Indep.base_of_ground_subset_closure
code: lemma Indep.base_of_ground_subset_closure (hI : M.Indep I) (h : M.E ⊆ M.closure I) : M.Base I 
goal: M.Base I

full_name: Matroid.Base.closure_eq
code: lemma Base.closure_eq (hB : M.Base B) : M.closure B = M.E 
goal: M.closure B = M.E

full_name: Matroid.Base.closure_of_superset
code: lemma Base.closure_of_superset (hB : M.Base B) (hBX : B ⊆ X) : M.closure X = M.E 
goal: M.closure X = M.E

full_name: Matroid.base_iff_indep_closure_eq
code: lemma base_iff_indep_closure_eq : M.Base B ↔ M.Indep B ∧ M.closure B = M.E 
goal: M.Base B ↔ M.Indep B ∧ M.closure B = M.E

full_name: Matroid.Indep.base_iff_ground_subset_closure
code: lemma Indep.base_iff_ground_subset_closure (hI : M.Indep I) : M.Base I ↔ M.E ⊆ M.closure I 
goal: M.Base I ↔ M.E ⊆ M.closure I

full_name: Matroid.Indep.closure_inter_eq_self_of_subset
code: lemma Indep.closure_inter_eq_self_of_subset (hI : M.Indep I) (hJI : J ⊆ I) :
    M.closure J ∩ I = J 
goal: M.closure J ∩ I = J

full_name: Matroid.Indep.closure_sInter_eq_biInter_closure_of_forall_subset
code: /-- For a nonempty collection of subsets of a given independent set,
the closure of the intersection is the intersection of the closure. -/
lemma Indep.closure_sInter_eq_biInter_closure_of_forall_subset {Js : Set (Set α)} (hI : M.Indep I)
    (hne : Js.Nonempty) (hIs : ∀ J ∈ Js, J ⊆ I) : M.closure (⋂₀ Js) = (⋂ J ∈ Js, M.closure J)  
goal: M.closure (⋂₀ Js) = ⋂ J ∈ Js, M.closure J

full_name: Matroid.closure_iInter_eq_iInter_closure_of_iUnion_indep
code: lemma closure_iInter_eq_iInter_closure_of_iUnion_indep [hι : Nonempty ι] (Is : ι → Set α)
    (h : M.Indep (⋃ i, Is i)) : M.closure (⋂ i, Is i) = (⋂ i, M.closure (Is i)) 
goal: M.closure (⋂ i, Is i) = ⋂ i, M.closure (Is i)

full_name: Matroid.closure_sInter_eq_biInter_closure_of_sUnion_indep
code: lemma closure_sInter_eq_biInter_closure_of_sUnion_indep (Is : Set (Set α)) (hIs : Is.Nonempty)
    (h : M.Indep (⋃₀ Is)) :  M.closure (⋂₀ Is) = (⋂ I ∈ Is, M.closure I) 
goal: M.closure (⋂₀ Is) = ⋂ I ∈ Is, M.closure I

full_name: Matroid.closure_biInter_eq_biInter_closure_of_biUnion_indep
code: lemma closure_biInter_eq_biInter_closure_of_biUnion_indep {ι : Type*} {A : Set ι} (hA : A.Nonempty)
    {I : ι → Set α} (h : M.Indep (⋃ i ∈ A, I i)) :
    M.closure (⋂ i ∈ A, I i) = ⋂ i ∈ A, M.closure (I i) 
goal: M.closure (⋂ i ∈ A, I i) = ⋂ i ∈ A, M.closure (I i)

full_name: Matroid.Indep.closure_iInter_eq_biInter_closure_of_forall_subset
code: lemma Indep.closure_iInter_eq_biInter_closure_of_forall_subset [hι : Nonempty ι] {Js : ι → Set α}
    (hI : M.Indep I) (hJs : ∀ i, Js i ⊆ I) : M.closure (⋂ i, Js i) = ⋂ i, M.closure (Js i) 
goal: M.closure (⋂ i, Js i) = ⋂ i, M.closure (Js i)

full_name: Matroid.Indep.closure_inter_eq_inter_closure
code: lemma Indep.closure_inter_eq_inter_closure (h : M.Indep (I ∪ J)) :
    M.closure (I ∩ J) = M.closure I ∩ M.closure J 
goal: M.closure (I ∩ J) = M.closure I ∩ M.closure J

full_name: Matroid.basis_iff_basis_closure_of_subset
code: lemma basis_iff_basis_closure_of_subset (hIX : I ⊆ X) (hX : X ⊆ M.E := by aesop_mat) :
    M.Basis I X ↔ M.Basis I (M.closure X) 
goal: M.Basis I X ↔ M.Basis I (M.closure X)

full_name: Matroid.basis_iff_basis_closure_of_subset'
code: lemma basis_iff_basis_closure_of_subset' (hIX : I ⊆ X) :
    M.Basis I X ↔ M.Basis I (M.closure X) ∧ X ⊆ M.E 
goal: M.Basis I X ↔ M.Basis I (M.closure X) ∧ X ⊆ M.E

full_name: Matroid.basis'_iff_basis_closure
code: lemma basis'_iff_basis_closure : M.Basis' I X ↔ M.Basis I (M.closure X) ∧ I ⊆ X 
goal: M.Basis' I X ↔ M.Basis I (M.closure X) ∧ I ⊆ X

full_name: Matroid.exists_basis_inter_ground_basis_closure
code: lemma exists_basis_inter_ground_basis_closure (M : Matroid α) (X : Set α) :
    ∃ I, M.Basis I (X ∩ M.E) ∧ M.Basis I (M.closure X) 
goal: ∃ I, M.Basis I (X ∩ M.E) ∧ M.Basis I (M.closure X)

full_name: Matroid.Basis.basis_of_closure_eq_closure
code: lemma Basis.basis_of_closure_eq_closure (hI : M.Basis I X) (hY : I ⊆ Y)
    (h : M.closure X = M.closure Y) (hYE : Y ⊆ M.E := by aesop_mat) : M.Basis I Y 
goal: M.Basis I Y

full_name: Matroid.basis_union_iff_indep_closure
code: lemma basis_union_iff_indep_closure : M.Basis I (I ∪ X) ↔ M.Indep I ∧ X ⊆ M.closure I 
goal: M.Basis I (I ∪ X) ↔ M.Indep I ∧ X ⊆ M.closure I

full_name: Matroid.basis_iff_indep_closure
code: lemma basis_iff_indep_closure : M.Basis I X ↔ M.Indep I ∧ X ⊆ M.closure I ∧ I ⊆ X 
goal: M.Basis I X ↔ M.Indep I ∧ X ⊆ M.closure I ∧ I ⊆ X

full_name: Matroid.Basis.eq_of_closure_subset
code: lemma Basis.eq_of_closure_subset (hI : M.Basis I X) (hJI : J ⊆ I) (hJ : X ⊆ M.closure J) :
    J = I 
goal: J = I

full_name: Matroid.empty_basis_iff
code: @[simp] lemma empty_basis_iff : M.Basis ∅ X ↔ X ⊆ M.closure ∅ 
goal: M.Basis ∅ X ↔ X ⊆ M.closure ∅