Documentation

Mathlib.Order.SupIndep

Supremum independence #

In this file, we define supremum independence of indexed sets. An indexed family f : ι → α is sup-independent if, for all a, f a and the supremum of the rest are disjoint.

Main definitions #

Main statements #

Implementation notes #

For the finite version, we avoid the "obvious" definition ∀ i ∈ s, Disjoint (f i) ((s.erase i).sup f) because erase would require decidable equality on ι.

On lattices with a bottom element, via Finset.sup #

def Finset.SupIndep {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] (s : Finset ι) (f : ι → α) :

Supremum independence of finite sets. We avoid the "obvious" definition using s.erase i because erase would require decidable equality on ι.

Equations
Instances For
    theorem Finset.supIndep_iff_disjoint_erase {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s : Finset ι} {f : ι → α} [DecidableEq ι] :
    s.SupIndep f ↔ ∀ i ∈ s, Disjoint (f i) ((s.erase i).sup f)

    The RHS looks like the definition of iSupIndep.

    instance Finset.instDecidableSupIndepOfDecidableEq {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s : Finset ι} {f : ι → α} [DecidableEq ι] [DecidableEq α] :

    If both the index type and the lattice have decidable equality, then the SupIndep predicate is decidable.

    TODO: speedup the definition and drop the [DecidableEq ι] assumption by iterating over the pairs (a, t) such that s = Finset.cons a t _ using something like List.eraseIdx or by generating both f i and (s.erase i).sup f in one loop over s. Yet another possible optimization is to precompute partial suprema of f over the inits and tails of the list representing s, store them in 2 Arrays, then compute each sup in 1 operation.

    Equations
    theorem Finset.SupIndep.subset {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s t : Finset ι} {f : ι → α} (ht : t.SupIndep f) (h : s ⊆ t) :
    theorem Finset.SupIndep.mono {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s : Finset ι} {f g : ι → α} (hf : s.SupIndep f) (h : ∀ i ∈ s, g i ≤ f i) :
    @[simp]
    theorem Finset.supIndep_empty {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] (f : ι → α) :
    @[simp]
    theorem Finset.supIndep_singleton {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] (i : ι) (f : ι → α) :
    theorem Finset.SupIndep.pairwiseDisjoint {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s : Finset ι} {f : ι → α} (hs : s.SupIndep f) :
    theorem Finset.SupIndep.le_sup_iff {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s t : Finset ι} {f : ι → α} {i : ι} (hs : s.SupIndep f) (hts : t ⊆ s) (hi : i ∈ s) (hf : ∀ (i : ι), f i ≠ ⊥) :
    f i ≤ t.sup f ↔ i ∈ t
    theorem Finset.SupIndep.antitone_fun {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s : Finset ι} {f g : ι → α} (hle : ∀ x ∈ s, f x ≤ g x) (h : s.SupIndep g) :
    theorem Finset.SupIndep.image {α : Type u_1} {ι : Type u_3} {ι' : Type u_4} [Lattice α] [OrderBot α] {f : ι → α} [DecidableEq ι] {s : Finset ι'} {g : ι' → ι} (hs : s.SupIndep (f ∘ g)) :
    (image g s).SupIndep f
    theorem Finset.supIndep_map {α : Type u_1} {ι : Type u_3} {ι' : Type u_4} [Lattice α] [OrderBot α] {f : ι → α} {s : Finset ι'} {g : ι' ↪ ι} :
    (map g s).SupIndep f ↔ s.SupIndep (f ∘ ⇑g)
    @[simp]
    theorem Finset.supIndep_pair {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {f : ι → α} [DecidableEq ι] {i j : ι} (hij : i ≠ j) :
    {i, j}.SupIndep f ↔ Disjoint (f i) (f j)
    theorem Finset.supIndep_univ_bool {α : Type u_1} [Lattice α] [OrderBot α] (f : Bool → α) :
    @[simp]
    theorem Finset.supIndep_univ_fin_two {α : Type u_1} [Lattice α] [OrderBot α] (f : Fin 2 → α) :
    univ.SupIndep f ↔ Disjoint (f 0) (f 1)
    @[simp]
    theorem Finset.supIndep_attach {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s : Finset ι} {f : ι → α} :
    (s.attach.SupIndep fun (a : { x : ι // x ∈ s }) => f ↑a) ↔ s.SupIndep f
    theorem Finset.SupIndep.attach {α : Type u_1} {ι : Type u_3} [Lattice α] [OrderBot α] {s : Finset ι} {f : ι → α} :
    s.SupIndep f → s.attach.SupIndep fun (a : { x : ι // x ∈ s }) => f ↑a

    Alias of the reverse direction of Finset.supIndep_attach.

    theorem Finset.SupIndep.biUnion {α : Type u_1} {ι : Type u_3} {ι' : Type u_4} [Lattice α] [IsModularLattice α] [OrderBot α] [DecidableEq ι] {s : Finset ι'} {g : ι' → Finset ι} {f : ι → α} (hs : s.SupIndep fun (i : ι') => (g i).sup f) (hg : ∀ i' ∈ s, (g i').SupIndep f) :

    Bind operation for SupIndep.

    theorem Finset.SupIndep.sup {α : Type u_1} {ι : Type u_3} {ι' : Type u_4} [Lattice α] [IsModularLattice α] [OrderBot α] [DecidableEq ι] {s : Finset ι'} {g : ι' → Finset ι} {f : ι → α} (hs : s.SupIndep fun (i : ι') => (g i).sup f) (hg : ∀ i' ∈ s, (g i').SupIndep f) :
    (s.sup g).SupIndep f

    Bind operation for SupIndep.

    theorem Finset.SupIndep.sigma {α : Type u_1} {ι : Type u_3} [Lattice α] [IsModularLattice α] [OrderBot α] {β : ι → Type u_5} {s : Finset ι} {g : (i : ι) → Finset (β i)} {f : Sigma β → α} (hs : s.SupIndep fun (i : ι) => (g i).sup fun (b : β i) => f ⟨i, b⟩) (hg : ∀ i ∈ s, (g i).SupIndep fun (b : β i) => f ⟨i, b⟩) :
    (s.sigma g).SupIndep f

    Bind operation for SupIndep.

    theorem Finset.SupIndep.product {α : Type u_1} {ι : Type u_3} {ι' : Type u_4} [Lattice α] [IsModularLattice α] [OrderBot α] {s : Finset ι} {t : Finset ι'} {f : ι × ι' → α} (hs : s.SupIndep fun (i : ι) => t.sup fun (i' : ι') => f (i, i')) (ht : t.SupIndep fun (i' : ι') => s.sup fun (i : ι) => f (i, i')) :
    (s ×ˢ t).SupIndep f
    theorem Finset.SupIndep.disjoint_sup_sup {α : Type u_1} {ι : Type u_3} [Lattice α] [IsModularLattice α] [OrderBot α] {s : Finset ι} {f : ι → α} {u v : Finset ι} (hs : s.SupIndep f) (hu : u ⊆ s) (hv : v ⊆ s) (huv : Disjoint u v) :
    Disjoint (u.sup f) (v.sup f)
    theorem Finset.supIndep_sigma_iff' {α : Type u_1} {ι : Type u_3} [Lattice α] [IsModularLattice α] [OrderBot α] {β : ι → Type u_5} {s : Finset ι} {g : (i : ι) → Finset (β i)} {f : Sigma β → α} :
    (s.sigma g).SupIndep f ↔ (s.SupIndep fun (i : ι) => (g i).sup fun (b : β i) => f ⟨i, b⟩) ∧ ∀ i ∈ s, (g i).SupIndep fun (b : β i) => f ⟨i, b⟩
    theorem Finset.supIndep_product_iff {α : Type u_1} {ι : Type u_3} {ι' : Type u_4} [Lattice α] [IsModularLattice α] [OrderBot α] {s : Finset ι} {t : Finset ι'} {f : ι × ι' → α} :
    (s.product t).SupIndep f ↔ (s.SupIndep fun (i : ι) => t.sup fun (i' : ι') => f (i, i')) ∧ t.SupIndep fun (i' : ι') => s.sup fun (i : ι) => f (i, i')
    theorem Finset.supIndep_iff_pairwiseDisjoint {α : Type u_1} {ι : Type u_3} [DistribLattice α] [OrderBot α] {s : Finset ι} {f : ι → α} :
    theorem Set.PairwiseDisjoint.supIndep {α : Type u_1} {ι : Type u_3} [DistribLattice α] [OrderBot α] {s : Finset ι} {f : ι → α} :
    (↑s).PairwiseDisjoint f → s.SupIndep f

    Alias of the reverse direction of Finset.supIndep_iff_pairwiseDisjoint.

    On complete lattices via sSup #

    def sSupIndep {α : Type u_1} [CompleteLattice α] (s : Set α) :

    An independent set of elements in a complete lattice is one in which every element is disjoint from the Sup of the rest.

    Equations
    Instances For
      @[simp]
      theorem sSupIndep.mono {α : Type u_1} [CompleteLattice α] {s : Set α} (hs : sSupIndep s) {t : Set α} (hst : t ⊆ s) :
      theorem sSupIndep.pairwiseDisjoint {α : Type u_1} [CompleteLattice α] {s : Set α} (hs : sSupIndep s) :

      If the elements of a set are independent, then any pair within that set is disjoint.

      theorem sSupIndep_singleton {α : Type u_1} [CompleteLattice α] (a : α) :
      theorem sSupIndep_pair {α : Type u_1} [CompleteLattice α] {a b : α} (hab : a ≠ b) :
      theorem sSupIndep.disjoint_sSup {α : Type u_1} [CompleteLattice α] {s : Set α} (hs : sSupIndep s) {x : α} {y : Set α} (hx : x ∈ s) (hy : y ⊆ s) (hxy : x ∉ y) :

      If the elements of a set are independent, then any element is disjoint from the sSup of some subset of the rest.

      def iSupIndep {ι : Sort u_5} {α : Type u_6} [CompleteLattice α] (t : ι → α) :

      An independent indexed family of elements in a complete lattice is one in which every element is disjoint from the iSup of the rest.

      Example: an indexed family of non-zero elements in a vector space is linearly independent iff the indexed family of subspaces they generate is independent in this sense.

      Example: an indexed family of submodules of a module is independent in this sense if and only the natural map from the direct sum of the submodules to the module is injective.

      Equations
      Instances For
        theorem iSupIndep_def {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} :
        iSupIndep t ↔ ∀ (i : ι), Disjoint (t i) (⨆ (j : ι), ⨆ (_ : j ≠ i), t j)
        theorem iSupIndep_def' {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} :
        iSupIndep t ↔ ∀ (i : ι), Disjoint (t i) (sSup (t '' {j : ι | j ≠ i}))
        theorem iSupIndep_def'' {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} :
        iSupIndep t ↔ ∀ (i : ι), Disjoint (t i) (sSup {a : α | ∃ (j : ι), j ≠ i ∧ t j = a})
        @[simp]
        theorem iSupIndep_subsingleton {α : Type u_1} {ι : Type u_3} [CompleteLattice α] [Subsingleton ι] (t : ι → α) :
        @[deprecated "use iSupIndep_subsingleton instead" (since := "2025-09-18")]
        theorem iSupIndep_empty {α : Type u_1} [CompleteLattice α] (t : Empty → α) :
        @[deprecated "use iSupIndep_subsingleton instead" (since := "2025-09-18")]
        theorem iSupIndep_pempty {α : Type u_1} [CompleteLattice α] (t : PEmpty.{u_5} → α) :
        theorem iSupIndep.pairwiseDisjoint {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} (ht : iSupIndep t) :

        If the elements of a set are independent, then any pair within that set is disjoint.

        theorem iSupIndep.mono {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {s t : ι → α} (hs : iSupIndep s) (hst : t ≤ s) :
        theorem iSupIndep.comp {α : Type u_1} [CompleteLattice α] {ι : Sort u_5} {ι' : Sort u_6} {t : ι → α} {f : ι' → ι} (ht : iSupIndep t) (hf : Function.Injective f) :

        Composing an independent indexed family with an injective function on the index results in another independent indexed family.

        theorem iSupIndep.comp' {α : Type u_1} [CompleteLattice α] {ι : Sort u_5} {ι' : Sort u_6} {t : ι → α} {f : ι' → ι} (ht : iSupIndep (t ∘ f)) (hf : Function.Surjective f) :
        theorem iSupIndep.sSupIndep_range {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} (ht : iSupIndep t) :
        @[simp]
        theorem iSupIndep_ne_bot {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} :
        (iSupIndep fun (i : { i : ι // t i ≠ ⊥ }) => t ↑i) ↔ iSupIndep t
        theorem iSupIndep.injOn {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} (ht : iSupIndep t) :
        Set.InjOn t {i : ι | t i ≠ ⊥}
        theorem iSupIndep.injOn_iInf {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {β : ι → Type u_5} (t : (i : ι) → β i → α) (ht : ∀ (i : ι), iSupIndep (t i)) :
        Set.InjOn (fun (b : (i : ι) → β i) => ⨅ (i : ι), t i (b i)) {b : (i : ι) → β i | ⨅ (i : ι), t i (b i) ≠ ⊥}
        theorem iSupIndep.injective {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} (ht : iSupIndep t) (h_ne_bot : ∀ (i : ι), t i ≠ ⊥) :
        theorem iSupIndep_pair {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {t : ι → α} {i j : ι} (hij : i ≠ j) (huniv : ∀ (k : ι), k = i ∨ k = j) :
        iSupIndep t ↔ Disjoint (t i) (t j)
        theorem iSupIndep.map_orderIso {ι : Sort u_5} {α : Type u_6} {β : Type u_7} [CompleteLattice α] [CompleteLattice β] (f : α ≃o β) {a : ι → α} (ha : iSupIndep a) :
        iSupIndep (⇑f ∘ a)

        Composing an independent indexed family with an order isomorphism on the elements results in another independent indexed family.

        @[simp]
        theorem iSupIndep_map_orderIso_iff {ι : Sort u_5} {α : Type u_6} {β : Type u_7} [CompleteLattice α] [CompleteLattice β] (f : α ≃o β) {a : ι → α} :
        theorem iSupIndep.disjoint_biSup {ι : Type u_5} {α : Type u_6} [CompleteLattice α] {t : ι → α} (ht : iSupIndep t) {x : ι} {y : Set ι} (hx : x ∉ y) :
        Disjoint (t x) (⨆ i ∈ y, t i)

        If the elements of a set are independent, then any element is disjoint from the iSup of some subset of the rest.

        theorem iSupIndep.of_coe_Iic_comp {α : Type u_1} [CompleteLattice α] {ι : Sort u_5} {a : α} {t : ι → ↑(Set.Iic a)} (ht : iSupIndep (Subtype.val ∘ t)) :
        theorem iSupIndep_iff_supIndep {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {s : Finset ι} {f : ι → α} :
        theorem Finset.SupIndep.independent {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {s : Finset ι} {f : ι → α} :

        Alias of the reverse direction of iSupIndep_iff_supIndep.

        theorem iSupIndep.supIndep {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {s : Finset ι} {f : ι → α} :

        Alias of the forward direction of iSupIndep_iff_supIndep.

        theorem iSupIndep.supIndep' {α : Type u_1} {ι : Type u_3} [CompleteLattice α] {f : ι → α} (s : Finset ι) (h : iSupIndep f) :
        theorem iSupIndep.sup_indep_univ {α : Type u_1} {ι : Type u_3} [CompleteLattice α] [Fintype ι] {f : ι → α} :

        Alias of the forward direction of iSupIndep_iff_supIndep_univ.


        A variant of CompleteLattice.iSupIndep_iff_supIndep for Fintypes.

        theorem Finset.SupIndep.iSupIndep_of_univ {α : Type u_1} {ι : Type u_3} [CompleteLattice α] [Fintype ι] {f : ι → α} :

        Alias of the reverse direction of iSupIndep_iff_supIndep_univ.


        A variant of CompleteLattice.iSupIndep_iff_supIndep for Fintypes.

        Alias of the reverse direction of sSupIndep_iff_pairwiseDisjoint.

        theorem iSupIndep_iff_pairwiseDisjoint {α : Type u_1} {ι : Type u_3} [Order.Frame α] {f : ι → α} :