Documentation

Mathlib.Data.Finset.Lattice.Fold

Lattice operations on finsets #

This file is concerned with folding binary lattice operations over finsets.

For the special case of maximum and minimum of a finset, see Max.lean.

See also Mathlib/Order/CompleteLattice/Finset.lean, which is instead concerned with how big lattice or set operations behave when indexed by a finset.

sup #

def Finset.sup {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : βα) :
α

Supremum of a finite set: sup {a, b, c} f = f a ⊔ f b ⊔ f c

Equations
Instances For
    theorem Finset.sup_def {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} :
    s.sup f = (Multiset.map f s.val).sup
    @[simp]
    theorem Finset.sup_empty {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {f : βα} :
    .sup f =
    @[simp]
    theorem Finset.sup_cons {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} {b : β} (h : bs) :
    (Finset.cons b s h).sup f = f b s.sup f
    @[simp]
    theorem Finset.sup_insert {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} [DecidableEq β] {b : β} :
    (insert b s).sup f = f b s.sup f
    @[simp]
    theorem Finset.sup_image {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [OrderBot α] [DecidableEq β] (s : Finset γ) (f : γβ) (g : βα) :
    (Finset.image f s).sup g = s.sup (g f)
    @[simp]
    theorem Finset.sup_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [OrderBot α] (s : Finset γ) (f : γ β) (g : βα) :
    (Finset.map f s).sup g = s.sup (g f)
    @[simp]
    theorem Finset.sup_singleton {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {f : βα} {b : β} :
    {b}.sup f = f b
    theorem Finset.sup_sup {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f g : βα} :
    s.sup (f g) = s.sup f s.sup g
    theorem Finset.sup_congr {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s₁ s₂ : Finset β} {f g : βα} (hs : s₁ = s₂) (hfg : as₂, f a = g a) :
    s₁.sup f = s₂.sup g
    @[simp]
    theorem map_finset_sup {F : Type u_1} {α : Type u_2} {β : Type u_3} {ι : Type u_5} [SemilatticeSup α] [OrderBot α] [SemilatticeSup β] [OrderBot β] [FunLike F α β] [SupBotHomClass F α β] (f : F) (s : Finset ι) (g : ια) :
    f (s.sup g) = s.sup (f g)
    @[simp]
    theorem Finset.sup_le_iff {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} {a : α} :
    s.sup f a bs, f b a
    theorem Finset.sup_le {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} {a : α} :
    (∀ bs, f b a)s.sup f a

    Alias of the reverse direction of Finset.sup_le_iff.

    theorem Finset.sup_const_le {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {a : α} :
    (s.sup fun (x : β) => a) a
    theorem Finset.le_sup {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} {b : β} (hb : b s) :
    f b s.sup f
    theorem Finset.isLUB_sup {α : Type u_2} [SemilatticeSup α] [OrderBot α] (s : Finset α) :
    IsLUB (↑s) (s.sup id)
    theorem Finset.le_sup_of_le {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} {a : α} {b : β} (hb : b s) (h : a f b) :
    a s.sup f
    theorem Finset.sup_union {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s₁ s₂ : Finset β} {f : βα} [DecidableEq β] :
    (s₁ s₂).sup f = s₁.sup f s₂.sup f
    @[simp]
    theorem Finset.sup_biUnion {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [OrderBot α] {f : βα} [DecidableEq β] (s : Finset γ) (t : γFinset β) :
    (s.biUnion t).sup f = s.sup fun (x : γ) => (t x).sup f
    theorem Finset.sup_const {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} (h : s.Nonempty) (c : α) :
    (s.sup fun (x : β) => c) = c
    @[simp]
    theorem Finset.sup_bot {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] (s : Finset β) :
    (s.sup fun (x : β) => ) =
    theorem Finset.sup_ite {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f g : βα} (p : βProp) [DecidablePred p] :
    (s.sup fun (i : β) => if p i then f i else g i) = (Finset.filter p s).sup f (Finset.filter (fun (i : β) => ¬p i) s).sup g
    theorem Finset.sup_mono_fun {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f g : βα} (h : bs, f b g b) :
    s.sup f s.sup g
    theorem Finset.sup_mono {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s₁ s₂ : Finset β} {f : βα} (h : s₁ s₂) :
    s₁.sup f s₂.sup f
    theorem Finset.sup_comm {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [OrderBot α] (s : Finset β) (t : Finset γ) (f : βγα) :
    (s.sup fun (b : β) => t.sup (f b)) = t.sup fun (c : γ) => s.sup fun (b : β) => f b c
    @[simp]
    theorem Finset.sup_attach {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : βα) :
    (s.attach.sup fun (x : { x : β // x s }) => f x) = s.sup f
    theorem Finset.sup_product_left {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [OrderBot α] (s : Finset β) (t : Finset γ) (f : β × γα) :
    (s ×ˢ t).sup f = s.sup fun (i : β) => t.sup fun (i' : γ) => f (i, i')

    See also Finset.product_biUnion.

    theorem Finset.sup_product_right {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [OrderBot α] (s : Finset β) (t : Finset γ) (f : β × γα) :
    (s ×ˢ t).sup f = t.sup fun (i' : γ) => s.sup fun (i : β) => f (i, i')
    @[simp]
    theorem Finset.sup_prodMap {ι : Type u_7} {κ : Type u_8} {α : Type u_9} {β : Type u_10} [SemilatticeSup α] [SemilatticeSup β] [OrderBot α] [OrderBot β] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty) (f : ια) (g : κβ) :
    (s ×ˢ t).sup (Prod.map f g) = (s.sup f, t.sup g)
    @[simp]
    theorem Finset.sup_erase_bot {α : Type u_2} [SemilatticeSup α] [OrderBot α] [DecidableEq α] (s : Finset α) :
    (s.erase ).sup id = s.sup id
    theorem Finset.sup_sdiff_right {α : Type u_7} {β : Type u_8} [GeneralizedBooleanAlgebra α] (s : Finset β) (f : βα) (a : α) :
    (s.sup fun (b : β) => f b \ a) = s.sup f \ a
    theorem Finset.comp_sup_eq_sup_comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [OrderBot α] [SemilatticeSup γ] [OrderBot γ] {s : Finset β} {f : βα} (g : αγ) (g_sup : ∀ (x y : α), g (x y) = g x g y) (bot : g = ) :
    g (s.sup f) = s.sup (g f)
    theorem Finset.sup_coe {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {P : αProp} {Pbot : P } {Psup : ∀ ⦃x y : α⦄, P xP yP (x y)} (t : Finset β) (f : β{ x : α // P x }) :
    (t.sup f) = t.sup fun (x : β) => (f x)

    Computing sup in a subtype (closed under sup) is the same as computing it in α.

    @[simp]
    theorem Finset.sup_toFinset {α : Type u_7} {β : Type u_8} [DecidableEq β] (s : Finset α) (f : αMultiset β) :
    (s.sup f).toFinset = s.sup fun (x : α) => (f x).toFinset
    theorem List.foldr_sup_eq_sup_toFinset {α : Type u_2} [SemilatticeSup α] [OrderBot α] [DecidableEq α] (l : List α) :
    List.foldr (fun (x1 x2 : α) => x1 x2) l = l.toFinset.sup id
    theorem Finset.sup_induction {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} {f : βα} {p : αProp} (hb : p ) (hp : ∀ (a₁ : α), p a₁∀ (a₂ : α), p a₂p (a₁ a₂)) (hs : bs, p (f b)) :
    p (s.sup f)
    theorem Finset.sup_le_of_le_directed {α : Type u_7} [SemilatticeSup α] [OrderBot α] (s : Set α) (hs : s.Nonempty) (hdir : DirectedOn (fun (x1 x2 : α) => x1 x2) s) (t : Finset α) :
    (∀ xt, ys, x y)xs, t.sup id x
    theorem Finset.sup_mem {α : Type u_2} [SemilatticeSup α] [OrderBot α] (s : Set α) (w₁ : s) (w₂ : xs, ys, x y s) {ι : Type u_7} (t : Finset ι) (p : ια) (h : it, p i s) :
    t.sup p s
    @[simp]
    theorem Finset.sup_eq_bot_iff {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] (f : βα) (S : Finset β) :
    S.sup f = sS, f s =
    theorem Finset.sup_eq_iSup {α : Type u_2} {β : Type u_3} [CompleteLattice β] (s : Finset α) (f : αβ) :
    s.sup f = as, f a
    theorem Finset.sup_id_eq_sSup {α : Type u_2} [CompleteLattice α] (s : Finset α) :
    s.sup id = sSup s
    theorem Finset.sup_id_set_eq_sUnion {α : Type u_2} (s : Finset (Set α)) :
    s.sup id = ⋃₀ s
    @[simp]
    theorem Finset.sup_set_eq_biUnion {α : Type u_2} {β : Type u_3} (s : Finset α) (f : αSet β) :
    s.sup f = xs, f x
    theorem Finset.sup_eq_sSup_image {α : Type u_2} {β : Type u_3} [CompleteLattice β] (s : Finset α) (f : αβ) :
    s.sup f = sSup (f '' s)

    inf #

    def Finset.inf {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : βα) :
    α

    Infimum of a finite set: inf {a, b, c} f = f a ⊓ f b ⊓ f c

    Equations
    Instances For
      theorem Finset.inf_def {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} :
      s.inf f = (Multiset.map f s.val).inf
      @[simp]
      theorem Finset.inf_empty {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {f : βα} :
      .inf f =
      @[simp]
      theorem Finset.inf_cons {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} {b : β} (h : bs) :
      (Finset.cons b s h).inf f = f b s.inf f
      @[simp]
      theorem Finset.inf_insert {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} [DecidableEq β] {b : β} :
      (insert b s).inf f = f b s.inf f
      @[simp]
      theorem Finset.inf_image {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [OrderTop α] [DecidableEq β] (s : Finset γ) (f : γβ) (g : βα) :
      (Finset.image f s).inf g = s.inf (g f)
      @[simp]
      theorem Finset.inf_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [OrderTop α] (s : Finset γ) (f : γ β) (g : βα) :
      (Finset.map f s).inf g = s.inf (g f)
      @[simp]
      theorem Finset.inf_singleton {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {f : βα} {b : β} :
      {b}.inf f = f b
      theorem Finset.inf_inf {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f g : βα} :
      s.inf (f g) = s.inf f s.inf g
      theorem Finset.inf_congr {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s₁ s₂ : Finset β} {f g : βα} (hs : s₁ = s₂) (hfg : as₂, f a = g a) :
      s₁.inf f = s₂.inf g
      @[simp]
      theorem map_finset_inf {F : Type u_1} {α : Type u_2} {β : Type u_3} {ι : Type u_5} [SemilatticeInf α] [OrderTop α] [SemilatticeInf β] [OrderTop β] [FunLike F α β] [InfTopHomClass F α β] (f : F) (s : Finset ι) (g : ια) :
      f (s.inf g) = s.inf (f g)
      @[simp]
      theorem Finset.le_inf_iff {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} {a : α} :
      a s.inf f bs, a f b
      theorem Finset.le_inf {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} {a : α} :
      (∀ bs, a f b)a s.inf f

      Alias of the reverse direction of Finset.le_inf_iff.

      theorem Finset.le_inf_const_le {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {a : α} :
      a s.inf fun (x : β) => a
      theorem Finset.inf_le {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} {b : β} (hb : b s) :
      s.inf f f b
      theorem Finset.isGLB_inf {α : Type u_2} [SemilatticeInf α] [OrderTop α] (s : Finset α) :
      IsGLB (↑s) (s.inf id)
      theorem Finset.inf_le_of_le {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} {a : α} {b : β} (hb : b s) (h : f b a) :
      s.inf f a
      theorem Finset.inf_union {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s₁ s₂ : Finset β} {f : βα} [DecidableEq β] :
      (s₁ s₂).inf f = s₁.inf f s₂.inf f
      @[simp]
      theorem Finset.inf_biUnion {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [OrderTop α] {f : βα} [DecidableEq β] (s : Finset γ) (t : γFinset β) :
      (s.biUnion t).inf f = s.inf fun (x : γ) => (t x).inf f
      theorem Finset.inf_const {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} (h : s.Nonempty) (c : α) :
      (s.inf fun (x : β) => c) = c
      @[simp]
      theorem Finset.inf_top {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] (s : Finset β) :
      (s.inf fun (x : β) => ) =
      theorem Finset.inf_ite {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f g : βα} (p : βProp) [DecidablePred p] :
      (s.inf fun (i : β) => if p i then f i else g i) = (Finset.filter p s).inf f (Finset.filter (fun (i : β) => ¬p i) s).inf g
      theorem Finset.inf_mono_fun {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f g : βα} (h : bs, f b g b) :
      s.inf f s.inf g
      theorem Finset.inf_mono {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s₁ s₂ : Finset β} {f : βα} (h : s₁ s₂) :
      s₂.inf f s₁.inf f
      theorem Finset.inf_comm {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [OrderTop α] (s : Finset β) (t : Finset γ) (f : βγα) :
      (s.inf fun (b : β) => t.inf (f b)) = t.inf fun (c : γ) => s.inf fun (b : β) => f b c
      theorem Finset.inf_attach {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : βα) :
      (s.attach.inf fun (x : { x : β // x s }) => f x) = s.inf f
      theorem Finset.inf_product_left {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [OrderTop α] (s : Finset β) (t : Finset γ) (f : β × γα) :
      (s ×ˢ t).inf f = s.inf fun (i : β) => t.inf fun (i' : γ) => f (i, i')
      theorem Finset.inf_product_right {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [OrderTop α] (s : Finset β) (t : Finset γ) (f : β × γα) :
      (s ×ˢ t).inf f = t.inf fun (i' : γ) => s.inf fun (i : β) => f (i, i')
      @[simp]
      theorem Finset.inf_prodMap {ι : Type u_7} {κ : Type u_8} {α : Type u_9} {β : Type u_10} [SemilatticeInf α] [SemilatticeInf β] [OrderTop α] [OrderTop β] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty) (f : ια) (g : κβ) :
      (s ×ˢ t).inf (Prod.map f g) = (s.inf f, t.inf g)
      @[simp]
      theorem Finset.inf_erase_top {α : Type u_2} [SemilatticeInf α] [OrderTop α] [DecidableEq α] (s : Finset α) :
      (s.erase ).inf id = s.inf id
      theorem Finset.comp_inf_eq_inf_comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [OrderTop α] [SemilatticeInf γ] [OrderTop γ] {s : Finset β} {f : βα} (g : αγ) (g_inf : ∀ (x y : α), g (x y) = g x g y) (top : g = ) :
      g (s.inf f) = s.inf (g f)
      theorem Finset.inf_coe {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {P : αProp} {Ptop : P } {Pinf : ∀ ⦃x y : α⦄, P xP yP (x y)} (t : Finset β) (f : β{ x : α // P x }) :
      (t.inf f) = t.inf fun (x : β) => (f x)

      Computing inf in a subtype (closed under inf) is the same as computing it in α.

      theorem List.foldr_inf_eq_inf_toFinset {α : Type u_2} [SemilatticeInf α] [OrderTop α] [DecidableEq α] (l : List α) :
      List.foldr (fun (x1 x2 : α) => x1 x2) l = l.toFinset.inf id
      theorem Finset.inf_induction {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} {f : βα} {p : αProp} (ht : p ) (hp : ∀ (a₁ : α), p a₁∀ (a₂ : α), p a₂p (a₁ a₂)) (hs : bs, p (f b)) :
      p (s.inf f)
      theorem Finset.inf_mem {α : Type u_2} [SemilatticeInf α] [OrderTop α] (s : Set α) (w₁ : s) (w₂ : xs, ys, x y s) {ι : Type u_7} (t : Finset ι) (p : ια) (h : it, p i s) :
      t.inf p s
      @[simp]
      theorem Finset.inf_eq_top_iff {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] (f : βα) (S : Finset β) :
      S.inf f = sS, f s =
      @[simp]
      theorem Finset.toDual_sup {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : βα) :
      OrderDual.toDual (s.sup f) = s.inf (OrderDual.toDual f)
      @[simp]
      theorem Finset.toDual_inf {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : βα) :
      OrderDual.toDual (s.inf f) = s.sup (OrderDual.toDual f)
      @[simp]
      theorem Finset.ofDual_sup {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : βαᵒᵈ) :
      OrderDual.ofDual (s.sup f) = s.inf (OrderDual.ofDual f)
      @[simp]
      theorem Finset.ofDual_inf {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : βαᵒᵈ) :
      OrderDual.ofDual (s.inf f) = s.sup (OrderDual.ofDual f)
      theorem Finset.sup_inf_distrib_left {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderBot α] (s : Finset ι) (f : ια) (a : α) :
      a s.sup f = s.sup fun (i : ι) => a f i
      theorem Finset.sup_inf_distrib_right {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderBot α] (s : Finset ι) (f : ια) (a : α) :
      s.sup f a = s.sup fun (i : ι) => f i a
      theorem Finset.disjoint_sup_right {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderBot α] {s : Finset ι} {f : ια} {a : α} :
      Disjoint a (s.sup f) ∀ ⦃i : ι⦄, i sDisjoint a (f i)
      theorem Finset.disjoint_sup_left {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderBot α] {s : Finset ι} {f : ια} {a : α} :
      Disjoint (s.sup f) a ∀ ⦃i : ι⦄, i sDisjoint (f i) a
      theorem Finset.sup_inf_sup {α : Type u_2} {ι : Type u_5} {κ : Type u_6} [DistribLattice α] [OrderBot α] (s : Finset ι) (t : Finset κ) (f : ια) (g : κα) :
      s.sup f t.sup g = (s ×ˢ t).sup fun (i : ι × κ) => f i.1 g i.2
      theorem Finset.inf_sup_distrib_left {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderTop α] (s : Finset ι) (f : ια) (a : α) :
      a s.inf f = s.inf fun (i : ι) => a f i
      theorem Finset.inf_sup_distrib_right {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderTop α] (s : Finset ι) (f : ια) (a : α) :
      s.inf f a = s.inf fun (i : ι) => f i a
      theorem Finset.codisjoint_inf_right {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderTop α] {f : ια} {s : Finset ι} {a : α} :
      Codisjoint a (s.inf f) ∀ ⦃i : ι⦄, i sCodisjoint a (f i)
      theorem Finset.codisjoint_inf_left {α : Type u_2} {ι : Type u_5} [DistribLattice α] [OrderTop α] {f : ια} {s : Finset ι} {a : α} :
      Codisjoint (s.inf f) a ∀ ⦃i : ι⦄, i sCodisjoint (f i) a
      theorem Finset.inf_sup_inf {α : Type u_2} {ι : Type u_5} {κ : Type u_6} [DistribLattice α] [OrderTop α] (s : Finset ι) (t : Finset κ) (f : ια) (g : κα) :
      s.inf f t.inf g = (s ×ˢ t).inf fun (i : ι × κ) => f i.1 g i.2
      theorem Finset.inf_sup {α : Type u_2} {ι : Type u_5} [DistribLattice α] [BoundedOrder α] [DecidableEq ι] {κ : ιType u_7} (s : Finset ι) (t : (i : ι) → Finset (κ i)) (f : (i : ι) → κ iα) :
      (s.inf fun (i : ι) => (t i).sup (f i)) = (s.pi t).sup fun (g : (a : ι) → a sκ a) => s.attach.inf fun (i : { x : ι // x s }) => f (↑i) (g i )
      theorem Finset.sup_inf {α : Type u_2} {ι : Type u_5} [DistribLattice α] [BoundedOrder α] [DecidableEq ι] {κ : ιType u_7} (s : Finset ι) (t : (i : ι) → Finset (κ i)) (f : (i : ι) → κ iα) :
      (s.sup fun (i : ι) => (t i).inf (f i)) = (s.pi t).inf fun (g : (a : ι) → a sκ a) => s.attach.sup fun (i : { x : ι // x s }) => f (↑i) (g i )
      theorem Finset.sup_sdiff_left {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] (s : Finset ι) (f : ια) (a : α) :
      (s.sup fun (b : ι) => a \ f b) = a \ s.inf f
      theorem Finset.inf_sdiff_left {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
      (s.inf fun (b : ι) => a \ f b) = a \ s.sup f
      theorem Finset.inf_sdiff_right {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
      (s.inf fun (b : ι) => f b \ a) = s.inf f \ a
      theorem Finset.inf_himp_right {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] (s : Finset ι) (f : ια) (a : α) :
      (s.inf fun (b : ι) => f b a) = s.sup f a
      theorem Finset.sup_himp_right {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
      (s.sup fun (b : ι) => f b a) = s.inf f a
      theorem Finset.sup_himp_left {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
      (s.sup fun (b : ι) => a f b) = a s.sup f
      @[simp]
      theorem Finset.compl_sup {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] (s : Finset ι) (f : ια) :
      (s.sup f) = s.inf fun (i : ι) => (f i)
      @[simp]
      theorem Finset.compl_inf {α : Type u_2} {ι : Type u_5} [BooleanAlgebra α] (s : Finset ι) (f : ια) :
      (s.inf f) = s.sup fun (i : ι) => (f i)
      theorem Finset.comp_sup_eq_sup_comp_of_is_total {α : Type u_2} {β : Type u_3} {ι : Type u_5} [LinearOrder α] [OrderBot α] {s : Finset ι} {f : ια} [SemilatticeSup β] [OrderBot β] (g : αβ) (mono_g : Monotone g) (bot : g = ) :
      g (s.sup f) = s.sup (g f)
      @[simp]
      theorem Finset.le_sup_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderBot α] {s : Finset ι} {f : ια} {a : α} (ha : < a) :
      a s.sup f bs, a f b
      theorem Finset.sup_eq_top_iff {ι : Type u_5} {α : Type u_7} [LinearOrder α] [BoundedOrder α] [Nontrivial α] {s : Finset ι} {f : ια} :
      s.sup f = bs, f b =
      theorem Finset.Nonempty.sup_eq_top_iff {ι : Type u_5} {α : Type u_7} [LinearOrder α] [BoundedOrder α] {s : Finset ι} {f : ια} (hs : s.Nonempty) :
      s.sup f = bs, f b =
      @[simp]
      theorem Finset.lt_sup_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderBot α] {s : Finset ι} {f : ια} {a : α} :
      a < s.sup f bs, a < f b
      @[simp]
      theorem Finset.sup_lt_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderBot α] {s : Finset ι} {f : ια} {a : α} (ha : < a) :
      s.sup f < a bs, f b < a
      theorem Finset.sup_mem_of_nonempty {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderBot α] {s : Finset ι} {f : ια} (hs : s.Nonempty) :
      s.sup f f '' s
      theorem Finset.comp_inf_eq_inf_comp_of_is_total {α : Type u_2} {β : Type u_3} {ι : Type u_5} [LinearOrder α] [OrderTop α] {s : Finset ι} {f : ια} [SemilatticeInf β] [OrderTop β] (g : αβ) (mono_g : Monotone g) (top : g = ) :
      g (s.inf f) = s.inf (g f)
      @[simp]
      theorem Finset.inf_le_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderTop α] {s : Finset ι} {f : ια} {a : α} (ha : a < ) :
      s.inf f a bs, f b a
      theorem Finset.inf_eq_bot_iff {ι : Type u_5} {α : Type u_7} [LinearOrder α] [BoundedOrder α] [Nontrivial α] {s : Finset ι} {f : ια} :
      s.inf f = bs, f b =
      theorem Finset.Nonempty.inf_eq_bot_iff {ι : Type u_5} {α : Type u_7} [LinearOrder α] [BoundedOrder α] {s : Finset ι} {f : ια} (h : s.Nonempty) :
      s.inf f = bs, f b =
      @[simp]
      theorem Finset.inf_lt_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderTop α] {s : Finset ι} {f : ια} {a : α} :
      s.inf f < a bs, f b < a
      @[simp]
      theorem Finset.lt_inf_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderTop α] {s : Finset ι} {f : ια} {a : α} (ha : a < ) :
      a < s.inf f bs, a < f b
      theorem Finset.inf_eq_iInf {α : Type u_2} {β : Type u_3} [CompleteLattice β] (s : Finset α) (f : αβ) :
      s.inf f = as, f a
      theorem Finset.inf_id_eq_sInf {α : Type u_2} [CompleteLattice α] (s : Finset α) :
      s.inf id = sInf s
      theorem Finset.inf_id_set_eq_sInter {α : Type u_2} (s : Finset (Set α)) :
      s.inf id = ⋂₀ s
      @[simp]
      theorem Finset.inf_set_eq_iInter {α : Type u_2} {β : Type u_3} (s : Finset α) (f : αSet β) :
      s.inf f = xs, f x
      theorem Finset.inf_eq_sInf_image {α : Type u_2} {β : Type u_3} [CompleteLattice β] (s : Finset α) (f : αβ) :
      s.inf f = sInf (f '' s)
      theorem Finset.sup_of_mem {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (f : βα) {b : β} (h : b s) :
      ∃ (a : α), s.sup (WithBot.some f) = a
      def Finset.sup' {α : Type u_2} {β : Type u_3} [SemilatticeSup α] (s : Finset β) (H : s.Nonempty) (f : βα) :
      α

      Given nonempty finset s then s.sup' H f is the supremum of its image under f in (possibly unbounded) join-semilattice α, where H is a proof of nonemptiness. If α has a bottom element you may instead use Finset.sup which does not require s nonempty.

      Equations
      • s.sup' H f = (s.sup (WithBot.some f)).unbot
      Instances For
        @[simp]
        theorem Finset.coe_sup' {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (f : βα) :
        (s.sup' H f) = s.sup (WithBot.some f)
        @[simp]
        theorem Finset.sup'_cons {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (f : βα) {b : β} {hb : bs} :
        (Finset.cons b s hb).sup' f = f b s.sup' H f
        @[simp]
        theorem Finset.sup'_insert {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (f : βα) [DecidableEq β] {b : β} :
        (insert b s).sup' f = f b s.sup' H f
        @[simp]
        theorem Finset.sup'_singleton {α : Type u_2} {β : Type u_3} [SemilatticeSup α] (f : βα) {b : β} :
        {b}.sup' f = f b
        @[simp]
        theorem Finset.sup'_le_iff {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (f : βα) {a : α} :
        s.sup' H f a bs, f b a
        theorem Finset.sup'_le {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (f : βα) {a : α} :
        (∀ bs, f b a)s.sup' H f a

        Alias of the reverse direction of Finset.sup'_le_iff.

        theorem Finset.le_sup' {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (f : βα) {b : β} (h : b s) :
        f b s.sup' f
        theorem Finset.isLUB_sup' {α : Type u_2} [SemilatticeSup α] {s : Finset α} (hs : s.Nonempty) :
        IsLUB (↑s) (s.sup' hs id)
        theorem Finset.le_sup'_of_le {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (f : βα) {a : α} {b : β} (hb : b s) (h : a f b) :
        a s.sup' f
        theorem Finset.sup'_eq_of_forall {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (f : βα) {a : α} (h : bs, f b = a) :
        s.sup' H f = a
        @[simp]
        theorem Finset.sup'_const {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (a : α) :
        (s.sup' H fun (x : β) => a) = a
        theorem Finset.sup'_union {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty) (f : βα) :
        (s₁ s₂).sup' f = s₁.sup' h₁ f s₂.sup' h₂ f
        theorem Finset.sup'_biUnion {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] (f : βα) [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γFinset β} (Ht : ∀ (b : γ), (t b).Nonempty) :
        (s.biUnion t).sup' f = s.sup' Hs fun (b : γ) => (t b).sup' f
        theorem Finset.sup'_comm {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] {s : Finset β} {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : βγα) :
        (s.sup' hs fun (b : β) => t.sup' ht (f b)) = t.sup' ht fun (c : γ) => s.sup' hs fun (b : β) => f b c
        theorem Finset.sup'_product_left {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] {s : Finset β} {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γα) :
        (s ×ˢ t).sup' h f = s.sup' fun (i : β) => t.sup' fun (i' : γ) => f (i, i')
        theorem Finset.sup'_product_right {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] {s : Finset β} {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γα) :
        (s ×ˢ t).sup' h f = t.sup' fun (i' : γ) => s.sup' fun (i : β) => f (i, i')
        theorem Finset.prodMk_sup'_sup' {ι : Type u_7} {κ : Type u_8} {α : Type u_9} {β : Type u_10} [SemilatticeSup α] [SemilatticeSup β] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty) (f : ια) (g : κβ) :
        (s.sup' hs f, t.sup' ht g) = (s ×ˢ t).sup' (Prod.map f g)

        See also Finset.sup'_prodMap.

        theorem Finset.sup'_prodMap {ι : Type u_7} {κ : Type u_8} {α : Type u_9} {β : Type u_10} [SemilatticeSup α] [SemilatticeSup β] {s : Finset ι} {t : Finset κ} (hst : (s ×ˢ t).Nonempty) (f : ια) (g : κβ) :
        (s ×ˢ t).sup' hst (Prod.map f g) = (s.sup' f, t.sup' g)

        See also Finset.prodMk_sup'_sup'.

        theorem Finset.sup'_induction {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) (f : βα) {p : αProp} (hp : ∀ (a₁ : α), p a₁∀ (a₂ : α), p a₂p (a₁ a₂)) (hs : bs, p (f b)) :
        p (s.sup' H f)
        theorem Finset.sup'_mem {α : Type u_2} [SemilatticeSup α] (s : Set α) (w : xs, ys, x y s) {ι : Type u_7} (t : Finset ι) (H : t.Nonempty) (p : ια) (h : it, p i s) :
        t.sup' H p s
        theorem Finset.sup'_congr {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} (H : s.Nonempty) {t : Finset β} {f g : βα} (h₁ : s = t) (h₂ : xs, f x = g x) :
        s.sup' H f = t.sup' g
        theorem Finset.comp_sup'_eq_sup'_comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [SemilatticeSup γ] {s : Finset β} (H : s.Nonempty) {f : βα} (g : αγ) (g_sup : ∀ (x y : α), g (x y) = g x g y) :
        g (s.sup' H f) = s.sup' H (g f)
        @[simp]
        theorem map_finset_sup' {F : Type u_1} {α : Type u_2} {β : Type u_3} {ι : Type u_5} [SemilatticeSup α] [SemilatticeSup β] [FunLike F α β] [SupHomClass F α β] (f : F) {s : Finset ι} (hs : s.Nonempty) (g : ια) :
        f (s.sup' hs g) = s.sup' hs (f g)
        @[simp]
        theorem Finset.sup'_image {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [DecidableEq β] {s : Finset γ} {f : γβ} (hs : (Finset.image f s).Nonempty) (g : βα) :
        (Finset.image f s).sup' hs g = s.sup' (g f)

        To rewrite from right to left, use Finset.sup'_comp_eq_image.

        theorem Finset.sup'_comp_eq_image {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] [DecidableEq β] {s : Finset γ} {f : γβ} (hs : s.Nonempty) (g : βα) :
        s.sup' hs (g f) = (Finset.image f s).sup' g

        A version of Finset.sup'_image with LHS and RHS reversed. Also, this lemma assumes that s is nonempty instead of assuming that its image is nonempty.

        @[simp]
        theorem Finset.sup'_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] {s : Finset γ} {f : γ β} (g : βα) (hs : (Finset.map f s).Nonempty) :
        (Finset.map f s).sup' hs g = s.sup' (g f)

        To rewrite from right to left, use Finset.sup'_comp_eq_map.

        theorem Finset.sup'_comp_eq_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeSup α] {s : Finset γ} {f : γ β} (g : βα) (hs : s.Nonempty) :
        s.sup' hs (g f) = (Finset.map f s).sup' g

        A version of Finset.sup'_map with LHS and RHS reversed. Also, this lemma assumes that s is nonempty instead of assuming that its image is nonempty.

        theorem Finset.sup'_mono {α : Type u_2} {β : Type u_3} [SemilatticeSup α] (f : βα) {s₁ s₂ : Finset β} (h : s₁ s₂) (h₁ : s₁.Nonempty) :
        s₁.sup' h₁ f s₂.sup' f
        theorem Finset.sup'_mono_fun {α : Type u_2} {β : Type u_3} [SemilatticeSup α] {s : Finset β} {hs : s.Nonempty} {f g : βα} (h : bs, f b g b) :
        s.sup' hs f s.sup' hs g
        theorem Finset.inf_of_mem {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (f : βα) {b : β} (h : b s) :
        ∃ (a : α), s.inf (WithTop.some f) = a
        def Finset.inf' {α : Type u_2} {β : Type u_3} [SemilatticeInf α] (s : Finset β) (H : s.Nonempty) (f : βα) :
        α

        Given nonempty finset s then s.inf' H f is the infimum of its image under f in (possibly unbounded) meet-semilattice α, where H is a proof of nonemptiness. If α has a top element you may instead use Finset.inf which does not require s nonempty.

        Equations
        • s.inf' H f = (s.inf (WithTop.some f)).untop
        Instances For
          @[simp]
          theorem Finset.coe_inf' {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (f : βα) :
          (s.inf' H f) = s.inf (WithTop.some f)
          @[simp]
          theorem Finset.inf'_cons {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (f : βα) {b : β} {hb : bs} :
          (Finset.cons b s hb).inf' f = f b s.inf' H f
          @[simp]
          theorem Finset.inf'_insert {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (f : βα) [DecidableEq β] {b : β} :
          (insert b s).inf' f = f b s.inf' H f
          @[simp]
          theorem Finset.inf'_singleton {α : Type u_2} {β : Type u_3} [SemilatticeInf α] (f : βα) {b : β} :
          {b}.inf' f = f b
          @[simp]
          theorem Finset.le_inf'_iff {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (f : βα) {a : α} :
          a s.inf' H f bs, a f b
          theorem Finset.le_inf' {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (f : βα) {a : α} (hs : bs, a f b) :
          a s.inf' H f
          theorem Finset.inf'_le {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (f : βα) {b : β} (h : b s) :
          s.inf' f f b
          theorem Finset.isGLB_inf' {α : Type u_2} [SemilatticeInf α] {s : Finset α} (hs : s.Nonempty) :
          IsGLB (↑s) (s.inf' hs id)
          theorem Finset.inf'_le_of_le {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (f : βα) {a : α} {b : β} (hb : b s) (h : f b a) :
          s.inf' f a
          theorem Finset.inf'_eq_of_forall {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (f : βα) {a : α} (h : bs, f b = a) :
          s.inf' H f = a
          @[simp]
          theorem Finset.inf'_const {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (a : α) :
          (s.inf' H fun (x : β) => a) = a
          theorem Finset.inf'_union {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty) (f : βα) :
          (s₁ s₂).inf' f = s₁.inf' h₁ f s₂.inf' h₂ f
          theorem Finset.inf'_biUnion {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] (f : βα) [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γFinset β} (Ht : ∀ (b : γ), (t b).Nonempty) :
          (s.biUnion t).inf' f = s.inf' Hs fun (b : γ) => (t b).inf' f
          theorem Finset.inf'_comm {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] {s : Finset β} {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : βγα) :
          (s.inf' hs fun (b : β) => t.inf' ht (f b)) = t.inf' ht fun (c : γ) => s.inf' hs fun (b : β) => f b c
          theorem Finset.inf'_product_left {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] {s : Finset β} {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γα) :
          (s ×ˢ t).inf' h f = s.inf' fun (i : β) => t.inf' fun (i' : γ) => f (i, i')
          theorem Finset.inf'_product_right {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] {s : Finset β} {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γα) :
          (s ×ˢ t).inf' h f = t.inf' fun (i' : γ) => s.inf' fun (i : β) => f (i, i')
          theorem Finset.prodMk_inf'_inf' {ι : Type u_7} {κ : Type u_8} {α : Type u_9} {β : Type u_10} [SemilatticeInf α] [SemilatticeInf β] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty) (f : ια) (g : κβ) :
          (s.inf' hs f, t.inf' ht g) = (s ×ˢ t).inf' (Prod.map f g)

          See also Finset.inf'_prodMap.

          theorem Finset.inf'_prodMap {ι : Type u_7} {κ : Type u_8} {α : Type u_9} {β : Type u_10} [SemilatticeInf α] [SemilatticeInf β] {s : Finset ι} {t : Finset κ} (hst : (s ×ˢ t).Nonempty) (f : ια) (g : κβ) :
          (s ×ˢ t).inf' hst (Prod.map f g) = (s.inf' f, t.inf' g)

          See also Finset.prodMk_inf'_inf'.

          theorem Finset.comp_inf'_eq_inf'_comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [SemilatticeInf γ] {s : Finset β} (H : s.Nonempty) {f : βα} (g : αγ) (g_inf : ∀ (x y : α), g (x y) = g x g y) :
          g (s.inf' H f) = s.inf' H (g f)
          theorem Finset.inf'_induction {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) (f : βα) {p : αProp} (hp : ∀ (a₁ : α), p a₁∀ (a₂ : α), p a₂p (a₁ a₂)) (hs : bs, p (f b)) :
          p (s.inf' H f)
          theorem Finset.inf'_mem {α : Type u_2} [SemilatticeInf α] (s : Set α) (w : xs, ys, x y s) {ι : Type u_7} (t : Finset ι) (H : t.Nonempty) (p : ια) (h : it, p i s) :
          t.inf' H p s
          theorem Finset.inf'_congr {α : Type u_2} {β : Type u_3} [SemilatticeInf α] {s : Finset β} (H : s.Nonempty) {t : Finset β} {f g : βα} (h₁ : s = t) (h₂ : xs, f x = g x) :
          s.inf' H f = t.inf' g
          @[simp]
          theorem map_finset_inf' {F : Type u_1} {α : Type u_2} {β : Type u_3} {ι : Type u_5} [SemilatticeInf α] [SemilatticeInf β] [FunLike F α β] [InfHomClass F α β] (f : F) {s : Finset ι} (hs : s.Nonempty) (g : ια) :
          f (s.inf' hs g) = s.inf' hs (f g)
          @[simp]
          theorem Finset.inf'_image {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [DecidableEq β] {s : Finset γ} {f : γβ} (hs : (Finset.image f s).Nonempty) (g : βα) :
          (Finset.image f s).inf' hs g = s.inf' (g f)

          To rewrite from right to left, use Finset.inf'_comp_eq_image.

          theorem Finset.inf'_comp_eq_image {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] [DecidableEq β] {s : Finset γ} {f : γβ} (hs : s.Nonempty) (g : βα) :
          s.inf' hs (g f) = (Finset.image f s).inf' g

          A version of Finset.inf'_image with LHS and RHS reversed. Also, this lemma assumes that s is nonempty instead of assuming that its image is nonempty.

          @[simp]
          theorem Finset.inf'_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] {s : Finset γ} {f : γ β} (g : βα) (hs : (Finset.map f s).Nonempty) :
          (Finset.map f s).inf' hs g = s.inf' (g f)

          To rewrite from right to left, use Finset.inf'_comp_eq_map.

          theorem Finset.inf'_comp_eq_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [SemilatticeInf α] {s : Finset γ} {f : γ β} (g : βα) (hs : s.Nonempty) :
          s.inf' hs (g f) = (Finset.map f s).inf' g

          A version of Finset.inf'_map with LHS and RHS reversed. Also, this lemma assumes that s is nonempty instead of assuming that its image is nonempty.

          theorem Finset.inf'_mono {α : Type u_2} {β : Type u_3} [SemilatticeInf α] (f : βα) {s₁ s₂ : Finset β} (h : s₁ s₂) (h₁ : s₁.Nonempty) :
          s₂.inf' f s₁.inf' h₁ f
          theorem Finset.sup'_eq_sup {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} (H : s.Nonempty) (f : βα) :
          s.sup' H f = s.sup f
          theorem Finset.coe_sup_of_nonempty {α : Type u_2} {β : Type u_3} [SemilatticeSup α] [OrderBot α] {s : Finset β} (h : s.Nonempty) (f : βα) :
          (s.sup f) = s.sup (WithBot.some f)
          theorem Finset.inf'_eq_inf {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} (H : s.Nonempty) (f : βα) :
          s.inf' H f = s.inf f
          theorem Finset.coe_inf_of_nonempty {α : Type u_2} {β : Type u_3} [SemilatticeInf α] [OrderTop α] {s : Finset β} (h : s.Nonempty) (f : βα) :
          (s.inf f) = s.inf (WithTop.some f)
          @[simp]
          theorem Finset.sup_apply {α : Type u_2} {β : Type u_3} {C : βType u_7} [(b : β) → SemilatticeSup (C b)] [(b : β) → OrderBot (C b)] (s : Finset α) (f : α(b : β) → C b) (b : β) :
          s.sup f b = s.sup fun (a : α) => f a b
          @[simp]
          theorem Finset.inf_apply {α : Type u_2} {β : Type u_3} {C : βType u_7} [(b : β) → SemilatticeInf (C b)] [(b : β) → OrderTop (C b)] (s : Finset α) (f : α(b : β) → C b) (b : β) :
          s.inf f b = s.inf fun (a : α) => f a b
          @[simp]
          theorem Finset.sup'_apply {α : Type u_2} {β : Type u_3} {C : βType u_7} [(b : β) → SemilatticeSup (C b)] {s : Finset α} (H : s.Nonempty) (f : α(b : β) → C b) (b : β) :
          s.sup' H f b = s.sup' H fun (a : α) => f a b
          @[simp]
          theorem Finset.inf'_apply {α : Type u_2} {β : Type u_3} {C : βType u_7} [(b : β) → SemilatticeInf (C b)] {s : Finset α} (H : s.Nonempty) (f : α(b : β) → C b) (b : β) :
          s.inf' H f b = s.inf' H fun (a : α) => f a b
          @[simp]
          theorem Finset.toDual_sup' {α : Type u_2} {ι : Type u_5} [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ια) :
          OrderDual.toDual (s.sup' hs f) = s.inf' hs (OrderDual.toDual f)
          @[simp]
          theorem Finset.toDual_inf' {α : Type u_2} {ι : Type u_5} [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ια) :
          OrderDual.toDual (s.inf' hs f) = s.sup' hs (OrderDual.toDual f)
          @[simp]
          theorem Finset.ofDual_sup' {α : Type u_2} {ι : Type u_5} [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ιαᵒᵈ) :
          OrderDual.ofDual (s.sup' hs f) = s.inf' hs (OrderDual.ofDual f)
          @[simp]
          theorem Finset.ofDual_inf' {α : Type u_2} {ι : Type u_5} [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ιαᵒᵈ) :
          OrderDual.ofDual (s.inf' hs f) = s.sup' hs (OrderDual.ofDual f)
          theorem Finset.sup'_inf_distrib_left {α : Type u_2} {ι : Type u_5} [DistribLattice α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
          a s.sup' hs f = s.sup' hs fun (i : ι) => a f i
          theorem Finset.sup'_inf_distrib_right {α : Type u_2} {ι : Type u_5} [DistribLattice α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
          s.sup' hs f a = s.sup' hs fun (i : ι) => f i a
          theorem Finset.sup'_inf_sup' {α : Type u_2} {ι : Type u_5} {κ : Type u_6} [DistribLattice α] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty) (f : ια) (g : κα) :
          s.sup' hs f t.sup' ht g = (s ×ˢ t).sup' fun (i : ι × κ) => f i.1 g i.2
          theorem Finset.inf'_sup_distrib_left {α : Type u_2} {ι : Type u_5} [DistribLattice α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
          a s.inf' hs f = s.inf' hs fun (i : ι) => a f i
          theorem Finset.inf'_sup_distrib_right {α : Type u_2} {ι : Type u_5} [DistribLattice α] {s : Finset ι} (hs : s.Nonempty) (f : ια) (a : α) :
          s.inf' hs f a = s.inf' hs fun (i : ι) => f i a
          theorem Finset.inf'_sup_inf' {α : Type u_2} {ι : Type u_5} {κ : Type u_6} [DistribLattice α] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty) (f : ια) (g : κα) :
          s.inf' hs f t.inf' ht g = (s ×ˢ t).inf' fun (i : ι × κ) => f i.1 g i.2
          theorem Finset.comp_sup_eq_sup_comp_of_nonempty {α : Type u_2} {β : Type u_3} {ι : Type u_5} [LinearOrder α] {s : Finset ι} {f : ια} [OrderBot α] [SemilatticeSup β] [OrderBot β] {g : αβ} (mono_g : Monotone g) (H : s.Nonempty) :
          g (s.sup f) = s.sup (g f)
          @[simp]
          theorem Finset.le_sup'_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ια} {a : α} :
          a s.sup' H f bs, a f b
          @[simp]
          theorem Finset.lt_sup'_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ια} {a : α} :
          a < s.sup' H f bs, a < f b
          @[simp]
          theorem Finset.sup'_lt_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ια} {a : α} :
          s.sup' H f < a is, f i < a
          @[simp]
          theorem Finset.inf'_le_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ια} {a : α} :
          s.inf' H f a is, f i a
          @[simp]
          theorem Finset.inf'_lt_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ια} {a : α} :
          s.inf' H f < a is, f i < a
          @[simp]
          theorem Finset.lt_inf'_iff {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ια} {a : α} :
          a < s.inf' H f is, a < f i
          theorem Finset.exists_mem_eq_sup' {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) (f : ια) :
          is, s.sup' H f = f i
          theorem Finset.exists_mem_eq_inf' {α : Type u_2} {ι : Type u_5} [LinearOrder α] {s : Finset ι} (H : s.Nonempty) (f : ια) :
          is, s.inf' H f = f i
          theorem Finset.exists_mem_eq_sup {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderBot α] (s : Finset ι) (h : s.Nonempty) (f : ια) :
          is, s.sup f = f i
          theorem Finset.exists_mem_eq_inf {α : Type u_2} {ι : Type u_5} [LinearOrder α] [OrderTop α] (s : Finset ι) (h : s.Nonempty) (f : ια) :
          is, s.inf f = f i
          theorem Multiset.map_finset_sup {α : Type u_2} {β : Type u_3} {γ : Type u_4} [DecidableEq α] [DecidableEq β] (s : Finset γ) (f : γMultiset β) (g : βα) (hg : Function.Injective g) :
          Multiset.map g (s.sup f) = s.sup (Multiset.map g f)
          theorem Multiset.count_finset_sup {α : Type u_2} {β : Type u_3} [DecidableEq β] (s : Finset α) (f : αMultiset β) (b : β) :
          Multiset.count b (s.sup f) = s.sup fun (a : α) => Multiset.count b (f a)
          theorem Multiset.mem_sup {α : Type u_7} {β : Type u_8} [DecidableEq β] {s : Finset α} {f : αMultiset β} {x : β} :
          x s.sup f vs, x f v
          @[simp]
          theorem Finset.mem_sup' {α : Type u_2} {ι : Type u_5} [DecidableEq α] {s : Finset ι} {f : ιFinset α} {a : α} (hs : s.Nonempty) :
          a s.sup' hs f is, a f i
          @[simp]
          theorem Finset.mem_inf' {α : Type u_2} {ι : Type u_5} [DecidableEq α] {s : Finset ι} {f : ιFinset α} {a : α} (hs : s.Nonempty) :
          a s.inf' hs f is, a f i
          @[simp]
          theorem Finset.mem_sup {α : Type u_2} {ι : Type u_5} [DecidableEq α] {s : Finset ι} {f : ιFinset α} {a : α} :
          a s.sup f is, a f i
          theorem Finset.sup_eq_biUnion {α : Type u_7} {β : Type u_8} [DecidableEq β] (s : Finset α) (t : αFinset β) :
          s.sup t = s.biUnion t
          @[simp]
          theorem Finset.sup_singleton'' {α : Type u_2} {β : Type u_3} [DecidableEq α] (s : Finset β) (f : βα) :
          (s.sup fun (b : β) => {f b}) = Finset.image f s
          @[simp]
          theorem Finset.sup_singleton' {α : Type u_2} [DecidableEq α] (s : Finset α) :
          s.sup singleton = s