File: Mathlib/Data/Matroid/Restrict.lean

full_name: Matroid.restrictIndepMatroid
code: /-- The `IndepMatroid` whose independent sets are the independent subsets of `R`. -/
@[simps] def restrictIndepMatroid (M : Matroid α) (R : Set α) : IndepMatroid α 
goal: IndepMatroid α

full_name: Matroid.restrictIndepMatroid_Indep
code: /-- The `IndepMatroid` whose independent sets are the independent subsets of `R`. -/
@[simps] def restrictIndepMatroid (M : Matroid α) (R : Set α) : IndepMatroid α 
goal: (M.restrictIndepMatroid R).Indep I = (M.Indep I ∧ I ⊆ R)

full_name: Matroid.restrictIndepMatroid_E
code: /-- The `IndepMatroid` whose independent sets are the independent subsets of `R`. -/
@[simps] def restrictIndepMatroid (M : Matroid α) (R : Set α) : IndepMatroid α 
goal: (M.restrictIndepMatroid R).E = R

full_name: Matroid.restrict
code: /-- Change the ground set of a matroid to some `R : Set α`. The independent sets of the restriction
  are the independent subsets of the new ground set. Most commonly used when `R ⊆ M.E`,
  but it is convenient not to require this. The elements of `R \ M.E` become 'loops'.  -/
def restrict (M : Matroid α) (R : Set α) : Matroid α 
goal: Matroid α

full_name: Matroid.«_aux_Mathlib_Data_Matroid_Restrict___macroRules_Matroid_term_↾__1»
code: /-- `M ↾ R` means `M.restrict R`. -/
scoped infixl:65  " ↾ " => Matroid.restrict
goal: Lean.Macro

full_name: Matroid._aux_Mathlib_Data_Matroid_Restrict___unexpand_Matroid_restrict_1
code: /-- `M ↾ R` means `M.restrict R`. -/
scoped infixl:65  " ↾ " => Matroid.restrict
goal: Lean.PrettyPrinter.Unexpander

full_name: Matroid.restrict_indep_iff
code: @[simp] theorem restrict_indep_iff : (M ↾ R).Indep I ↔ M.Indep I ∧ I ⊆ R 
goal: (M.restrict R).Indep I ↔ M.Indep I ∧ I ⊆ R

full_name: Matroid.Indep.indep_restrict_of_subset
code: theorem Indep.indep_restrict_of_subset (h : M.Indep I) (hIR : I ⊆ R) : (M ↾ R).Indep I 
goal: (M.restrict R).Indep I

full_name: Matroid.Indep.of_restrict
code: theorem Indep.of_restrict (hI : (M ↾ R).Indep I) : M.Indep I 
goal: M.Indep I

full_name: Matroid.restrict_ground_eq
code: @[simp] theorem restrict_ground_eq : (M ↾ R).E = R 
goal: (M.restrict R).E = R

full_name: Matroid.restrict_finite
code: theorem restrict_finite {R : Set α} (hR : R.Finite) : (M ↾ R).Finite 
goal: (M.restrict R).Finite

full_name: Matroid.restrict_dep_iff
code: @[simp] theorem restrict_dep_iff : (M ↾ R).Dep X ↔ ¬ M.Indep X ∧ X ⊆ R 
goal: (M.restrict R).Dep X ↔ ¬M.Indep X ∧ X ⊆ R

full_name: Matroid.restrict_ground_eq_self
code: @[simp] theorem restrict_ground_eq_self (M : Matroid α) : (M ↾ M.E) = M 
goal: M.restrict M.E = M

full_name: Matroid.restrict_restrict_eq
code: theorem restrict_restrict_eq {R₁ R₂ : Set α} (M : Matroid α) (hR : R₂ ⊆ R₁) :
    (M ↾ R₁) ↾ R₂ = M ↾ R₂ 
goal: (M.restrict R₁).restrict R₂ = M.restrict R₂

full_name: Matroid.restrict_idem
code: @[simp] theorem restrict_idem (M : Matroid α) (R : Set α) : M ↾ R ↾ R = M ↾ R 
goal: (M.restrict R).restrict R = M.restrict R

full_name: Matroid.base_restrict_iff
code: @[simp] theorem base_restrict_iff (hX : X ⊆ M.E := by aesop_mat) :
    (M ↾ X).Base I ↔ M.Basis I X 
goal: (M.restrict X).Base I ↔ M.Basis I X

full_name: Matroid.base_restrict_iff'
code: theorem base_restrict_iff' : (M ↾ X).Base I ↔ M.Basis' I X 
goal: (M.restrict X).Base I ↔ M.Basis' I X

full_name: Matroid.Basis.restrict_base
code: theorem Basis.restrict_base (h : M.Basis I X) : (M ↾ X).Base I 
goal: (M.restrict X).Base I

full_name: Matroid.restrict_finiteRk
code: instance restrict_finiteRk [M.FiniteRk] (R : Set α) : (M ↾ R).FiniteRk 
goal: (M.restrict R).FiniteRk

full_name: Matroid.restrict_finitary
code: instance restrict_finitary [Finitary M] (R : Set α) : Finitary (M ↾ R) 
goal: (M.restrict R).Finitary

full_name: Matroid.Basis.base_restrict
code: @[simp] theorem Basis.base_restrict (h : M.Basis I X) : (M ↾ X).Base I 
goal: (M.restrict X).Base I

full_name: Matroid.Basis.basis_restrict_of_subset
code: theorem Basis.basis_restrict_of_subset (hI : M.Basis I X) (hXY : X ⊆ Y) : (M ↾ Y).Basis I X 
goal: (M.restrict Y).Basis I X

full_name: Matroid.basis'_restrict_iff
code: theorem basis'_restrict_iff : (M ↾ R).Basis' I X ↔ M.Basis' I (X ∩ R) ∧ I ⊆ R 
goal: (M.restrict R).Basis' I X ↔ M.Basis' I (X ∩ R) ∧ I ⊆ R

full_name: Matroid.basis_restrict_iff'
code: theorem basis_restrict_iff' : (M ↾ R).Basis I X ↔ M.Basis I (X ∩ M.E) ∧ X ⊆ R 
goal: (M.restrict R).Basis I X ↔ M.Basis I (X ∩ M.E) ∧ X ⊆ R

full_name: Matroid.basis_restrict_iff
code: theorem basis_restrict_iff (hR : R ⊆ M.E := by aesop_mat) :
    (M ↾ R).Basis I X ↔ M.Basis I X ∧ X ⊆ R 
goal: (M.restrict R).Basis I X ↔ M.Basis I X ∧ X ⊆ R

full_name: Matroid.restrict_eq_restrict_iff
code: theorem restrict_eq_restrict_iff (M M' : Matroid α) (X : Set α) :
    M ↾ X = M' ↾ X ↔ ∀ I, I ⊆ X → (M.Indep I ↔ M'.Indep I) 
goal: M.restrict X = M'.restrict X ↔ ∀ I ⊆ X, M.Indep I ↔ M'.Indep I

full_name: Matroid.restrict_eq_self_iff
code: @[simp] theorem restrict_eq_self_iff : M ↾ R = M ↔ R = M.E 
goal: M.restrict R = M ↔ R = M.E

full_name: Matroid.Restriction
code: /-- `Restriction N M` means that `N = M ↾ R` for some subset `R` of `M.E` -/
def Restriction (N M : Matroid α) : Prop 
goal: Prop

full_name: Matroid.StrictRestriction
code: /-- `StrictRestriction N M` means that `N = M ↾ R` for some strict subset `R` of `M.E` -/
def StrictRestriction (N M : Matroid α) : Prop 
goal: Prop

full_name: Matroid._aux_Mathlib_Data_Matroid_Restrict___unexpand_Matroid_Restriction_1
code: /-- `N ≤r M` means that `N` is a `Restriction` of `M`. -/
scoped infix:50  " ≤r " => Restriction
goal: Lean.PrettyPrinter.Unexpander

full_name: Matroid.«_aux_Mathlib_Data_Matroid_Restrict___macroRules_Matroid_term_≤r__1»
code: /-- `N ≤r M` means that `N` is a `Restriction` of `M`. -/
scoped infix:50  " ≤r " => Restriction
goal: Lean.Macro

full_name: Matroid.«_aux_Mathlib_Data_Matroid_Restrict___macroRules_Matroid_term_<r__1»
code: /-- `N <r M` means that `N` is a `StrictRestriction` of `M`. -/
scoped infix:50  " <r " => StrictRestriction
goal: Lean.Macro

full_name: Matroid._aux_Mathlib_Data_Matroid_Restrict___unexpand_Matroid_StrictRestriction_1
code: /-- `N <r M` means that `N` is a `StrictRestriction` of `M`. -/
scoped infix:50  " <r " => StrictRestriction
goal: Lean.PrettyPrinter.Unexpander

full_name: Matroid.Matroidᵣ.toMatroid
code: /-- A type synonym for matroids with the restriction order.
  (The `PartialOrder` on `Matroid α` is reserved for the minor order)  -/
@[ext] structure Matroidᵣ (α : Type*) where ofMatroid ::
  /-- The underlying `Matroid`.-/
  toMatroid : Matroid α
goal: Matroid α

full_name: Matroid.Matroidᵣ
code: /-- A type synonym for matroids with the restriction order.
  (The `PartialOrder` on `Matroid α` is reserved for the minor order)  -/
@[ext] structure Matroidᵣ (α : Type*) where ofMatroid ::
  /-- The underlying `Matroid`.-/
  toMatroid : Matroid α
goal: Type u_2

full_name: Matroid.Matroidᵣ.ofMatroid
code: /-- A type synonym for matroids with the restriction order.
  (The `PartialOrder` on `Matroid α` is reserved for the minor order)  -/
@[ext] structure Matroidᵣ (α : Type*) where ofMatroid ::
  /-- The underlying `Matroid`.-/
  toMatroid : Matroid α
goal: Matroid.Matroidᵣ α

full_name: Matroid.instCoeOutMatroidᵣ
code: instance {α : Type*} : CoeOut (Matroidᵣ α) (Matroid α) 
goal: CoeOut (Matroid.Matroidᵣ α) (Matroid α)

full_name: Matroid.Matroidᵣ.coe_inj
code: @[simp] theorem Matroidᵣ.coe_inj {M₁ M₂ : Matroidᵣ α} :
    (M₁ : Matroid α) = (M₂ : Matroid α) ↔ M₁ = M₂ 
goal: M₁.toMatroid = M₂.toMatroid ↔ M₁ = M₂

full_name: Matroid.instPartialOrderMatroidᵣ
code: instance {α : Type*} : PartialOrder (Matroidᵣ α) 
goal: PartialOrder (Matroid.Matroidᵣ α)

full_name: Matroid.Matroidᵣ.le_iff
code: @[simp] protected theorem Matroidᵣ.le_iff {M M' : Matroidᵣ α} :
    M ≤ M' ↔ (M : Matroid α) ≤r (M' : Matroid α) 
goal: M ≤ M' ↔ M.toMatroid.Restriction M'.toMatroid

full_name: Matroid.Matroidᵣ.lt_iff
code: @[simp] protected theorem Matroidᵣ.lt_iff {M M' : Matroidᵣ α} :
    M < M' ↔ (M : Matroid α) <r (M' : Matroid α) 
goal: M < M' ↔ M.toMatroid.StrictRestriction M'.toMatroid

full_name: Matroid.ofMatroid_le_iff
code: theorem ofMatroid_le_iff {M M' : Matroid α} :
    Matroidᵣ.ofMatroid M ≤ Matroidᵣ.ofMatroid M' ↔ M ≤r M' 
goal: { toMatroid := M } ≤ { toMatroid := M' } ↔ M.Restriction M'

full_name: Matroid.ofMatroid_lt_iff
code: theorem ofMatroid_lt_iff {M M' : Matroid α} :
    Matroidᵣ.ofMatroid M < Matroidᵣ.ofMatroid M' ↔ M <r M' 
goal: { toMatroid := M } < { toMatroid := M' } ↔ M.StrictRestriction M'

full_name: Matroid.Restriction.refl
code: theorem Restriction.refl : M ≤r M 
goal: M.Restriction M

full_name: Matroid.Restriction.antisymm
code: theorem Restriction.antisymm {M' : Matroid α} (h : M ≤r M') (h' : M' ≤r M) : M = M' 
goal: M = M'

full_name: Matroid.Restriction.trans
code: theorem Restriction.trans {M₁ M₂ M₃ : Matroid α} (h : M₁ ≤r M₂) (h' : M₂ ≤r M₃) : M₁ ≤r M₃ 
goal: M₁.Restriction M₃

full_name: Matroid.restrict_restriction
code: theorem restrict_restriction (M : Matroid α) (R : Set α) (hR : R ⊆ M.E := by aesop_mat) :
    M ↾ R ≤r M 
goal: (M.restrict R).Restriction M

full_name: Matroid.Restriction.eq_restrict
code: theorem Restriction.eq_restrict (h : N ≤r M) : M ↾ N.E = N 
goal: M.restrict N.E = N

full_name: Matroid.Restriction.subset
code: theorem Restriction.subset (h : N ≤r M) : N.E ⊆ M.E 
goal: N.E ⊆ M.E

full_name: Matroid.Restriction.exists_eq_restrict
code: theorem Restriction.exists_eq_restrict (h : N ≤r M) : ∃ R ⊆ M.E, N = M ↾ R 
goal: ∃ R ⊆ M.E, N = M.restrict R

full_name: Matroid.Restriction.of_subset
code: theorem Restriction.of_subset {R' : Set α} (M : Matroid α) (h : R ⊆ R') : (M ↾ R) ≤r (M ↾ R') 
goal: (M.restrict R).Restriction (M.restrict R')

full_name: Matroid.restriction_iff_exists
code: theorem restriction_iff_exists : (N ≤r M) ↔ ∃ R, R ⊆ M.E ∧ N = M ↾ R 
goal: N.Restriction M ↔ ∃ R ⊆ M.E, N = M.restrict R

full_name: Matroid.StrictRestriction.restriction
code: theorem StrictRestriction.restriction (h : N <r M) : N ≤r M 
goal: N.Restriction M

full_name: Matroid.StrictRestriction.ne
code: theorem StrictRestriction.ne (h : N <r M) : N ≠ M 
goal: N ≠ M

full_name: Matroid.StrictRestriction.irrefl
code: theorem StrictRestriction.irrefl (M : Matroid α) : ¬ (M <r M) 
goal: ¬M.StrictRestriction M

full_name: Matroid.StrictRestriction.ssubset
code: theorem StrictRestriction.ssubset (h : N <r M) : N.E ⊂ M.E 
goal: N.E ⊂ M.E

full_name: Matroid.StrictRestriction.eq_restrict
code: theorem StrictRestriction.eq_restrict (h : N <r M) : M ↾ N.E = N 
goal: M.restrict N.E = N

full_name: Matroid.StrictRestriction.exists_eq_restrict
code: theorem StrictRestriction.exists_eq_restrict (h : N <r M) : ∃ R, R ⊂ M.E ∧ N = M ↾ R 
goal: ∃ R ⊂ M.E, N = M.restrict R

full_name: Matroid.Restriction.strictRestriction_of_ne
code: theorem Restriction.strictRestriction_of_ne (h : N ≤r M) (hne : N ≠ M) : N <r M 
goal: N.StrictRestriction M

full_name: Matroid.Restriction.eq_or_strictRestriction
code: theorem Restriction.eq_or_strictRestriction (h : N ≤r M) : N = M ∨ N <r M 
goal: N = M ∨ N.StrictRestriction M

full_name: Matroid.restrict_strictRestriction
code: theorem restrict_strictRestriction {M : Matroid α} (hR : R ⊂ M.E) : M ↾ R <r M 
goal: (M.restrict R).StrictRestriction M

full_name: Matroid.Restriction.strictRestriction_of_ground_ne
code: theorem Restriction.strictRestriction_of_ground_ne (h : N ≤r M) (hne : N.E ≠ M.E) : N <r M 
goal: N.StrictRestriction M

full_name: Matroid.StrictRestriction.of_ssubset
code: theorem StrictRestriction.of_ssubset {R' : Set α} (M : Matroid α) (h : R ⊂ R') :
    (M ↾ R) <r (M ↾ R') 
goal: (M.restrict R).StrictRestriction (M.restrict R')

full_name: Matroid.Restriction.finite
code: theorem Restriction.finite {M : Matroid α} [M.Finite] (h : N ≤r M) : N.Finite 
goal: N.Finite

full_name: Matroid.Restriction.finiteRk
code: theorem Restriction.finiteRk {M : Matroid α} [FiniteRk M] (h : N ≤r M) : N.FiniteRk 
goal: N.FiniteRk

full_name: Matroid.Restriction.finitary
code: theorem Restriction.finitary {M : Matroid α} [Finitary M] (h : N ≤r M) : N.Finitary 
goal: N.Finitary

full_name: Matroid.finite_setOf_restriction
code: theorem finite_setOf_restriction (M : Matroid α) [M.Finite] : {N | N ≤r M}.Finite 
goal: {N | N.Restriction M}.Finite

full_name: Matroid.Indep.of_restriction
code: theorem Indep.of_restriction (hI : N.Indep I) (hNM : N ≤r M) : M.Indep I 
goal: M.Indep I

full_name: Matroid.Indep.indep_restriction
code: theorem Indep.indep_restriction (hI : M.Indep I) (hNM : N ≤r M) (hIN : I ⊆ N.E) : N.Indep I 
goal: N.Indep I

full_name: Matroid.Basis.basis_restriction
code: theorem Basis.basis_restriction (hI : M.Basis I X) (hNM : N ≤r M) (hX : X ⊆ N.E) : N.Basis I X 
goal: N.Basis I X

full_name: Matroid.Basis.of_restriction
code: theorem Basis.of_restriction (hI : N.Basis I X) (hNM : N ≤r M) : M.Basis I X 
goal: M.Basis I X

full_name: Matroid.Base.basis_of_restriction
code: theorem Base.basis_of_restriction (hI : N.Base I) (hNM : N ≤r M) : M.Basis I N.E 
goal: M.Basis I N.E

full_name: Matroid.Dep.of_restriction
code: theorem Dep.of_restriction (hX : N.Dep X) (hNM : N ≤r M) : M.Dep X 
goal: M.Dep X

full_name: Matroid.Dep.dep_restriction
code: theorem Dep.dep_restriction (hX : M.Dep X) (hNM : N ≤r M) (hXE : X ⊆ N.E := by aesop_mat) :
    N.Dep X 
goal: N.Dep X

full_name: Matroid.Basis.transfer
code: theorem Basis.transfer (hIX : M.Basis I X) (hJX : M.Basis J X) (hXY : X ⊆ Y) (hJY : M.Basis J Y) :
    M.Basis I Y 
goal: M.Basis I Y

full_name: Matroid.Basis.basis_of_basis_of_subset_of_subset
code: theorem Basis.basis_of_basis_of_subset_of_subset (hI : M.Basis I X) (hJ : M.Basis J Y) (hJX : J ⊆ X)
    (hIY : I ⊆ Y) : M.Basis I Y 
goal: M.Basis I Y

full_name: Matroid.Indep.exists_basis_subset_union_basis
code: theorem Indep.exists_basis_subset_union_basis (hI : M.Indep I) (hIX : I ⊆ X) (hJ : M.Basis J X) :
    ∃ I', M.Basis I' X ∧ I ⊆ I' ∧ I' ⊆ I ∪ J 
goal: ∃ I', M.Basis I' X ∧ I ⊆ I' ∧ I' ⊆ I ∪ J

full_name: Matroid.Indep.exists_insert_of_not_basis
code: theorem Indep.exists_insert_of_not_basis (hI : M.Indep I) (hIX : I ⊆ X) (hI' : ¬M.Basis I X)
    (hJ : M.Basis J X) : ∃ e ∈ J \ I, M.Indep (insert e I) 
goal: ∃ e ∈ J \ I, M.Indep (insert e I)

full_name: Matroid.Basis.base_of_base_subset
code: theorem Basis.base_of_base_subset (hIX : M.Basis I X) (hB : M.Base B) (hBX : B ⊆ X) : M.Base I 
goal: M.Base I

full_name: Matroid.Basis.exchange
code: theorem Basis.exchange (hIX : M.Basis I X) (hJX : M.Basis J X) (he : e ∈ I \ J) :
    ∃ f ∈ J \ I, M.Basis (insert f (I \ {e})) X 
goal: ∃ f ∈ J \ I, M.Basis (insert f (I \ {e})) X

full_name: Matroid.Basis.eq_exchange_of_diff_eq_singleton
code: theorem Basis.eq_exchange_of_diff_eq_singleton (hI : M.Basis I X) (hJ : M.Basis J X)
    (hIJ : I \ J = {e}) : ∃ f ∈ J \ I, J = insert f I \ {e} 
goal: ∃ f ∈ J \ I, J = insert f I \ {e}

full_name: Matroid.Basis'.encard_eq_encard
code: theorem Basis'.encard_eq_encard (hI : M.Basis' I X) (hJ : M.Basis' J X) : I.encard = J.encard 
goal: I.encard = J.encard

full_name: Matroid.Basis.encard_eq_encard
code: theorem Basis.encard_eq_encard (hI : M.Basis I X) (hJ : M.Basis J X) : I.encard = J.encard 
goal: I.encard = J.encard

full_name: Matroid.Indep.augment
code: /-- Any independent set can be extended into a larger independent set. -/
theorem Indep.augment (hI : M.Indep I) (hJ : M.Indep J) (hIJ : I.encard < J.encard) :
    ∃ e ∈ J \ I, M.Indep (insert e I) 
goal: ∃ e ∈ J \ I, M.Indep (insert e I)