/- Copyright (c) 2018 Mario Carneiro. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Mario Carneiro ! This file was ported from Lean 3 source module data.finset.lattice ! leanprover-community/mathlib commit 2d44d6823a96f9c79b7d1ab185918377be663424 ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Data.Finset.Fold import Mathlib.Data.Finset.Option import Mathlib.Data.Finset.Pi import Mathlib.Data.Finset.Prod import Mathlib.Data.Multiset.Lattice import Mathlib.Order.CompleteLattice import Mathlib.Order.Hom.Lattice /-! # Lattice operations on finsets -/ variable {FF: Type ?u.364375αα: Type ?u.138130ββ: Type ?u.8γγ: Type ?u.364384ιι: Type ?u.138139κ :κ: Type ?u.91666Type _} namespace Finset open Multiset OrderDual /-! ### sup -/ section Sup -- TODO: define with just `[Bot α]` where some lemmas hold without requiring `[OrderBot α]` variable [SemilatticeSupType _: Type (?u.230778+1)α] [OrderBotα: Type ?u.23α] /-- Supremum of a finite set: `sup {a, b, c} f = f a ⊔ f b ⊔ f c` -/ defα: Type ?u.23sup (sup: Finset β → (β → α) → αs : Finsets: Finset ββ) (β: Type ?u.469f :f: β → αβ →β: Type ?u.469α) :α: Type ?u.466α :=α: Type ?u.466s.s: Finset βfoldfold: {α : Type ?u.917} → {β : Type ?u.916} → (op : β → β → β) → [hc : IsCommutative β op] → [ha : IsAssociative β op] → β → (α → β) → Finset α → β(· ⊔ ·)(· ⊔ ·): α → α → α⊥⊥: ?m.977f #align finset.supf: β → αFinset.sup variable {Finset.sup: {α : Type u_1} → {β : Type u_2} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αss: Finset βs₁s₁: Finset βs₂ : Finsets₂: Finset ββ} {β: Type ?u.1639ff: β → αg :g: β → αβ →β: Type ?u.46375α} {α: Type ?u.14248a :a: αα} theoremα: Type ?u.1636sup_def :sup_def: sup s f = Multiset.sup (Multiset.map f s.val)s.s: Finset βsupsup: {α : Type ?u.2559} → {β : Type ?u.2558} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf = (f: β → αs.1.maps: Finset βf).f: β → αsup := rfl #align finset.sup_defsup: {α : Type ?u.2604} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Multiset α → αFinset.sup_def @[simp] theoremFinset.sup_def: ∀ {α : Type u_1} {β : Type u_2} [inst : SemilatticeSup α] [inst_1 : OrderBot α] {s : Finset β} {f : β → α}, sup s f = Multiset.sup (Multiset.map f s.val)sup_empty : (∅ : Finset∅: ?m.3095β).β: Type ?u.2635supsup: {α : Type ?u.3141} → {β : Type ?u.3140} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β → α⊥ :=⊥: ?m.3172fold_empty #align finset.sup_empty Finset.sup_empty @[simp] theorem sup_cons {fold_empty: ∀ {α : Type ?u.3674} {β : Type ?u.3673} {op : β → β → β} [hc : IsCommutative β op] [ha : IsAssociative β op] {f : α → β} {b : β}, fold op b f ∅ = bb :b: ββ} (h :β: Type ?u.3836b ∉b: βs) : (conss: Finset βbb: βs h).s: Finset βsupsup: {α : Type ?u.4317} → {β : Type ?u.4316} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β → αff: β → αb ⊔b: βs.s: Finset βsupsup: {α : Type ?u.4351} → {β : Type ?u.4350} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf := fold_cons h #align finset.sup_cons Finset.sup_cons @[simp] theoremf: β → αsup_insert [DecidableEqβ] {β: Type ?u.4591b :b: ββ} : (insertβ: Type ?u.4591bb: βs : Finsets: Finset ββ).β: Type ?u.4591supsup: {α : Type ?u.5116} → {β : Type ?u.5115} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β → αff: β → αb ⊔b: βs.s: Finset βsupsup: {α : Type ?u.5150} → {β : Type ?u.5149} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf :=f: β → αfold_insert_idem #align finset.sup_insert Finset.sup_insert theoremfold_insert_idem: ∀ {α : Type ?u.5228} {β : Type ?u.5229} {op : β → β → β} [hc : IsCommutative β op] [ha : IsAssociative β op] {f : α → β} {b : β} {s : Finset α} {a : α} [inst : DecidableEq α] [hi : IsIdempotent β op], fold op b f (insert a s) = op (f a) (fold op b f s)sup_image [DecidableEqβ] (β: Type ?u.5515s : Finsets: Finset γγ) (γ: Type ?u.5518f :f: γ → βγ →γ: Type ?u.5518β) (β: Type ?u.5515g :g: β → αβ →β: Type ?u.5515α) : (α: Type ?u.5512s.s: Finset γimageimage: {α : Type ?u.5993} → {β : Type ?u.5992} → [inst : DecidableEq β] → (α → β) → Finset α → Finset βf).f: γ → βsupsup: {α : Type ?u.6047} → {β : Type ?u.6046} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg =g: β → αs.s: Finset γsup (sup: {α : Type ?u.6079} → {β : Type ?u.6078} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg ∘g: β → αf) :=f: γ → βfold_image_idem #align finset.sup_image Finset.sup_image @[simp] theoremfold_image_idem: ∀ {α : Type ?u.6115} {β : Type ?u.6117} {γ : Type ?u.6116} {op : β → β → β} [hc : IsCommutative β op] [ha : IsAssociative β op] {f : α → β} {b : β} [inst : DecidableEq α] {g : γ → α} {s : Finset γ} [hi : IsIdempotent β op], fold op b f (image g s) = fold op b (f ∘ g) ssup_map (s : Finsets: Finset γγ) (γ: Type ?u.6376f :f: γ ↪ βγ ↪γ: Type ?u.6376β) (β: Type ?u.6373g :g: β → αβ →β: Type ?u.6373α) : (α: Type ?u.6370s.maps: Finset γf).f: γ ↪ βsupsup: {α : Type ?u.6855} → {β : Type ?u.6854} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg =g: β → αs.s: Finset γsup (sup: {α : Type ?u.6887} → {β : Type ?u.6886} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg ∘g: β → αf) := fold_map #align finset.sup_map Finset.sup_map @[simp] theoremf: γ ↪ βsup_singleton {b :b: ββ} : ({β: Type ?u.13562b} : Finsetb: ββ).β: Type ?u.13562supsup: {α : Type ?u.14049} → {β : Type ?u.14048} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β → αff: β → αb :=b: βMultiset.sup_singleton #align finset.sup_singleton Finset.sup_singleton theoremMultiset.sup_singleton: ∀ {α : Type ?u.14082} [inst : SemilatticeSup α] [inst_1 : OrderBot α] {a : α}, Multiset.sup {a} = asup_union [DecidableEqβ] : (β: Type ?u.14251s₁ ∪s₁: Finset βs₂).s₂: Finset βsupsup: {α : Type ?u.14757} → {β : Type ?u.14756} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β → αs₁.s₁: Finset βsupsup: {α : Type ?u.14791} → {β : Type ?u.14790} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ⊔f: β → αs₂.s₂: Finset βsupsup: {α : Type ?u.14854} → {β : Type ?u.14853} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf := Finset.induction_onf: β → αs₁ (s₁: Finset βGoals accomplished! 🐙) (funGoals accomplished! 🐙aa: ?m.14996ss: ?m.14999__: ?m.15002ih =>ih: ?m.15005Goals accomplished! 🐙) #align finset.sup_union Finset.sup_union theoremGoals accomplished! 🐙sup_sup :s.s: Finset βsup (sup: {α : Type ?u.16613} → {β : Type ?u.16612} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ⊔f: β → αg) =g: β → αs.s: Finset βsupsup: {α : Type ?u.16709} → {β : Type ?u.16708} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ⊔f: β → αs.s: Finset βsupsup: {α : Type ?u.16772} → {β : Type ?u.16771} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg :=g: β → αGoals accomplished! 🐙F: Type ?u.16149
α: Type u_1
β: Type u_2
γ: Type ?u.16158
ι: Type ?u.16161
κ: Type ?u.16164
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s, s₁, s₂: Finset β
f, g: β → α
a: α
refine'_1F: Type ?u.16149
α: Type u_1
β: Type u_2
γ: Type ?u.16158
ι: Type ?u.16161
κ: Type ?u.16164
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s, s₁, s₂: Finset β
f, g: β → α
a: α
b: β
t: Finset β
x✝: ¬b ∈ t
h: sup t (f ⊔ g) = sup t f ⊔ sup t g
refine'_2F: Type ?u.16149
α: Type u_1
β: Type u_2
γ: Type ?u.16158
ι: Type ?u.16161
κ: Type ?u.16164
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s, s₁, s₂: Finset β
f, g: β → α
a: α
refine'_1F: Type ?u.16149
α: Type u_1
β: Type u_2
γ: Type ?u.16158
ι: Type ?u.16161
κ: Type ?u.16164
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s, s₁, s₂: Finset β
f, g: β → α
a: α
b: β
t: Finset β
x✝: ¬b ∈ t
h: sup t (f ⊔ g) = sup t f ⊔ sup t g
refine'_2Goals accomplished! 🐙#align finset.sup_sup Finset.sup_sup theoremGoals accomplished! 🐙sup_congr {ff: β → αg :g: β → αβ →β: Type ?u.17786α} (α: Type ?u.17783hs :hs: s₁ = s₂s₁ =s₁: Finset βs₂) (hfg : ∀s₂: Finset βa ∈a: ?m.18256s₂,s₂: Finset βff: β → αa =a: ?m.18256gg: β → αa) :a: ?m.18256s₁.s₁: Finset βsupsup: {α : Type ?u.18295} → {β : Type ?u.18294} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β → αs₂.s₂: Finset βsupsup: {α : Type ?u.18326} → {β : Type ?u.18325} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg :=g: β → αGoals accomplished! 🐙#align finset.sup_congr Finset.sup_congr @[simp] theoremGoals accomplished! 🐙_root_.map_finset_sup [SemilatticeSup_root_.map_finset_sup: ∀ {F : Type u_2} {α : Type u_3} {β : Type u_1} {ι : Type u_4} [inst : SemilatticeSup α] [inst_1 : OrderBot α] [inst_2 : SemilatticeSup β] [inst_3 : OrderBot β] [inst_4 : SupBotHomClass F α β] (f : F) (s : Finset ι) (g : ι → α), ↑f (sup s g) = sup s (↑f ∘ g)β] [OrderBotβ: Type ?u.18507β] [SupBotHomClassβ: Type ?u.18507FF: Type ?u.18501αα: Type ?u.18504β] (β: Type ?u.18507f :f: FF) (F: Type ?u.18501s : Finsets: Finset ιι) (ι: Type ?u.18513g :g: ι → αι →ι: Type ?u.18513α) :α: Type ?u.18504f (f: Fs.s: Finset ιsupsup: {α : Type ?u.23665} → {β : Type ?u.23664} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg) =g: ι → αs.s: Finset ιsup (sup: {α : Type ?u.23739} → {β : Type ?u.23738} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ∘f: Fg) := Finset.cons_induction_ong: ι → αs (map_bots: Finset ιf) funf: Fii: ?m.28234ss: ?m.28237__: ?m.28240h =>h: ?m.28243Goals accomplished! 🐙F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)F: Type u_2
α: Type u_3
β: Type u_1
γ: Type ?u.18510
ι: Type u_4
κ: Type ?u.18516
inst✝⁴: SemilatticeSup α
inst✝³: OrderBot α
s✝¹, s₁, s₂: Finset β
f✝, g✝: β → α
a: α
inst✝²: SemilatticeSup β
inst✝¹: OrderBot β
inst✝: SupBotHomClass F α β
f: F
s✝: Finset ι
g: ι → α
i: ι
s: Finset ι
x✝: ¬i ∈ s
h: ↑f (sup s g) = sup s (↑f ∘ g)#align map_finset_supGoals accomplished! 🐙map_finset_sup @[simp] protected theoremmap_finset_sup: ∀ {F : Type u_2} {α : Type u_3} {β : Type u_1} {ι : Type u_4} [inst : SemilatticeSup α] [inst_1 : OrderBot α] [inst_2 : SemilatticeSup β] [inst_3 : OrderBot β] [inst_4 : SupBotHomClass F α β] (f : F) (s : Finset ι) (g : ι → α), ↑f (sup s g) = sup s (↑f ∘ g)sup_le_iff {a :a: αα} :α: Type ?u.33151s.s: Finset βsupsup: {α : Type ?u.33614} → {β : Type ?u.33613} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ≤f: β → αa ↔ ∀a: αb ∈b: ?m.34064s,s: Finset βff: β → αb ≤b: ?m.34064a :=a: αGoals accomplished! 🐙#align finset.sup_le_iff Finset.sup_le_iff alias Finset.sup_le_iff ↔ _ sup_le #align finset.sup_le Finset.sup_le -- Porting note: removed `attribute [protected] sup_le` theorem sup_const_le : (Goals accomplished! 🐙s.s: Finset βsup funsup: {α : Type ?u.35342} → {β : Type ?u.35341} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → α_ =>_: ?m.35355a) ≤a: αa := Finset.sup_le funa: α__: ?m.35874_ => le_rfl #align finset.sup_const_le Finset.sup_const_le theorem_: ?m.35877le_sup {b :b: ββ} (β: Type ?u.36350hb :hb: b ∈ sb ∈b: βs) :s: Finset βff: β → αb ≤b: βs.s: Finset βsupsup: {α : Type ?u.36839} → {β : Type ?u.36838} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf := Finset.sup_le_iff.1 le_rflf: β → α__: ?m.37295hb #align finset.le_sup Finset.le_sup theoremhb: b ∈ sle_sup_of_le {b :b: ββ} (β: Type ?u.37961hb :hb: b ∈ sb ∈b: βs) (s: Finset βh :h: a ≤ f ba ≤a: αff: β → αb) :b: βa ≤a: αs.s: Finset βsupsup: {α : Type ?u.38873} → {β : Type ?u.38872} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf :=f: β → αh.trans <| le_suph: a ≤ f bhb #align finset.le_sup_of_le Finset.le_sup_of_le @[simp] theoremhb: b ∈ ssup_biUnion [DecidableEqsup_biUnion: ∀ [inst : DecidableEq β] (s : Finset γ) (t : γ → Finset β), sup (Finset.biUnion s t) f = sup s fun x => sup (t x) fβ] (β: Type ?u.39443s : Finsets: Finset γγ) (γ: Type ?u.39446t :t: γ → Finset βγ → Finsetγ: Type ?u.39446β) : (β: Type ?u.39443s.biUnions: Finset γt).t: γ → Finset βsupsup: {α : Type ?u.39974} → {β : Type ?u.39973} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β → αs.s: Finset γsup funsup: {α : Type ?u.40005} → {β : Type ?u.40004} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αx => (x: ?m.40017tt: γ → Finset βx).x: ?m.40017supsup: {α : Type ?u.40020} → {β : Type ?u.40019} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf := eq_of_forall_ge_iff funf: β → αc =>c: ?m.40141Goals accomplished! 🐙#align finset.sup_bUnionGoals accomplished! 🐙Finset.sup_biUnion theoremFinset.sup_biUnion: ∀ {α : Type u_3} {β : Type u_1} {γ : Type u_2} [inst : SemilatticeSup α] [inst_1 : OrderBot α] {f : β → α} [inst_2 : DecidableEq β] (s : Finset γ) (t : γ → Finset β), sup (Finset.biUnion s t) f = sup s fun x => sup (t x) fsup_const {sup_const: ∀ {α : Type u_2} {β : Type u_1} [inst : SemilatticeSup α] [inst_1 : OrderBot α] {s : Finset β}, Finset.Nonempty s → ∀ (c : α), (sup s fun x => c) = cs : Finsets: Finset ββ} (β: Type ?u.46375h :h: Finset.Nonempty ss.Nonempty) (s: Finset βc :c: αα) : (α: Type ?u.46372s.s: Finset βsup funsup: {α : Type ?u.46845} → {β : Type ?u.46844} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → α_ =>_: ?m.46857c) =c: αc := eq_of_forall_ge_iff (func: α_ => Finset.sup_le_iff.trans_: ?m.46931h.forall_const) #align finset.sup_consth: Finset.Nonempty sFinset.sup_const @[simp] theoremFinset.sup_const: ∀ {α : Type u_2} {β : Type u_1} [inst : SemilatticeSup α] [inst_1 : OrderBot α] {s : Finset β}, Finset.Nonempty s → ∀ (c : α), (sup s fun x => c) = csup_bot (s : Finsets: Finset ββ) : (β: Type ?u.47475s.s: Finset βsup funsup: {α : Type ?u.47936} → {β : Type ?u.47935} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → α_ =>_: ?m.47949⊥) = (⊥: ?m.47952⊥ :⊥: ?m.48123α) :=α: Type ?u.47472Goals accomplished! 🐙F: Type ?u.47469
α: Type u_2
β: Type u_1
γ: Type ?u.47478
ι: Type ?u.47481
κ: Type ?u.47484
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s, s₁, s₂: Finset β
f, g: β → α
a: α
inlF: Type ?u.47469
α: Type u_2
β: Type u_1
γ: Type ?u.47478
ι: Type ?u.47481
κ: Type ?u.47484
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s✝, s₁, s₂: Finset β
f, g: β → α
a: α
s: Finset β
hs: Finset.Nonempty s
inrF: Type ?u.47469
α: Type u_2
β: Type u_1
γ: Type ?u.47478
ι: Type ?u.47481
κ: Type ?u.47484
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s, s₁, s₂: Finset β
f, g: β → α
a: α
inlF: Type ?u.47469
α: Type u_2
β: Type u_1
γ: Type ?u.47478
ι: Type ?u.47481
κ: Type ?u.47484
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s✝, s₁, s₂: Finset β
f, g: β → α
a: α
s: Finset β
hs: Finset.Nonempty s
inrGoals accomplished! 🐙#align finset.sup_bot Finset.sup_bot theoremGoals accomplished! 🐙sup_ite (p :p: β → Propβ →β: Type ?u.48915Prop) [DecidablePredProp: Typep] : (p: β → Props.s: Finset βsup funsup: {α : Type ?u.49387} → {β : Type ?u.49386} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αi => ite (i: ?m.49400pp: β → Propi) (i: ?m.49400ff: β → αi) (i: ?m.49400gg: β → αi)) = (i: ?m.49400s.s: Finset βfilterfilter: {α : Type ?u.49432} → (p : α → Prop) → [inst : DecidablePred p] → Finset α → Finset αp).p: β → Propsupsup: {α : Type ?u.49454} → {β : Type ?u.49453} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ⊔ (f: β → αs.s: Finset βfilter funfilter: {α : Type ?u.49516} → (p : α → Prop) → [inst : DecidablePred p] → Finset α → Finset αi => ¬i: ?m.49524pp: β → Propi).i: ?m.49524supsup: {α : Type ?u.49559} → {β : Type ?u.49558} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg :=g: β → αfold_itefold_ite: ∀ {α : Type ?u.49637} {β : Type ?u.49636} {op : β → β → β} [hc : IsCommutative β op] [ha : IsAssociative β op] {f : α → β} {b : β} {s : Finset α} [inst : IsIdempotent β op] {g : α → β} (p : α → Prop) [inst : DecidablePred p], fold op b (fun i => if p i then f i else g i) s = op (fold op b f (filter p s)) (fold op b g (filter (fun i => ¬p i) s))_ #align finset.sup_ite Finset.sup_ite theorem_: ?m.49638 → Propsup_mono_fun {g :g: β → αβ →β: Type ?u.50010α} (h : ∀α: Type ?u.50007b ∈b: ?m.50471s,s: Finset βff: β → αb ≤b: ?m.50471gg: β → αb) :b: ?m.50471s.s: Finset βsupsup: {α : Type ?u.50932} → {β : Type ?u.50931} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ≤f: β → αs.s: Finset βsupsup: {α : Type ?u.50961} → {β : Type ?u.50960} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αg := Finset.sup_le fung: β → αbb: ?m.51064hb => le_trans (hhb: ?m.51067bb: ?m.51064hb) (le_suphb: ?m.51067hb) #align finset.sup_mono_fun Finset.sup_mono_fun theoremhb: ?m.51067sup_mono (h :h: s₁ ⊆ s₂s₁ ⊆s₁: Finset βs₂) :s₂: Finset βs₁.s₁: Finset βsupsup: {α : Type ?u.52090} → {β : Type ?u.52089} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf ≤f: β → αs₂.s₂: Finset βsupsup: {α : Type ?u.52121} → {β : Type ?u.52120} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf := Finset.sup_le (funf: β → α__: ?m.52636hb => le_sup (hb: ?m.52639hh: s₁ ⊆ s₂hb)) #align finset.sup_mono Finset.sup_mono protected theoremhb: ?m.52639sup_comm (s : Finsets: Finset ββ) (β: Type ?u.52746t : Finsett: Finset γγ) (γ: Type ?u.52749f :f: β → γ → αβ →β: Type ?u.52746γ →γ: Type ?u.52749α) : (α: Type ?u.52743s.s: Finset βsup funsup: {α : Type ?u.53216} → {β : Type ?u.53215} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αb =>b: ?m.53229t.t: Finset γsup (sup: {α : Type ?u.53232} → {β : Type ?u.53231} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αff: β → γ → αb)) =b: ?m.53229t.t: Finset γsup funsup: {α : Type ?u.53317} → {β : Type ?u.53316} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αc =>c: ?m.53329s.s: Finset βsup funsup: {α : Type ?u.53332} → {β : Type ?u.53331} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αb =>b: ?m.53393ff: β → γ → αbb: ?m.53393c :=c: ?m.53329Goals accomplished! 🐙#align finset.sup_comm Finset.sup_comm @[simp, nolintGoals accomplished! 🐙simpNF] -- Porting note: linter claims that LHS does not simplify theoremsimpNF: Std.Tactic.Lint.Lintersup_attach (s : Finsets: Finset ββ) (β: Type ?u.54422f :f: β → αβ →β: Type ?u.54422α) : (α: Type ?u.54419s.attach.s: Finset βsup funsup: {α : Type ?u.54890} → {β : Type ?u.54889} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αx =>x: ?m.54902ff: β → αx) =x: ?m.54902s.s: Finset βsupsup: {α : Type ?u.55053} → {β : Type ?u.55052} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf := (f: β → αs.attach.sup_map (Function.Embedding.subtypes: Finset β_)_: ?m.55091 → Propf).symm.trans <| congr_argf: β → α_ attach_map_val #align finset.sup_attach Finset.sup_attach /-- See also `Finset.product_biUnion`. -/ theorem_: ?m.55150 → ?m.55151sup_product_left (s : Finsets: Finset ββ) (β: Type ?u.55325t : Finsett: Finset γγ) (γ: Type ?u.55328f :f: β × γ → αβ ×β: Type ?u.55325γ →γ: Type ?u.55328α) : (α: Type ?u.55322s ×ˢs: Finset βt).t: Finset γsupsup: {α : Type ?u.55827} → {β : Type ?u.55826} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β × γ → αs.s: Finset βsup funsup: {α : Type ?u.55861} → {β : Type ?u.55860} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αi =>i: ?m.55873t.t: Finset γsup funsup: {α : Type ?u.55876} → {β : Type ?u.55875} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αi' =>i': ?m.55937f ⟨f: β × γ → αi,i: ?m.55873i'⟩ :=i': ?m.55937Goals accomplished! 🐙F: Type ?u.55319
α: Type u_3
β: Type u_1
γ: Type u_2
ι: Type ?u.55331
κ: Type ?u.55334
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s✝, s₁, s₂: Finset β
f✝, g: β → α
a: α
s: Finset β
t: Finset γ
f: β × γ → α
b: β
c: γ
hb: b ∈ s
hc: c ∈ t
refine_1F: Type ?u.55319
α: Type u_3
β: Type u_1
γ: Type u_2
ι: Type ?u.55331
κ: Type ?u.55334
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s✝, s₁, s₂: Finset β
f✝, g: β → α
a: α
s: Finset β
t: Finset γ
f: β × γ → α
b: β
hb: b ∈ s
c: γ
hc: c ∈ t
refine_2F: Type ?u.55319
α: Type u_3
β: Type u_1
γ: Type u_2
ι: Type ?u.55331
κ: Type ?u.55334
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s✝, s₁, s₂: Finset β
f✝, g: β → α
a: α
s: Finset β
t: Finset γ
f: β × γ → α
b: β
c: γ
hb: b ∈ s
hc: c ∈ t
refine_1F: Type ?u.55319
α: Type u_3
β: Type u_1
γ: Type u_2
ι: Type ?u.55331
κ: Type ?u.55334
inst✝¹: SemilatticeSup α
inst✝: OrderBot α
s✝, s₁, s₂: Finset β
f✝, g: β → α
a: α
s: Finset β
t: Finset γ
f: β × γ → α
b: β
hb: b ∈ s
c: γ
hc: c ∈ t
refine_2Goals accomplished! 🐙#align finset.sup_product_left Finset.sup_product_left theoremGoals accomplished! 🐙sup_product_right (s : Finsets: Finset ββ) (β: Type ?u.57933t : Finsett: Finset γγ) (γ: Type ?u.57936f :f: β × γ → αβ ×β: Type ?u.57933γ →γ: Type ?u.57936α) : (α: Type ?u.57930s ×ˢs: Finset βt).t: Finset γsupsup: {α : Type ?u.58435} → {β : Type ?u.58434} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αf =f: β × γ → αt.t: Finset γsup funsup: {α : Type ?u.58469} → {β : Type ?u.58468} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αi' =>i': ?m.58481s.s: Finset βsup funsup: {α : Type ?u.58484} → {β : Type ?u.58483} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αi =>i: ?m.58545f ⟨f: β × γ → αi,i: ?m.58545i'⟩ :=i': ?m.58481Goals accomplished! 🐙#align finset.sup_product_right Finset.sup_product_right @[simp] theoremGoals accomplished! 🐙sup_erase_bot [DecidableEqsup_erase_bot: ∀ {α : Type u_1} [inst : SemilatticeSup α] [inst_1 : OrderBot α] [inst_2 : DecidableEq α] (s : Finset α), sup (erase s ⊥) id = sup s idα] (α: Type ?u.58885s : Finsets: Finset αα) : (α: Type ?u.58885s.s: Finset αeraseerase: {α : Type ?u.59357} → [inst : DecidableEq α] → Finset α → α → Finset α⊥).⊥: ?m.59368supsup: {α : Type ?u.59889} → {β : Type ?u.59888} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αid =id: {α : Sort ?u.59900} → α → αs.s: Finset αsupsup: {α : Type ?u.59916} → {β : Type ?u.59915} → [inst : SemilatticeSup α] → [inst : OrderBot α] → Finset β → (β → α) → αid :=id: {α : Sort ?u.59927} → α → αGoals accomplished! 🐙F: Type ?u.58882
α: Type u_1
β: Type ?u.58888
γ: Type ?u.58891
ι: Type ?u.58894
κ: Type ?u.58897
inst✝²: SemilatticeSup α
inst✝¹: OrderBot α
s✝, s₁, s₂: Finset β
f, g: β → α
a: α
inst✝: DecidableEq α
s: Finset α
ha: ⊥ ∈ s
inlF: Type ?u.58882
α: Type u_1
β: Type ?u.58888
γ: Type ?u.58891
ι: Type ?u.58894
κ: Type ?u.58897
inst✝²: SemilatticeSup α
inst✝¹: OrderBot α
s✝, s₁, s₂: Finset β
f, g: β → α
a✝: α
inst✝: DecidableEq α
s: Finset α
a: α
ha: a ∈ s
ha': a ≠ ⊥
inrF: Type ?u.58882
α: Type u_1
β: Type ?u.58888
γ: Type ?u.58891
ι: Type ?u.58894
κ: Type ?u.58897
inst✝²: SemilatticeSup α
inst✝¹: OrderBot α
s✝, s₁, s₂: Finset β
f, g: β → α
a: α
inst✝: DecidableEq α
s: Finset α
ha: ⊥ ∈ s
inlF: Type ?u.58882
α: Type u_1
β: Type ?u.58888
γ: Type ?u.58891
ι: Type ?u.58894
κ: Type ?u.58897
inst✝²: SemilatticeSup α
inst✝¹: OrderBot α
s✝, s₁, s₂: Finset β
f, g: β → α
a✝: α
inst✝: DecidableEq α
s: Finset α
a: α
ha: a ∈ s
ha': a ≠ ⊥
inrGoals accomplished! 🐙