data.finset.lattice
⟷
Mathlib.Data.Finset.Lattice
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
sup'
/inf'
lemmas (#18989)
Match (most of) the lemmas between finset.sup
/finset.inf
and finset.sup'
/finset.inf'
. Also golf two proofs using eq_of_forall_ge_iff
to make sure both APIs prove their lemmas in as closely as possible a way. Also define finset.nontrivial
to match set.nontrivial
.
@@ -55,10 +55,6 @@ fold_map
@[simp] lemma sup_singleton {b : β} : ({b} : finset β).sup f = f b :=
sup_singleton
-lemma sup_union [decidable_eq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
-finset.induction_on s₁ (by rw [empty_union, sup_empty, bot_sup_eq]) $ λ a s has ih,
-by rw [insert_union, sup_insert, sup_insert, ih, sup_assoc]
-
lemma sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
begin
refine finset.cons_induction_on s _ (λ b t _ h, _),
@@ -91,6 +87,9 @@ lemma le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f := finset.sup_le_iff.1 le
lemma le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f := h.trans $ le_sup hb
+lemma sup_union [decidable_eq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
+eq_of_forall_ge_iff $ λ c, by simp [or_imp_distrib, forall_and_distrib]
+
@[simp] lemma sup_bUnion [decidable_eq β] (s : finset γ) (t : γ → finset β) :
(s.bUnion t).sup f = s.sup (λ x, (t x).sup f) :=
eq_of_forall_ge_iff $ λ c, by simp [@forall_swap _ β]
@@ -117,11 +116,7 @@ lemma sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f := finset.sup_le
protected lemma sup_comm (s : finset β) (t : finset γ) (f : β → γ → α) :
s.sup (λ b, t.sup (f b)) = t.sup (λ c, s.sup (λ b, f b c)) :=
-begin
- refine eq_of_forall_ge_iff (λ a, _),
- simp_rw finset.sup_le_iff,
- exact ⟨λ h c hc b hb, h b hb c hc, λ h b hb c hc, h c hc b hb⟩,
-end
+eq_of_forall_ge_iff $ λ a, by simpa using forall₂_swap
@[simp] lemma sup_attach (s : finset β) (f : β → α) : s.attach.sup (λ x, f x) = s.sup f :=
(s.attach.sup_map (function.embedding.subtype _) f).symm.trans $ congr_arg _ attach_map_val
@@ -129,10 +124,7 @@ end
/-- See also `finset.product_bUnion`. -/
lemma sup_product_left (s : finset β) (t : finset γ) (f : β × γ → α) :
(s ×ˢ t).sup f = s.sup (λ i, t.sup $ λ i', f ⟨i, i'⟩) :=
-begin
- simp only [le_antisymm_iff, finset.sup_le_iff, mem_product, and_imp, prod.forall],
- exact ⟨λ b c hb hc, (le_sup hb).trans' $ le_sup hc, λ b hb c hc, le_sup $ mem_product.2 ⟨hb, hc⟩⟩,
-end
+eq_of_forall_ge_iff $ λ a, by simp [@forall_swap _ γ]
lemma sup_product_right (s : finset β) (t : finset γ) (f : β × γ → α) :
(s ×ˢ t).sup f = t.sup (λ i', s.sup $ λ i, f ⟨i, i'⟩) :=
@@ -288,9 +280,6 @@ fold_map
@[simp] lemma inf_singleton {b : β} : ({b} : finset β).inf f = f b :=
inf_singleton
-lemma inf_union [decidable_eq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
-@sup_union αᵒᵈ _ _ _ _ _ _ _
-
lemma inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
@@ -301,6 +290,9 @@ by subst hs; exact finset.fold_congr hfg
(f : F) (s : finset ι) (g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
finset.cons_induction_on s (map_top f) $ λ i s _ h, by rw [inf_cons, inf_cons, map_inf, h]
+lemma inf_union [decidable_eq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
+@sup_union αᵒᵈ _ _ _ _ _ _ _
+
@[simp] lemma inf_bUnion [decidable_eq β] (s : finset γ) (t : γ → finset β) :
(s.bUnion t).inf f = s.inf (λ x, (t x).inf f) :=
@sup_bUnion αᵒᵈ _ _ _ _ _ _ _ _
@@ -628,11 +620,28 @@ end
@[simp] lemma sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
iff.intro (λ h b hb, trans (le_sup' f hb) h) (sup'_le H f)
+lemma sup'_union [decidable_eq β] {s₁ s₂ : finset β} (h₁ : s₁.nonempty) (h₂ : s₂.nonempty)
+ (f : β → α) :
+ (s₁ ∪ s₂).sup' (h₁.mono $ subset_union_left _ _) f = s₁.sup' h₁ f ⊔ s₂.sup' h₂ f :=
+eq_of_forall_ge_iff $ λ a, by simp [or_imp_distrib, forall_and_distrib]
+
lemma sup'_bUnion [decidable_eq β] {s : finset γ} (Hs : s.nonempty) {t : γ → finset β}
(Ht : ∀ b, (t b).nonempty) :
(s.bUnion t).sup' (Hs.bUnion (λ b _, Ht b)) f = s.sup' Hs (λ b, (t b).sup' (Ht b) f) :=
eq_of_forall_ge_iff $ λ c, by simp [@forall_swap _ β]
+protected lemma sup'_comm {t : finset γ} (hs : s.nonempty) (ht : t.nonempty) (f : β → γ → α) :
+ s.sup' hs (λ b, t.sup' ht (f b)) = t.sup' ht (λ c, s.sup' hs $ λ b, f b c) :=
+eq_of_forall_ge_iff $ λ a, by simpa using forall₂_swap
+
+lemma sup'_product_left {t : finset γ} (hs : s.nonempty) (ht : t.nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' (hs.product ht) f = s.sup' hs (λ i, t.sup' ht $ λ i', f ⟨i, i'⟩) :=
+eq_of_forall_ge_iff $ λ a, by simp [@forall_swap _ γ]
+
+lemma sup'_product_right {t : finset γ} (hs : s.nonempty) (ht : t.nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' (hs.product ht) f = t.sup' ht (λ i', s.sup' hs $ λ i, f ⟨i, i'⟩) :=
+by rw [sup'_product_left, finset.sup'_comm]
+
lemma comp_sup'_eq_sup'_comp [semilattice_sup γ] {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) :=
@@ -675,6 +684,15 @@ begin
simp only [sup'_le_iff, h₂] { contextual := tt }
end
+@[simp] lemma _root_.map_finset_sup' [semilattice_sup β] [sup_hom_class F α β] (f : F)
+ {s : finset ι} (hs) (g : ι → α) : f (s.sup' hs g) = s.sup' hs (f ∘ g) :=
+by refine hs.cons_induction _ _; intros; simp [*]
+
+@[simp] lemma sup'_image [decidable_eq β] {s : finset γ} {f : γ → β} (hs : (s.image f).nonempty)
+ (g : β → α) (hs': s.nonempty := (nonempty.image_iff _).1 hs) :
+ (s.image f).sup' hs g = s.sup' hs' (g ∘ f) :=
+by { rw ←with_bot.coe_eq_coe, simp only [coe_sup', sup_image, with_bot.coe_sup] }
+
@[simp] lemma sup'_map {s : finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).nonempty)
(hs': s.nonempty := finset.map_nonempty.mp hs) :
(s.map f).sup' hs g = s.sup' hs' (g ∘ f) :=
@@ -719,11 +737,28 @@ lemma inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a
@[simp] lemma le_inf'_iff : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b := @sup'_le_iff αᵒᵈ _ _ _ H f _
+lemma inf'_union [decidable_eq β] {s₁ s₂ : finset β} (h₁ : s₁.nonempty) (h₂ : s₂.nonempty)
+ (f : β → α) :
+ (s₁ ∪ s₂).inf' (h₁.mono $ subset_union_left _ _) f = s₁.inf' h₁ f ⊓ s₂.inf' h₂ f :=
+@sup'_union αᵒᵈ _ _ _ _ _ h₁ h₂ _
+
lemma inf'_bUnion [decidable_eq β] {s : finset γ} (Hs : s.nonempty) {t : γ → finset β}
(Ht : ∀ b, (t b).nonempty) :
(s.bUnion t).inf' (Hs.bUnion (λ b _, Ht b)) f = s.inf' Hs (λ b, (t b).inf' (Ht b) f) :=
@sup'_bUnion αᵒᵈ _ _ _ _ _ _ Hs _ Ht
+protected lemma inf'_comm {t : finset γ} (hs : s.nonempty) (ht : t.nonempty) (f : β → γ → α) :
+ s.inf' hs (λ b, t.inf' ht (f b)) = t.inf' ht (λ c, s.inf' hs $ λ b, f b c) :=
+@finset.sup'_comm αᵒᵈ _ _ _ _ _ hs ht _
+
+lemma inf'_product_left {t : finset γ} (hs : s.nonempty) (ht : t.nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' (hs.product ht) f = s.inf' hs (λ i, t.inf' ht $ λ i', f ⟨i, i'⟩) :=
+@sup'_product_left αᵒᵈ _ _ _ _ _ hs ht _
+
+lemma inf'_product_right {t : finset γ} (hs : s.nonempty) (ht : t.nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' (hs.product ht) f = t.inf' ht (λ i', s.inf' hs $ λ i, f ⟨i, i'⟩) :=
+@sup'_product_right αᵒᵈ _ _ _ _ _ hs ht _
+
lemma comp_inf'_eq_inf'_comp [semilattice_inf γ] {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) :=
@@ -741,6 +776,15 @@ lemma inf'_mem (s : set α) (w : ∀ x y ∈ s, x ⊓ y ∈ s)
s.inf' H f = t.inf' (h₁ ▸ H) g :=
@sup'_congr αᵒᵈ _ _ _ H _ _ _ h₁ h₂
+@[simp] lemma _root_.map_finset_inf' [semilattice_inf β] [inf_hom_class F α β] (f : F)
+ {s : finset ι} (hs) (g : ι → α) : f (s.inf' hs g) = s.inf' hs (f ∘ g) :=
+by refine hs.cons_induction _ _; intros; simp [*]
+
+@[simp] lemma inf'_image [decidable_eq β] {s : finset γ} {f : γ → β} (hs : (s.image f).nonempty)
+ (g : β → α) (hs': s.nonempty := (nonempty.image_iff _).1 hs) :
+ (s.image f).inf' hs g = s.inf' hs' (g ∘ f) :=
+@sup'_image αᵒᵈ _ _ _ _ _ _ hs _ hs'
+
@[simp] lemma inf'_map {s : finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).nonempty)
(hs': s.nonempty := finset.map_nonempty.mp hs) :
(s.map f).inf' hs g = s.inf' hs' (g ∘ f) :=
@@ -829,6 +873,37 @@ end inf'
@[simp] lemma of_dual_inf' [semilattice_sup α] {s : finset ι} (hs : s.nonempty) (f : ι → αᵒᵈ) :
of_dual (s.inf' hs f) = s.sup' hs (of_dual ∘ f) := rfl
+section distrib_lattice
+variables [distrib_lattice α] {s : finset ι} {t : finset κ} (hs : s.nonempty) (ht : t.nonempty)
+ {f : ι → α} {g : κ → α} {a : α}
+
+lemma sup'_inf_distrib_left (f : ι → α) (a : α) : a ⊓ s.sup' hs f = s.sup' hs (λ i, a ⊓ f i) :=
+begin
+ refine hs.cons_induction (λ i, _) (λ i s hi hs ih, _) ,
+ { simp },
+ { simp_rw [sup'_cons hs, inf_sup_left],
+ rw ih }
+end
+
+lemma sup'_inf_distrib_right (f : ι → α) (a : α) : s.sup' hs f ⊓ a = s.sup' hs (λ i, f i ⊓ a) :=
+by { rw [inf_comm, sup'_inf_distrib_left], simp_rw inf_comm }
+
+lemma sup'_inf_sup' (f : ι → α) (g : κ → α) :
+ s.sup' hs f ⊓ t.sup' ht g = (s ×ˢ t).sup' (hs.product ht) (λ i, f i.1 ⊓ g i.2) :=
+by simp_rw [finset.sup'_inf_distrib_right, finset.sup'_inf_distrib_left, sup'_product_left]
+
+lemma inf'_sup_distrib_left (f : ι → α) (a : α) : a ⊔ s.inf' hs f = s.inf' hs (λ i, a ⊔ f i) :=
+@sup'_inf_distrib_left αᵒᵈ _ _ _ hs _ _
+
+lemma inf'_sup_distrib_right (f : ι → α) (a : α) : s.inf' hs f ⊔ a = s.inf' hs (λ i, f i ⊔ a) :=
+@sup'_inf_distrib_right αᵒᵈ _ _ _ hs _ _
+
+lemma inf'_sup_inf' (f : ι → α) (g : κ → α) :
+ s.inf' hs f ⊔ t.inf' ht g = (s ×ˢ t).inf' (hs.product ht) (λ i, f i.1 ⊔ g i.2) :=
+@sup'_inf_sup' αᵒᵈ _ _ _ _ _ hs ht _ _
+
+end distrib_lattice
+
section linear_order
variables [linear_order α] {s : finset ι} (H : s.nonempty) {f : ι → α} {a : α}
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Dualise a few existing lemmas, protect finset.sup_eq_bot_iff
/finset.inf_eq_top_iff
, move map_finset_sup
/map_finset_inf
from order.hom.lattice
to data.finset.lattice
, make binders semi-implicit in finset.disjoint_sup_left
and friends to avoid overly explicit binders in a local assumption after rewriting.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -5,6 +5,7 @@ Authors: Mario Carneiro
-/
import data.finset.fold
import data.finset.option
+import data.finset.pi
import data.finset.prod
import data.multiset.lattice
import order.complete_lattice
@@ -17,7 +18,7 @@ import order.hom.lattice
> Any changes to this file require a corresponding PR to mathlib4.
-/
-variables {F α β γ ι : Type*}
+variables {F α β γ ι κ : Type*}
namespace finset
open multiset order_dual
@@ -226,8 +227,7 @@ lemma sup_mem
@sup_induction _ _ _ _ _ _ (∈ s) w₁ w₂ h
@[simp]
-lemma sup_eq_bot_iff (f : β → α)
- (S : finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ :=
+protected lemma sup_eq_bot_iff (f : β → α) (S : finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ :=
begin
classical,
induction S using finset.induction with a S haS hi;
@@ -377,8 +377,7 @@ lemma inf_mem
@inf_induction _ _ _ _ _ _ (∈ s) w₁ w₂ h
@[simp]
-lemma inf_eq_top_iff (f : β → α)
- (S : finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
+protected lemma inf_eq_top_iff (f : β → α) (S : finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
@finset.sup_eq_bot_iff αᵒᵈ _ _ _ _ _
end inf
@@ -396,7 +395,7 @@ section distrib_lattice
variables [distrib_lattice α]
section order_bot
-variables [order_bot α] {s : finset β} {f : β → α} {a : α}
+variables [order_bot α] {s : finset ι} {t : finset κ} {f : ι → α} {g : κ → α} {a : α}
lemma sup_inf_distrib_left (s : finset ι) (f : ι → α) (a : α) :
a ⊓ s.sup f = s.sup (λ i, a ⊓ f i) :=
@@ -410,16 +409,20 @@ lemma sup_inf_distrib_right (s : finset ι) (f : ι → α) (a : α) :
s.sup f ⊓ a = s.sup (λ i, f i ⊓ a) :=
by { rw [_root_.inf_comm, s.sup_inf_distrib_left], simp_rw _root_.inf_comm }
-protected lemma disjoint_sup_right : disjoint a (s.sup f) ↔ ∀ i ∈ s, disjoint a (f i) :=
-by simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
+protected lemma disjoint_sup_right : disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → disjoint a (f i) :=
+by simp only [disjoint_iff, sup_inf_distrib_left, finset.sup_eq_bot_iff]
-protected lemma disjoint_sup_left : disjoint (s.sup f) a ↔ ∀ i ∈ s, disjoint (f i) a :=
-by simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
+protected lemma disjoint_sup_left : disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → disjoint (f i) a :=
+by simp only [disjoint_iff, sup_inf_distrib_right, finset.sup_eq_bot_iff]
+
+lemma sup_inf_sup (s : finset ι) (t : finset κ) (f : ι → α) (g : κ → α) :
+ s.sup f ⊓ t.sup g = (s ×ˢ t).sup (λ i, f i.1 ⊓ g i.2) :=
+by simp_rw [finset.sup_inf_distrib_right, finset.sup_inf_distrib_left, sup_product_left]
end order_bot
section order_top
-variables [order_top α]
+variables [order_top α] {f : ι → α} {g : κ → α} {s : finset ι} {t : finset κ} {a : α}
lemma inf_sup_distrib_left (s : finset ι) (f : ι → α) (a : α) :
a ⊔ s.inf f = s.inf (λ i, a ⊔ f i) :=
@@ -429,7 +432,49 @@ lemma inf_sup_distrib_right (s : finset ι) (f : ι → α) (a : α) :
s.inf f ⊔ a = s.inf (λ i, f i ⊔ a) :=
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
+protected lemma codisjoint_inf_right : codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → codisjoint a (f i) :=
+@finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
+
+protected lemma codisjoint_inf_left : codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → codisjoint (f i) a :=
+@finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
+
+lemma inf_sup_inf (s : finset ι) (t : finset κ) (f : ι → α) (g : κ → α) :
+ s.inf f ⊔ t.inf g = (s ×ˢ t).inf (λ i, f i.1 ⊔ g i.2) :=
+@sup_inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+
end order_top
+
+section bounded_order
+variables [bounded_order α] [decidable_eq ι]
+
+--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
+lemma inf_sup {κ : ι → Type*} (s : finset ι) (t : Π i, finset (κ i)) (f : Π i, κ i → α) :
+ s.inf (λ i, (t i).sup (f i)) = (s.pi t).sup (λ g, s.attach.inf $ λ i, f _ $ g _ i.prop) :=
+begin
+ induction s using finset.induction with i s hi ih,
+ { simp },
+ rw [inf_insert, ih, attach_insert, sup_inf_sup],
+ refine eq_of_forall_ge_iff (λ c, _),
+ simp only [subtype.val_eq_coe, finset.sup_le_iff, mem_product, mem_pi, and_imp, prod.forall,
+ inf_insert, inf_image],
+ refine ⟨λ h g hg, h (g i $ mem_insert_self _ _) (λ j hj, g j $ mem_insert_of_mem hj)
+ (hg _ $ mem_insert_self _ _) (λ j hj, hg _ $ mem_insert_of_mem hj), λ h a g ha hg, _⟩,
+ -- TODO: This `have` must be named to prevent it being shadowed by the internal `this` in `simpa`
+ have aux : ∀ j : {x // x ∈ s}, ↑j ≠ i := λ j : s, ne_of_mem_of_not_mem j.2 hi,
+ simpa only [cast_eq, dif_pos, function.comp, subtype.coe_mk, dif_neg, aux]
+ using h (λ j hj, if hji : j = i then cast (congr_arg κ hji.symm) a
+ else g _ $ mem_of_mem_insert_of_ne hj hji) _,
+ simp_rw mem_insert,
+ rintro j (rfl | hj),
+ { simpa },
+ { simpa [ne_of_mem_of_not_mem hj hi] using hg _ _ }
+end
+
+lemma sup_inf {κ : ι → Type*} (s : finset ι) (t : Π i, finset (κ i)) (f : Π i, κ i → α) :
+ s.sup (λ i, (t i).inf (f i)) = (s.pi t).inf (λ g, s.attach.sup $ λ i, f _ $ g _ i.2) :=
+@inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+
+end bounded_order
end distrib_lattice
section boolean_algebra
@@ -456,6 +501,21 @@ begin
{ rw [inf_cons, inf_cons, h, inf_sdiff] }
end
+lemma inf_himp_right (s : finset ι) (f : ι → α) (a : α) : s.inf (λ b, f b ⇨ a) = s.sup f ⇨ a :=
+@sup_sdiff_left αᵒᵈ _ _ _ _ _
+
+lemma sup_himp_right (hs : s.nonempty) (f : ι → α) (a : α) : s.sup (λ b, f b ⇨ a) = s.inf f ⇨ a :=
+@inf_sdiff_left αᵒᵈ _ _ _ hs _ _
+
+lemma sup_himp_left (hs : s.nonempty) (f : ι → α) (a : α) : s.sup (λ b, a ⇨ f b) = a ⇨ s.sup f :=
+@inf_sdiff_right αᵒᵈ _ _ _ hs _ _
+
+@[simp] protected lemma compl_sup (s : finset ι) (f : ι → α) : (s.sup f)ᶜ = s.inf (λ i, (f i)ᶜ) :=
+map_finset_sup (order_iso.compl α) _ _
+
+@[simp] protected lemma compl_inf (s : finset ι) (f : ι → α) : (s.inf f)ᶜ = s.sup (λ i, (f i)ᶜ) :=
+map_finset_inf (order_iso.compl α) _ _
+
end boolean_algebra
section linear_order
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Move map_finset_sup
/map_finset_inf
from order.hom.lattice
to data.finset.lattice
. This breaks a few unqualified downstream uses of submodule.map_bot
.
@@ -8,6 +8,7 @@ import data.finset.option
import data.finset.prod
import data.multiset.lattice
import order.complete_lattice
+import order.hom.lattice
/-!
# Lattice operations on finsets
@@ -16,7 +17,7 @@ import order.complete_lattice
> Any changes to this file require a corresponding PR to mathlib4.
-/
-variables {α β γ ι : Type*}
+variables {F α β γ ι : Type*}
namespace finset
open multiset order_dual
@@ -68,6 +69,10 @@ end
theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.sup f = s₂.sup g :=
by subst hs; exact finset.fold_congr hfg
+@[simp] lemma _root_.map_finset_sup [semilattice_sup β] [order_bot β] [sup_bot_hom_class F α β]
+ (f : F) (s : finset ι) (g : ι → α) : f (s.sup g) = s.sup (f ∘ g) :=
+finset.cons_induction_on s (map_bot f) $ λ i s _ h, by rw [sup_cons, sup_cons, map_sup, h]
+
@[simp] protected lemma sup_le_iff {a : α} : s.sup f ≤ a ↔ (∀ b ∈ s, f b ≤ a) :=
begin
apply iff.trans multiset.sup_le,
@@ -292,6 +297,10 @@ lemma inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.inf f = s₂.inf g :=
by subst hs; exact finset.fold_congr hfg
+@[simp] lemma _root_.map_finset_inf [semilattice_inf β] [order_top β] [inf_top_hom_class F α β]
+ (f : F) (s : finset ι) (g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
+finset.cons_induction_on s (map_top f) $ λ i s _ h, by rw [inf_cons, inf_cons, map_inf, h]
+
@[simp] lemma inf_bUnion [decidable_eq β] (s : finset γ) (t : γ → finset β) :
(s.bUnion t).inf f = s.inf (λ x, (t x).inf f) :=
@sup_bUnion αᵒᵈ _ _ _ _ _ _ _ _
@@ -337,32 +346,6 @@ lemma inf_product_right (s : finset β) (t : finset γ) (f : β × γ → α) :
@[simp] lemma inf_erase_top [decidable_eq α] (s : finset α) : (s.erase ⊤).inf id = s.inf id :=
@sup_erase_bot αᵒᵈ _ _ _ _
-lemma sup_sdiff_left {α β : Type*} [boolean_algebra α] (s : finset β) (f : β → α) (a : α) :
- s.sup (λ b, a \ f b) = a \ s.inf f :=
-begin
- refine finset.cons_induction_on s _ (λ b t _ h, _),
- { rw [sup_empty, inf_empty, sdiff_top] },
- { rw [sup_cons, inf_cons, h, sdiff_inf] }
-end
-
-lemma inf_sdiff_left {α β : Type*} [boolean_algebra α] {s : finset β} (hs : s.nonempty) (f : β → α)
- (a : α) :
- s.inf (λ b, a \ f b) = a \ s.sup f :=
-begin
- induction hs using finset.nonempty.cons_induction with b b t _ _ h,
- { rw [sup_singleton, inf_singleton] },
- { rw [sup_cons, inf_cons, h, sdiff_sup] }
-end
-
-lemma inf_sdiff_right {α β : Type*} [boolean_algebra α] {s : finset β} (hs : s.nonempty) (f : β → α)
- (a : α) :
- s.inf (λ b, f b \ a) = s.inf f \ a :=
-begin
- induction hs using finset.nonempty.cons_induction with b b t _ _ h,
- { rw [inf_singleton, inf_singleton] },
- { rw [inf_cons, inf_cons, h, inf_sdiff] }
-end
-
lemma comp_inf_eq_inf_comp [semilattice_inf γ] [order_top γ] {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) :=
@@ -449,6 +432,32 @@ lemma inf_sup_distrib_right (s : finset ι) (f : ι → α) (a : α) :
end order_top
end distrib_lattice
+section boolean_algebra
+variables [boolean_algebra α] {s : finset ι}
+
+lemma sup_sdiff_left (s : finset ι) (f : ι → α) (a : α) : s.sup (λ b, a \ f b) = a \ s.inf f :=
+begin
+ refine finset.cons_induction_on s _ (λ b t _ h, _),
+ { rw [sup_empty, inf_empty, sdiff_top] },
+ { rw [sup_cons, inf_cons, h, sdiff_inf] }
+end
+
+lemma inf_sdiff_left (hs : s.nonempty) (f : ι → α) (a : α) : s.inf (λ b, a \ f b) = a \ s.sup f :=
+begin
+ induction hs using finset.nonempty.cons_induction with b b t _ _ h,
+ { rw [sup_singleton, inf_singleton] },
+ { rw [sup_cons, inf_cons, h, sdiff_sup] }
+end
+
+lemma inf_sdiff_right (hs : s.nonempty) (f : ι → α) (a : α) : s.inf (λ b, f b \ a) = s.inf f \ a :=
+begin
+ induction hs using finset.nonempty.cons_induction with b b t _ _ h,
+ { rw [inf_singleton, inf_singleton] },
+ { rw [inf_cons, inf_cons, h, inf_sdiff] }
+end
+
+end boolean_algebra
+
section linear_order
variables [linear_order α]
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
finset.sup_finset_image
(#18893)
in favor of the identical finset.sup_image
(up to argument order) in the same file.
@@ -1479,14 +1479,6 @@ lemma supr_finset_image {f : γ → α} {g : α → β} {s : finset γ} :
(⨆ x ∈ s.image f, g x) = (⨆ y ∈ s, g (f y)) :=
by rw [← supr_coe, coe_image, supr_image, supr_coe]
-lemma sup_finset_image {β γ : Type*} [semilattice_sup β] [order_bot β]
- (f : γ → α) (g : α → β) (s : finset γ) :
- (s.image f).sup g = s.sup (g ∘ f) :=
-begin
- classical,
- induction s using finset.induction_on with a s' ha ih; simp *
-end
-
lemma infi_finset_image {f : γ → α} {g : α → β} {s : finset γ} :
(⨅ x ∈ s.image f, g x) = (⨅ y ∈ s, g (f y)) :=
by rw [← infi_coe, coe_image, infi_image, infi_coe]
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
The main result is the bound one_add_le_seminorm_sup_apply
, which is sometimes in the literature used as the definition of the Schwartz space.
We don't really care about the 2^k
factor, since this result is usually used to prove that certain operators are bounded on Schwartz space and hence finiteness of the right hand side is all that matters.
One application is to show that the product of a Schwartz function and a smooth polynomially growing function is again Schwartz.
Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -83,6 +83,8 @@ lemma sup_const_le : s.sup (λ _, a) ≤ a := finset.sup_le $ λ _ _, le_rfl
lemma le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f := finset.sup_le_iff.1 le_rfl _ hb
+lemma le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f := h.trans $ le_sup hb
+
@[simp] lemma sup_bUnion [decidable_eq β] (s : finset γ) (t : γ → finset β) :
(s.bUnion t).sup f = s.sup (λ x, (t x).sup f) :=
eq_of_forall_ge_iff $ λ c, by simp [@forall_swap _ β]
@@ -310,6 +312,8 @@ lemma le_inf_const_le : a ≤ s.inf (λ _, a) := finset.le_inf $ λ _ _, le_rfl
lemma inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b := finset.le_inf_iff.1 le_rfl _ hb
+lemma inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a := (inf_le hb).trans h
+
lemma inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
finset.le_inf (λ b hb, le_trans (inf_le hb) (h b hb))
@@ -542,6 +546,9 @@ by { rw [←with_bot.coe_le_coe, coe_sup'],
lemma le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f :=
by { rw [←with_bot.coe_le_coe, coe_sup'], exact le_sup h, }
+lemma le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
+h.trans $ le_sup' _ hb
+
@[simp] lemma sup'_const (a : α) : s.sup' H (λ b, a) = a :=
begin
apply le_antisymm,
@@ -637,6 +644,7 @@ variables {s : finset β} (H : s.nonempty) (f : β → α) {a : α} {b : β}
lemma le_inf' (hs : ∀ b ∈ s, a ≤ f b) : a ≤ s.inf' H f := @sup'_le αᵒᵈ _ _ _ H f _ hs
lemma inf'_le (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b := @le_sup' αᵒᵈ _ _ _ f _ h
+lemma inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a := (inf'_le _ hb).trans h
@[simp] lemma inf'_const (a : α) : s.inf' H (λ b, a) = a := @sup'_const αᵒᵈ _ _ _ H _
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
finset.disjoint_sup_left
/finset.disjoint_sup_right
conflict with disjoint_sup_left
/disjoint_sup_right
when finset
is open, so we protect them.
@@ -423,10 +423,10 @@ lemma sup_inf_distrib_right (s : finset ι) (f : ι → α) (a : α) :
s.sup f ⊓ a = s.sup (λ i, f i ⊓ a) :=
by { rw [_root_.inf_comm, s.sup_inf_distrib_left], simp_rw _root_.inf_comm }
-lemma disjoint_sup_right : disjoint a (s.sup f) ↔ ∀ i ∈ s, disjoint a (f i) :=
+protected lemma disjoint_sup_right : disjoint a (s.sup f) ↔ ∀ i ∈ s, disjoint a (f i) :=
by simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
-lemma disjoint_sup_left : disjoint (s.sup f) a ↔ ∀ i ∈ s, disjoint (f i) a :=
+protected lemma disjoint_sup_left : disjoint (s.sup f) a ↔ ∀ i ∈ s, disjoint (f i) a :=
by simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
end order_bot
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1567,7 +1567,7 @@ variable [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ι → α} {a :
theorem le_sup'_iff : a ≤ s.sup' H f ↔ ∃ b ∈ s, a ≤ f b :=
by
rw [← WithBot.coe_le_coe, coe_sup', Finset.le_sup_iff (WithBot.bot_lt_coe a)]
- exact bex_congr fun b hb => WithBot.coe_le_coe
+ exact exists₂_congr fun b hb => WithBot.coe_le_coe
#align finset.le_sup'_iff Finset.le_sup'_iff
-/
@@ -1576,7 +1576,7 @@ theorem le_sup'_iff : a ≤ s.sup' H f ↔ ∃ b ∈ s, a ≤ f b :=
theorem lt_sup'_iff : a < s.sup' H f ↔ ∃ b ∈ s, a < f b :=
by
rw [← WithBot.coe_lt_coe, coe_sup', Finset.lt_sup_iff]
- exact bex_congr fun b hb => WithBot.coe_lt_coe
+ exact exists₂_congr fun b hb => WithBot.coe_lt_coe
#align finset.lt_sup'_iff Finset.lt_sup'_iff
-/
@@ -1585,7 +1585,7 @@ theorem lt_sup'_iff : a < s.sup' H f ↔ ∃ b ∈ s, a < f b :=
theorem sup'_lt_iff : s.sup' H f < a ↔ ∀ i ∈ s, f i < a :=
by
rw [← WithBot.coe_lt_coe, coe_sup', Finset.sup_lt_iff (WithBot.bot_lt_coe a)]
- exact ball_congr fun b hb => WithBot.coe_lt_coe
+ exact forall₂_congr fun b hb => WithBot.coe_lt_coe
#align finset.sup'_lt_iff Finset.sup'_lt_iff
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -333,7 +333,7 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup_mem /-
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
@@ -607,7 +607,7 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
#align finset.inf_induction Finset.inf_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.inf_mem /-
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@@ -1141,7 +1141,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
#align finset.sup'_induction Finset.sup'_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup'_mem /-
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
@@ -1323,7 +1323,7 @@ theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
#align finset.inf'_induction Finset.inf'_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.inf'_mem /-
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
@@ -1376,7 +1376,7 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
#align finset.sup'_eq_sup Finset.sup'_eq_sup
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (a b «expr ∈ » s) -/
#print SupClosed.finsetSup_mem /-
theorem finsetSup_mem {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
@@ -1402,7 +1402,7 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
#align finset.inf'_eq_inf Finset.inf'_eq_inf
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (a b «expr ∈ » s) -/
#print InfClosed.finsetInf_mem /-
theorem finsetInf_mem {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@@ -2211,8 +2211,8 @@ theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
#align finset.exists_next_left Finset.exists_next_left
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.card_le_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card t + 1`. -/
theorem card_le_of_interleaved {s t : Finset α}
@@ -2246,7 +2246,7 @@ theorem card_le_of_interleaved {s t : Finset α}
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.card_le_diff_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1713,7 +1713,7 @@ theorem max_eq_bot {s : Finset α} : s.max = ⊥ ↔ s = ∅ :=
s.eq_empty_or_nonempty.elim id fun H =>
by
let ⟨a, ha⟩ := max_of_nonempty H
- rw [h] at ha <;> cases ha,
+ rw [h] at ha <;> cases ha,
fun h => h.symm ▸ max_empty⟩
#align finset.max_eq_bot Finset.max_eq_bot
-/
@@ -1725,7 +1725,7 @@ theorem mem_of_max {s : Finset α} : ∀ {a : α}, s.max = a → a ∈ s :=
by
by_cases p : b = a
· induction p; exact mem_insert_self b s
- · cases' max_choice (↑b) s.max with q q <;> rw [max_insert, q] at h
+ · cases' max_choice (↑b) s.max with q q <;> rw [max_insert, q] at h
· cases h; cases p rfl
· exact mem_insert_of_mem (ih h)
#align finset.mem_of_max Finset.mem_of_max
@@ -1823,7 +1823,7 @@ theorem min_eq_top {s : Finset α} : s.min = ⊤ ↔ s = ∅ :=
s.eq_empty_or_nonempty.elim id fun H =>
by
let ⟨a, ha⟩ := min_of_nonempty H
- rw [h] at ha <;> cases ha,
+ rw [h] at ha <;> cases ha,
fun h => h.symm ▸ min_empty⟩
#align finset.min_eq_top Finset.min_eq_top
-/
@@ -2313,10 +2313,10 @@ theorem induction_on_max_value [DecidableEq ι] (f : ι → α) {p : Finset ι
by
induction' s using Finset.strongInductionOn with s ihs
rcases(s.image f).eq_empty_or_nonempty with (hne | hne)
- · simp only [image_eq_empty] at hne
+ · simp only [image_eq_empty] at hne
simp only [hne, h0]
· have H : (s.image f).max' hne ∈ s.image f := max'_mem (s.image f) hne
- simp only [mem_image, exists_prop] at H
+ simp only [mem_image, exists_prop] at H
rcases H with ⟨a, has, hfa⟩
rw [← insert_erase has]
refine' step _ _ (not_mem_erase a s) (fun x hx => _) (ihs _ <| erase_ssubset has)
@@ -2370,7 +2370,7 @@ theorem isGLB_iff_isLeast [LinearOrder α] (i : α) (s : Finset α) (hs : s.None
by
refine' ⟨fun his => _, IsLeast.isGLB⟩
suffices i = min' s hs by rw [this]; exact is_least_min' s hs
- rw [IsGLB, IsGreatest, mem_lowerBounds, mem_upperBounds] at his
+ rw [IsGLB, IsGreatest, mem_lowerBounds, mem_upperBounds] at his
exact le_antisymm (his.1 (Finset.min' s hs) (Finset.min'_mem s hs)) (his.2 _ (Finset.min'_le s))
#align finset.is_glb_iff_is_least Finset.isGLB_iff_isLeast
-/
@@ -2436,7 +2436,7 @@ theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β
refine' ⟨v, _, hfv⟩
simp only [hv, or_true_iff, Finset.mem_insert]
· rintro ⟨v, hv, hfv⟩
- rw [Finset.mem_insert] at hv
+ rw [Finset.mem_insert] at hv
rcases hv with (rfl | hv)
· exact Or.inl hfv
· refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -313,15 +313,28 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
#print Finset.sup_le_of_le_directed /-
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
- (∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by classical
+ (∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by
+ classical
+ apply Finset.induction_on t
+ ·
+ simpa only [forall_prop_of_true, and_true_iff, forall_prop_of_false, bot_le, not_false_iff,
+ sup_empty, forall_true_iff, not_mem_empty]
+ · intro a r har ih h
+ have incs : ↑r ⊆ ↑(insert a r) := by rw [Finset.coe_subset]; apply Finset.subset_insert
+ -- x ∈ s is above the sup of r
+ obtain ⟨x, ⟨hxs, hsx_sup⟩⟩ := ih fun x hx => h x <| incs hx
+ -- y ∈ s is above a
+ obtain ⟨y, hys, hay⟩ := h a (Finset.mem_insert_self a r)
+ -- z ∈ s is above x and y
+ obtain ⟨z, hzs, ⟨hxz, hyz⟩⟩ := hdir x hxs y hys
+ use z, hzs
+ rw [sup_insert, id.def, sup_le_iff]
+ exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup_mem /-
--- x ∈ s is above the sup of r
--- y ∈ s is above a
--- z ∈ s is above x and y
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s)
@@ -333,7 +346,7 @@ theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y
#print Finset.sup_eq_bot_iff /-
@[simp]
protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
- classical
+ classical induction' S using Finset.induction with a S haS hi <;> simp [*]
#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iff
-/
@@ -367,7 +380,8 @@ theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x
#print Finset.sup_eq_sSup_image /-
theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
- s.sup f = sSup (f '' s) := by classical
+ s.sup f = sSup (f '' s) := by
+ classical rw [← Finset.coe_image, ← sup_id_eq_Sup, sup_image, Function.id_comp]
#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_image
-/
@@ -2407,7 +2421,25 @@ theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset
#print Multiset.mem_sup /-
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β} {x : β} :
- x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by classical
+ x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by
+ classical
+ apply s.induction_on
+ · simp
+ · intro a s has hxs
+ rw [Finset.sup_insert, Multiset.sup_eq_union, Multiset.mem_union]
+ constructor
+ · intro hxi
+ cases' hxi with hf hf
+ · refine' ⟨a, _, hf⟩
+ simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert]
+ · rcases hxs.mp hf with ⟨v, hv, hfv⟩
+ refine' ⟨v, _, hfv⟩
+ simp only [hv, or_true_iff, Finset.mem_insert]
+ · rintro ⟨v, hv, hfv⟩
+ rw [Finset.mem_insert] at hv
+ rcases hv with (rfl | hv)
+ · exact Or.inl hfv
+ · refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
#align multiset.mem_sup Multiset.mem_sup
-/
@@ -2456,7 +2488,11 @@ variable {ι' : Sort _} [CompleteLattice α]
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `supr_eq_supr_finset'` for a version
that works for `ι : Sort*`. -/
-theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by classical
+theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
+ classical exact
+ le_antisymm
+ (iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl)
+ (iSup_le fun t => iSup_le fun b => iSup_le fun hb => le_iSup _ _)
#align supr_eq_supr_finset iSup_eq_iSup_finset
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -313,28 +313,15 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
#print Finset.sup_le_of_le_directed /-
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
- (∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by
- classical
- apply Finset.induction_on t
- ·
- simpa only [forall_prop_of_true, and_true_iff, forall_prop_of_false, bot_le, not_false_iff,
- sup_empty, forall_true_iff, not_mem_empty]
- · intro a r har ih h
- have incs : ↑r ⊆ ↑(insert a r) := by rw [Finset.coe_subset]; apply Finset.subset_insert
- -- x ∈ s is above the sup of r
- obtain ⟨x, ⟨hxs, hsx_sup⟩⟩ := ih fun x hx => h x <| incs hx
- -- y ∈ s is above a
- obtain ⟨y, hys, hay⟩ := h a (Finset.mem_insert_self a r)
- -- z ∈ s is above x and y
- obtain ⟨z, hzs, ⟨hxz, hyz⟩⟩ := hdir x hxs y hys
- use z, hzs
- rw [sup_insert, id.def, sup_le_iff]
- exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
+ (∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by classical
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup_mem /-
+-- x ∈ s is above the sup of r
+-- y ∈ s is above a
+-- z ∈ s is above x and y
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s)
@@ -346,7 +333,7 @@ theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y
#print Finset.sup_eq_bot_iff /-
@[simp]
protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
- classical induction' S using Finset.induction with a S haS hi <;> simp [*]
+ classical
#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iff
-/
@@ -380,8 +367,7 @@ theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x
#print Finset.sup_eq_sSup_image /-
theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
- s.sup f = sSup (f '' s) := by
- classical rw [← Finset.coe_image, ← sup_id_eq_Sup, sup_image, Function.id_comp]
+ s.sup f = sSup (f '' s) := by classical
#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_image
-/
@@ -2421,25 +2407,7 @@ theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset
#print Multiset.mem_sup /-
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β} {x : β} :
- x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by
- classical
- apply s.induction_on
- · simp
- · intro a s has hxs
- rw [Finset.sup_insert, Multiset.sup_eq_union, Multiset.mem_union]
- constructor
- · intro hxi
- cases' hxi with hf hf
- · refine' ⟨a, _, hf⟩
- simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert]
- · rcases hxs.mp hf with ⟨v, hv, hfv⟩
- refine' ⟨v, _, hfv⟩
- simp only [hv, or_true_iff, Finset.mem_insert]
- · rintro ⟨v, hv, hfv⟩
- rw [Finset.mem_insert] at hv
- rcases hv with (rfl | hv)
- · exact Or.inl hfv
- · refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
+ x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by classical
#align multiset.mem_sup Multiset.mem_sup
-/
@@ -2488,11 +2456,7 @@ variable {ι' : Sort _} [CompleteLattice α]
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `supr_eq_supr_finset'` for a version
that works for `ι : Sort*`. -/
-theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
- classical exact
- le_antisymm
- (iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl)
- (iSup_le fun t => iSup_le fun b => iSup_le fun hb => le_iSup _ _)
+theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by classical
#align supr_eq_supr_finset iSup_eq_iSup_finset
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -381,7 +381,7 @@ theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x
#print Finset.sup_eq_sSup_image /-
theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
s.sup f = sSup (f '' s) := by
- classical rw [← Finset.coe_image, ← sup_id_eq_Sup, sup_image, Function.comp.left_id]
+ classical rw [← Finset.coe_image, ← sup_id_eq_Sup, sup_image, Function.id_comp]
#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_image
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1170,7 +1170,7 @@ theorem map_finset_sup' [SemilatticeSup β] [SupHomClass F α β] (f : F) {s : F
#print Finset.sup'_image /-
@[simp]
theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
- (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
+ (g : β → α) (hs' : s.Nonempty := (Finset.image_nonempty _).1 hs) :
(s.image f).sup' hs g = s.sup' hs' (g ∘ f) := by rw [← WithBot.coe_eq_coe];
simp only [coe_sup', sup_image, WithBot.coe_sup]
#align finset.sup'_image Finset.sup'_image
@@ -1350,7 +1350,7 @@ theorem map_finset_inf' [SemilatticeInf β] [InfHomClass F α β] (f : F) {s : F
#print Finset.inf'_image /-
@[simp]
theorem inf'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
- (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
+ (g : β → α) (hs' : s.Nonempty := (Finset.image_nonempty _).1 hs) :
(s.image f).inf' hs g = s.inf' hs' (g ∘ f) :=
@sup'_image αᵒᵈ _ _ _ _ _ _ hs _ hs'
#align finset.inf'_image Finset.inf'_image
@@ -2106,7 +2106,7 @@ theorem min'_lt_of_mem_erase_min' [DecidableEq α] {a : α} (ha : a ∈ s.erase
#print Finset.max'_image /-
@[simp]
theorem max'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
- (h : (s.image f).Nonempty) : (s.image f).max' h = f (s.max' ((Nonempty.image_iff f).mp h)) :=
+ (h : (s.image f).Nonempty) : (s.image f).max' h = f (s.max' ((Finset.image_nonempty f).mp h)) :=
by
refine'
le_antisymm (max'_le _ _ _ fun y hy => _) (le_max' _ _ (mem_image.mpr ⟨_, max'_mem _ _, rfl⟩))
@@ -2118,7 +2118,7 @@ theorem max'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finse
#print Finset.min'_image /-
@[simp]
theorem min'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
- (h : (s.image f).Nonempty) : (s.image f).min' h = f (s.min' ((Nonempty.image_iff f).mp h)) :=
+ (h : (s.image f).Nonempty) : (s.image f).min' h = f (s.min' ((Finset.image_nonempty f).mp h)) :=
by
convert @max'_image αᵒᵈ βᵒᵈ _ _ (fun a : αᵒᵈ => to_dual (f (of_dual a))) (by simpa) _ _ <;>
convert h
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,13 +3,13 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-/
-import Mathbin.Data.Finset.Fold
-import Mathbin.Data.Finset.Option
-import Mathbin.Data.Finset.Pi
-import Mathbin.Data.Finset.Prod
-import Mathbin.Data.Multiset.Lattice
-import Mathbin.Order.CompleteLattice
-import Mathbin.Order.Hom.Lattice
+import Data.Finset.Fold
+import Data.Finset.Option
+import Data.Finset.Pi
+import Data.Finset.Prod
+import Data.Multiset.Lattice
+import Order.CompleteLattice
+import Order.Hom.Lattice
#align_import data.finset.lattice from "leanprover-community/mathlib"@"442a83d738cb208d3600056c489be16900ba701d"
@@ -333,7 +333,7 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup_mem /-
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
@@ -607,7 +607,7 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
#align finset.inf_induction Finset.inf_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.inf_mem /-
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@@ -1141,7 +1141,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
#align finset.sup'_induction Finset.sup'_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup'_mem /-
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
@@ -1323,7 +1323,7 @@ theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
#align finset.inf'_induction Finset.inf'_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.inf'_mem /-
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
@@ -1376,7 +1376,7 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
#align finset.sup'_eq_sup Finset.sup'_eq_sup
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » s) -/
#print SupClosed.finsetSup_mem /-
theorem finsetSup_mem {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
@@ -1402,7 +1402,7 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
#align finset.inf'_eq_inf Finset.inf'_eq_inf
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » s) -/
#print InfClosed.finsetInf_mem /-
theorem finsetInf_mem {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@@ -2211,8 +2211,8 @@ theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
#align finset.exists_next_left Finset.exists_next_left
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.card_le_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card t + 1`. -/
theorem card_le_of_interleaved {s t : Finset α}
@@ -2246,7 +2246,7 @@ theorem card_le_of_interleaved {s t : Finset α}
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.card_le_diff_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -1086,22 +1086,28 @@ theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ
#align finset.sup'_bUnion Finset.sup'_biUnion
-/
+#print Finset.sup'_comm /-
protected theorem sup'_comm {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 :=
eq_of_forall_ge_iff fun a => by simpa using forall₂_swap
#align finset.sup'_comm Finset.sup'_comm
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.sup'_product_left /-
theorem sup'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
(s ×ˢ t).sup' (hs.product ht) f = s.sup' hs fun i => t.sup' ht fun i' => f ⟨i, i'⟩ :=
eq_of_forall_ge_iff fun a => by simp [@forall_swap _ γ]
#align finset.sup'_product_left Finset.sup'_product_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.sup'_product_right /-
theorem sup'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
(s ×ˢ t).sup' (hs.product ht) f = t.sup' ht fun i' => s.sup' hs fun i => f ⟨i, i'⟩ := by
rw [sup'_product_left, Finset.sup'_comm]
#align finset.sup'_product_right Finset.sup'_product_right
+-/
#print Finset.comp_sup'_eq_sup'_comp /-
theorem comp_sup'_eq_sup'_comp [SemilatticeSup γ] {s : Finset β} (H : s.Nonempty) {f : β → α}
@@ -1153,18 +1159,22 @@ theorem sup'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
#align finset.sup'_congr Finset.sup'_congr
-/
+#print map_finset_sup' /-
@[simp]
theorem map_finset_sup' [SemilatticeSup β] [SupHomClass F α β] (f : F) {s : Finset ι} (hs)
(g : ι → α) : f (s.sup' hs g) = s.sup' hs (f ∘ g) := by
refine' hs.cons_induction _ _ <;> intros <;> simp [*]
#align map_finset_sup' map_finset_sup'
+-/
+#print Finset.sup'_image /-
@[simp]
theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
(g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
(s.image f).sup' hs g = s.sup' hs' (g ∘ f) := by rw [← WithBot.coe_eq_coe];
simp only [coe_sup', sup_image, WithBot.coe_sup]
#align finset.sup'_image Finset.sup'_image
+-/
#print Finset.sup'_map /-
@[simp]
@@ -1276,22 +1286,28 @@ theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ
#align finset.inf'_bUnion Finset.inf'_biUnion
-/
+#print Finset.inf'_comm /-
protected theorem inf'_comm {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 :=
@Finset.sup'_comm αᵒᵈ _ _ _ _ _ hs ht _
#align finset.inf'_comm Finset.inf'_comm
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.inf'_product_left /-
theorem inf'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
(s ×ˢ t).inf' (hs.product ht) f = s.inf' hs fun i => t.inf' ht fun i' => f ⟨i, i'⟩ :=
@sup'_product_left αᵒᵈ _ _ _ _ _ hs ht _
#align finset.inf'_product_left Finset.inf'_product_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.inf'_product_right /-
theorem inf'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
(s ×ˢ t).inf' (hs.product ht) f = t.inf' ht fun i' => s.inf' hs fun i => f ⟨i, i'⟩ :=
@sup'_product_right αᵒᵈ _ _ _ _ _ hs ht _
#align finset.inf'_product_right Finset.inf'_product_right
+-/
#print Finset.comp_inf'_eq_inf'_comp /-
theorem comp_inf'_eq_inf'_comp [SemilatticeInf γ] {s : Finset β} (H : s.Nonempty) {f : β → α}
@@ -1323,18 +1339,22 @@ theorem inf'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
#align finset.inf'_congr Finset.inf'_congr
-/
+#print map_finset_inf' /-
@[simp]
theorem map_finset_inf' [SemilatticeInf β] [InfHomClass F α β] (f : F) {s : Finset ι} (hs)
(g : ι → α) : f (s.inf' hs g) = s.inf' hs (f ∘ g) := by
refine' hs.cons_induction _ _ <;> intros <;> simp [*]
#align map_finset_inf' map_finset_inf'
+-/
+#print Finset.inf'_image /-
@[simp]
theorem inf'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
(g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
(s.image f).inf' hs g = s.inf' hs' (g ∘ f) :=
@sup'_image αᵒᵈ _ _ _ _ _ _ hs _ hs'
#align finset.inf'_image Finset.inf'_image
+-/
#print Finset.inf'_map /-
@[simp]
@@ -1492,6 +1512,7 @@ section DistribLattice
variable [DistribLattice α] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty)
{f : ι → α} {g : κ → α} {a : α}
+#print Finset.sup'_inf_distrib_left /-
theorem sup'_inf_distrib_left (f : ι → α) (a : α) : a ⊓ s.sup' hs f = s.sup' hs fun i => a ⊓ f i :=
by
refine' hs.cons_induction (fun i => _) fun i s hi hs ih => _
@@ -1499,30 +1520,41 @@ theorem sup'_inf_distrib_left (f : ι → α) (a : α) : a ⊓ s.sup' hs f = s.s
· simp_rw [sup'_cons hs, inf_sup_left]
rw [ih]
#align finset.sup'_inf_distrib_left Finset.sup'_inf_distrib_left
+-/
+#print Finset.sup'_inf_distrib_right /-
theorem sup'_inf_distrib_right (f : ι → α) (a : α) : s.sup' hs f ⊓ a = s.sup' hs fun i => f i ⊓ a :=
by rw [inf_comm, sup'_inf_distrib_left]; simp_rw [inf_comm]
#align finset.sup'_inf_distrib_right Finset.sup'_inf_distrib_right
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.sup'_inf_sup' /-
theorem sup'_inf_sup' (f : ι → α) (g : κ → α) :
s.sup' hs f ⊓ t.sup' ht g = (s ×ˢ t).sup' (hs.product ht) fun i => f i.1 ⊓ g i.2 := by
simp_rw [Finset.sup'_inf_distrib_right, Finset.sup'_inf_distrib_left, sup'_product_left]
#align finset.sup'_inf_sup' Finset.sup'_inf_sup'
+-/
+#print Finset.inf'_sup_distrib_left /-
theorem inf'_sup_distrib_left (f : ι → α) (a : α) : a ⊔ s.inf' hs f = s.inf' hs fun i => a ⊔ f i :=
@sup'_inf_distrib_left αᵒᵈ _ _ _ hs _ _
#align finset.inf'_sup_distrib_left Finset.inf'_sup_distrib_left
+-/
+#print Finset.inf'_sup_distrib_right /-
theorem inf'_sup_distrib_right (f : ι → α) (a : α) : s.inf' hs f ⊔ a = s.inf' hs fun i => f i ⊔ a :=
@sup'_inf_distrib_right αᵒᵈ _ _ _ hs _ _
#align finset.inf'_sup_distrib_right Finset.inf'_sup_distrib_right
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.inf'_sup_inf' /-
theorem inf'_sup_inf' (f : ι → α) (g : κ → α) :
s.inf' hs f ⊔ t.inf' ht g = (s ×ˢ t).inf' (hs.product ht) fun i => f i.1 ⊔ g i.2 :=
@sup'_inf_sup' αᵒᵈ _ _ _ _ _ hs ht _ _
#align finset.inf'_sup_inf' Finset.inf'_sup_inf'
+-/
end DistribLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -1070,11 +1070,13 @@ theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
#align finset.sup'_le_iff Finset.sup'_le_iff
-/
+#print Finset.sup'_union /-
theorem sup'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
(f : β → α) :
(s₁ ∪ s₂).sup' (h₁.mono <| subset_union_left _ _) f = s₁.sup' h₁ f ⊔ s₂.sup' h₂ f :=
eq_of_forall_ge_iff fun a => by simp [or_imp, forall_and]
#align finset.sup'_union Finset.sup'_union
+-/
#print Finset.sup'_biUnion /-
theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
@@ -1258,11 +1260,13 @@ theorem le_inf'_iff : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
#align finset.le_inf'_iff Finset.le_inf'_iff
-/
+#print Finset.inf'_union /-
theorem inf'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
(f : β → α) :
(s₁ ∪ s₂).inf' (h₁.mono <| subset_union_left _ _) f = s₁.inf' h₁ f ⊓ s₂.inf' h₂ f :=
@sup'_union αᵒᵈ _ _ _ _ _ h₁ h₂ _
#align finset.inf'_union Finset.inf'_union
+-/
#print Finset.inf'_biUnion /-
theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
@@ -1353,11 +1357,11 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
-#print Finset.sup_closed_of_sup_closed /-
-theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
+#print SupClosed.finsetSup_mem /-
+theorem finsetSup_mem {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
-#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closed
+#align finset.sup_closed_of_sup_closed SupClosed.finsetSup_mem
-/
#print Finset.coe_sup_of_nonempty /-
@@ -1379,11 +1383,11 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
-#print Finset.inf_closed_of_inf_closed /-
-theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
+#print InfClosed.finsetInf_mem /-
+theorem finsetInf_mem {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
- @sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
-#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
+ @finsetSup_mem αᵒᵈ _ _ _ t htne h_subset h
+#align finset.inf_closed_of_inf_closed InfClosed.finsetInf_mem
-/
#print Finset.coe_inf_of_nonempty /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -11,7 +11,7 @@ import Mathbin.Data.Multiset.Lattice
import Mathbin.Order.CompleteLattice
import Mathbin.Order.Hom.Lattice
-#align_import data.finset.lattice from "leanprover-community/mathlib"@"2d44d6823a96f9c79b7d1ab185918377be663424"
+#align_import data.finset.lattice from "leanprover-community/mathlib"@"442a83d738cb208d3600056c489be16900ba701d"
/-!
# Lattice operations on finsets
@@ -92,13 +92,6 @@ theorem sup_singleton {b : β} : ({b} : Finset β).sup f = f b :=
#align finset.sup_singleton Finset.sup_singleton
-/
-#print Finset.sup_union /-
-theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
- Finset.induction_on s₁ (by rw [empty_union, sup_empty, bot_sup_eq]) fun a s has ih => by
- rw [insert_union, sup_insert, sup_insert, ih, sup_assoc]
-#align finset.sup_union Finset.sup_union
--/
-
#print Finset.sup_sup /-
theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
by
@@ -156,6 +149,12 @@ theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
#align finset.le_sup_of_le Finset.le_sup_of_le
-/
+#print Finset.sup_union /-
+theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
+ eq_of_forall_ge_iff fun c => by simp [or_imp, forall_and]
+#align finset.sup_union Finset.sup_union
+-/
+
#print Finset.sup_biUnion /-
@[simp]
theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
@@ -203,10 +202,7 @@ theorem sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f :=
#print Finset.sup_comm /-
protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.sup fun b => t.sup (f b)) = t.sup fun c => s.sup fun b => f b c :=
- by
- refine' eq_of_forall_ge_iff fun a => _
- simp_rw [Finset.sup_le_iff]
- exact ⟨fun h c hc b hb => h b hb c hc, fun h b hb c hc => h c hc b hb⟩
+ eq_of_forall_ge_iff fun a => by simpa using forall₂_swap
#align finset.sup_comm Finset.sup_comm
-/
@@ -222,11 +218,7 @@ theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x)
/-- See also `finset.product_bUnion`. -/
theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ :=
- by
- simp only [le_antisymm_iff, Finset.sup_le_iff, mem_product, and_imp, Prod.forall]
- exact
- ⟨fun b c hb hc => (le_sup hb).trans' <| le_sup hc, fun b hb c hc =>
- le_sup <| mem_product.2 ⟨hb, hc⟩⟩
+ eq_of_forall_ge_iff fun a => by simp [@forall_swap _ γ]
#align finset.sup_product_left Finset.sup_product_left
-/
@@ -458,12 +450,6 @@ theorem inf_singleton {b : β} : ({b} : Finset β).inf f = f b :=
#align finset.inf_singleton Finset.inf_singleton
-/
-#print Finset.inf_union /-
-theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
- @sup_union αᵒᵈ _ _ _ _ _ _ _
-#align finset.inf_union Finset.inf_union
--/
-
#print Finset.inf_inf /-
theorem inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
@@ -484,6 +470,12 @@ theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β
#align map_finset_inf map_finset_inf
-/
+#print Finset.inf_union /-
+theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
+ @sup_union αᵒᵈ _ _ _ _ _ _ _
+#align finset.inf_union Finset.inf_union
+-/
+
#print Finset.inf_biUnion /-
@[simp]
theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
@@ -1078,6 +1070,12 @@ theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
#align finset.sup'_le_iff Finset.sup'_le_iff
-/
+theorem sup'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
+ (f : β → α) :
+ (s₁ ∪ s₂).sup' (h₁.mono <| subset_union_left _ _) f = s₁.sup' h₁ f ⊔ s₂.sup' h₂ f :=
+ eq_of_forall_ge_iff fun a => by simp [or_imp, forall_and]
+#align finset.sup'_union Finset.sup'_union
+
#print Finset.sup'_biUnion /-
theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
@@ -1086,6 +1084,23 @@ theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ
#align finset.sup'_bUnion Finset.sup'_biUnion
-/
+protected theorem sup'_comm {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 :=
+ eq_of_forall_ge_iff fun a => by simpa using forall₂_swap
+#align finset.sup'_comm Finset.sup'_comm
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem sup'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' (hs.product ht) f = s.sup' hs fun i => t.sup' ht fun i' => f ⟨i, i'⟩ :=
+ eq_of_forall_ge_iff fun a => by simp [@forall_swap _ γ]
+#align finset.sup'_product_left Finset.sup'_product_left
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem sup'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' (hs.product ht) f = t.sup' ht fun i' => s.sup' hs fun i => f ⟨i, i'⟩ := by
+ rw [sup'_product_left, Finset.sup'_comm]
+#align finset.sup'_product_right Finset.sup'_product_right
+
#print Finset.comp_sup'_eq_sup'_comp /-
theorem comp_sup'_eq_sup'_comp [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) :=
@@ -1136,6 +1151,19 @@ theorem sup'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
#align finset.sup'_congr Finset.sup'_congr
-/
+@[simp]
+theorem map_finset_sup' [SemilatticeSup β] [SupHomClass F α β] (f : F) {s : Finset ι} (hs)
+ (g : ι → α) : f (s.sup' hs g) = s.sup' hs (f ∘ g) := by
+ refine' hs.cons_induction _ _ <;> intros <;> simp [*]
+#align map_finset_sup' map_finset_sup'
+
+@[simp]
+theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
+ (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
+ (s.image f).sup' hs g = s.sup' hs' (g ∘ f) := by rw [← WithBot.coe_eq_coe];
+ simp only [coe_sup', sup_image, WithBot.coe_sup]
+#align finset.sup'_image Finset.sup'_image
+
#print Finset.sup'_map /-
@[simp]
theorem sup'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty)
@@ -1230,6 +1258,12 @@ theorem le_inf'_iff : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
#align finset.le_inf'_iff Finset.le_inf'_iff
-/
+theorem inf'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
+ (f : β → α) :
+ (s₁ ∪ s₂).inf' (h₁.mono <| subset_union_left _ _) f = s₁.inf' h₁ f ⊓ s₂.inf' h₂ f :=
+ @sup'_union αᵒᵈ _ _ _ _ _ h₁ h₂ _
+#align finset.inf'_union Finset.inf'_union
+
#print Finset.inf'_biUnion /-
theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
@@ -1238,6 +1272,23 @@ theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ
#align finset.inf'_bUnion Finset.inf'_biUnion
-/
+protected theorem inf'_comm {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 :=
+ @Finset.sup'_comm αᵒᵈ _ _ _ _ _ hs ht _
+#align finset.inf'_comm Finset.inf'_comm
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem inf'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' (hs.product ht) f = s.inf' hs fun i => t.inf' ht fun i' => f ⟨i, i'⟩ :=
+ @sup'_product_left αᵒᵈ _ _ _ _ _ hs ht _
+#align finset.inf'_product_left Finset.inf'_product_left
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem inf'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' (hs.product ht) f = t.inf' ht fun i' => s.inf' hs fun i => f ⟨i, i'⟩ :=
+ @sup'_product_right αᵒᵈ _ _ _ _ _ hs ht _
+#align finset.inf'_product_right Finset.inf'_product_right
+
#print Finset.comp_inf'_eq_inf'_comp /-
theorem comp_inf'_eq_inf'_comp [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) :=
@@ -1268,6 +1319,19 @@ theorem inf'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
#align finset.inf'_congr Finset.inf'_congr
-/
+@[simp]
+theorem map_finset_inf' [SemilatticeInf β] [InfHomClass F α β] (f : F) {s : Finset ι} (hs)
+ (g : ι → α) : f (s.inf' hs g) = s.inf' hs (f ∘ g) := by
+ refine' hs.cons_induction _ _ <;> intros <;> simp [*]
+#align map_finset_inf' map_finset_inf'
+
+@[simp]
+theorem inf'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
+ (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
+ (s.image f).inf' hs g = s.inf' hs' (g ∘ f) :=
+ @sup'_image αᵒᵈ _ _ _ _ _ _ hs _ hs'
+#align finset.inf'_image Finset.inf'_image
+
#print Finset.inf'_map /-
@[simp]
theorem inf'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty)
@@ -1419,6 +1483,45 @@ theorem ofDual_inf' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f :
#align finset.of_dual_inf' Finset.ofDual_inf'
-/
+section DistribLattice
+
+variable [DistribLattice α] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty)
+ {f : ι → α} {g : κ → α} {a : α}
+
+theorem sup'_inf_distrib_left (f : ι → α) (a : α) : a ⊓ s.sup' hs f = s.sup' hs fun i => a ⊓ f i :=
+ by
+ refine' hs.cons_induction (fun i => _) fun i s hi hs ih => _
+ · simp
+ · simp_rw [sup'_cons hs, inf_sup_left]
+ rw [ih]
+#align finset.sup'_inf_distrib_left Finset.sup'_inf_distrib_left
+
+theorem sup'_inf_distrib_right (f : ι → α) (a : α) : s.sup' hs f ⊓ a = s.sup' hs fun i => f i ⊓ a :=
+ by rw [inf_comm, sup'_inf_distrib_left]; simp_rw [inf_comm]
+#align finset.sup'_inf_distrib_right Finset.sup'_inf_distrib_right
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem sup'_inf_sup' (f : ι → α) (g : κ → α) :
+ s.sup' hs f ⊓ t.sup' ht g = (s ×ˢ t).sup' (hs.product ht) fun i => f i.1 ⊓ g i.2 := by
+ simp_rw [Finset.sup'_inf_distrib_right, Finset.sup'_inf_distrib_left, sup'_product_left]
+#align finset.sup'_inf_sup' Finset.sup'_inf_sup'
+
+theorem inf'_sup_distrib_left (f : ι → α) (a : α) : a ⊔ s.inf' hs f = s.inf' hs fun i => a ⊔ f i :=
+ @sup'_inf_distrib_left αᵒᵈ _ _ _ hs _ _
+#align finset.inf'_sup_distrib_left Finset.inf'_sup_distrib_left
+
+theorem inf'_sup_distrib_right (f : ι → α) (a : α) : s.inf' hs f ⊔ a = s.inf' hs fun i => f i ⊔ a :=
+ @sup'_inf_distrib_right αᵒᵈ _ _ _ hs _ _
+#align finset.inf'_sup_distrib_right Finset.inf'_sup_distrib_right
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem inf'_sup_inf' (f : ι → α) (g : κ → α) :
+ s.inf' hs f ⊔ t.inf' ht g = (s ×ˢ t).inf' (hs.product ht) fun i => f i.1 ⊔ g i.2 :=
+ @sup'_inf_sup' αᵒᵈ _ _ _ _ _ hs ht _ _
+#align finset.inf'_sup_inf' Finset.inf'_sup_inf'
+
+end DistribLattice
+
section LinearOrder
variable [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ι → α} {a : α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -133,7 +133,7 @@ protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a
#align finset.sup_le_iff Finset.sup_le_iff
-/
-alias Finset.sup_le_iff ↔ _ sup_le
+alias ⟨_, sup_le⟩ := Finset.sup_le_iff
#align finset.sup_le Finset.sup_le
attribute [protected] sup_le
@@ -511,7 +511,7 @@ protected theorem le_inf_iff {a : α} : a ≤ s.inf f ↔ ∀ b ∈ s, a ≤ f b
#align finset.le_inf_iff Finset.le_inf_iff
-/
-alias Finset.le_inf_iff ↔ _ le_inf
+alias ⟨_, le_inf⟩ := Finset.le_inf_iff
#align finset.le_inf Finset.le_inf
attribute [protected] le_inf
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -2225,35 +2225,35 @@ theorem exists_min_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
end ExistsMaxMin
-#print Finset.is_glb_iff_is_least /-
-theorem is_glb_iff_is_least [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
+#print Finset.isGLB_iff_isLeast /-
+theorem isGLB_iff_isLeast [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
IsGLB (s : Set α) i ↔ IsLeast (↑s) i :=
by
refine' ⟨fun his => _, IsLeast.isGLB⟩
suffices i = min' s hs by rw [this]; exact is_least_min' s hs
rw [IsGLB, IsGreatest, mem_lowerBounds, mem_upperBounds] at his
exact le_antisymm (his.1 (Finset.min' s hs) (Finset.min'_mem s hs)) (his.2 _ (Finset.min'_le s))
-#align finset.is_glb_iff_is_least Finset.is_glb_iff_is_least
+#align finset.is_glb_iff_is_least Finset.isGLB_iff_isLeast
-/
-#print Finset.is_lub_iff_is_greatest /-
-theorem is_lub_iff_is_greatest [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
+#print Finset.isLUB_iff_isGreatest /-
+theorem isLUB_iff_isGreatest [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
IsLUB (s : Set α) i ↔ IsGreatest (↑s) i :=
- @is_glb_iff_is_least αᵒᵈ _ i s hs
-#align finset.is_lub_iff_is_greatest Finset.is_lub_iff_is_greatest
+ @isGLB_iff_isLeast αᵒᵈ _ i s hs
+#align finset.is_lub_iff_is_greatest Finset.isLUB_iff_isGreatest
-/
-#print Finset.is_glb_mem /-
-theorem is_glb_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsGLB (s : Set α) i)
+#print Finset.isGLB_mem /-
+theorem isGLB_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsGLB (s : Set α) i)
(hs : s.Nonempty) : i ∈ s := by rw [← mem_coe]; exact ((is_glb_iff_is_least i s hs).mp his).1
-#align finset.is_glb_mem Finset.is_glb_mem
+#align finset.is_glb_mem Finset.isGLB_mem
-/
-#print Finset.is_lub_mem /-
-theorem is_lub_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsLUB (s : Set α) i)
+#print Finset.isLUB_mem /-
+theorem isLUB_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsLUB (s : Set α) i)
(hs : s.Nonempty) : i ∈ s :=
- @is_glb_mem αᵒᵈ _ i s his hs
-#align finset.is_lub_mem Finset.is_lub_mem
+ @isGLB_mem αᵒᵈ _ i s his hs
+#align finset.is_lub_mem Finset.isLUB_mem
-/
end Finset
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
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 Mathbin.Data.Finset.Fold
import Mathbin.Data.Finset.Option
@@ -16,6 +11,8 @@ import Mathbin.Data.Multiset.Lattice
import Mathbin.Order.CompleteLattice
import Mathbin.Order.Hom.Lattice
+#align_import data.finset.lattice from "leanprover-community/mathlib"@"2d44d6823a96f9c79b7d1ab185918377be663424"
+
/-!
# Lattice operations on finsets
@@ -344,7 +341,7 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup_mem /-
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
@@ -618,7 +615,7 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
#align finset.inf_induction Finset.inf_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.inf_mem /-
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@@ -1121,7 +1118,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
#align finset.sup'_induction Finset.sup'_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.sup'_mem /-
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
@@ -1255,7 +1252,7 @@ theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
#align finset.inf'_induction Finset.inf'_induction
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.inf'_mem /-
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
@@ -1291,7 +1288,7 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
#align finset.sup'_eq_sup Finset.sup'_eq_sup
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
#print Finset.sup_closed_of_sup_closed /-
theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
@@ -1317,7 +1314,7 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
#align finset.inf'_eq_inf Finset.inf'_eq_inf
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
#print Finset.inf_closed_of_inf_closed /-
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@@ -2075,8 +2072,8 @@ theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
#align finset.exists_next_left Finset.exists_next_left
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.card_le_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card t + 1`. -/
theorem card_le_of_interleaved {s t : Finset α}
@@ -2110,7 +2107,7 @@ theorem card_le_of_interleaved {s t : Finset α}
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
#print Finset.card_le_diff_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -47,29 +47,39 @@ def sup (s : Finset β) (f : β → α) : α :=
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
+#print Finset.sup_def /-
theorem sup_def : s.sup f = (s.1.map f).sup :=
rfl
#align finset.sup_def Finset.sup_def
+-/
+#print Finset.sup_empty /-
@[simp]
theorem sup_empty : (∅ : Finset β).sup f = ⊥ :=
fold_empty
#align finset.sup_empty Finset.sup_empty
+-/
+#print Finset.sup_cons /-
@[simp]
theorem sup_cons {b : β} (h : b ∉ s) : (cons b s h).sup f = f b ⊔ s.sup f :=
fold_cons h
#align finset.sup_cons Finset.sup_cons
+-/
+#print Finset.sup_insert /-
@[simp]
theorem sup_insert [DecidableEq β] {b : β} : (insert b s : Finset β).sup f = f b ⊔ s.sup f :=
fold_insert_idem
#align finset.sup_insert Finset.sup_insert
+-/
+#print Finset.sup_image /-
theorem sup_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β → α) :
(s.image f).sup g = s.sup (g ∘ f) :=
fold_image_idem
#align finset.sup_image Finset.sup_image
+-/
#print Finset.sup_map /-
@[simp]
@@ -78,16 +88,21 @@ theorem sup_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).sup
#align finset.sup_map Finset.sup_map
-/
+#print Finset.sup_singleton /-
@[simp]
theorem sup_singleton {b : β} : ({b} : Finset β).sup f = f b :=
sup_singleton
#align finset.sup_singleton Finset.sup_singleton
+-/
+#print Finset.sup_union /-
theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
Finset.induction_on s₁ (by rw [empty_union, sup_empty, bot_sup_eq]) fun a s has ih => by
rw [insert_union, sup_insert, sup_insert, ih, sup_assoc]
#align finset.sup_union Finset.sup_union
+-/
+#print Finset.sup_sup /-
theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
by
refine' Finset.cons_induction_on s _ fun b t _ h => _
@@ -95,6 +110,7 @@ theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
· rw [sup_cons, sup_cons, sup_cons, h]
exact sup_sup_sup_comm _ _ _ _
#align finset.sup_sup Finset.sup_sup
+-/
#print Finset.sup_congr /-
theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.sup f = s₂.sup g :=
@@ -102,12 +118,15 @@ theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
#align finset.sup_congr Finset.sup_congr
-/
+#print map_finset_sup /-
@[simp]
theorem map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β] (f : F) (s : Finset ι)
(g : ι → α) : f (s.sup g) = s.sup (f ∘ g) :=
Finset.cons_induction_on s (map_bot f) fun i s _ h => by rw [sup_cons, sup_cons, map_sup, h]
#align map_finset_sup map_finset_sup
+-/
+#print Finset.sup_le_iff /-
@[simp]
protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
by
@@ -115,15 +134,18 @@ protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a
simp only [Multiset.mem_map, and_imp, exists_imp]
exact ⟨fun k b hb => k _ _ hb rfl, fun k a' b hb h => h ▸ k _ hb⟩
#align finset.sup_le_iff Finset.sup_le_iff
+-/
alias Finset.sup_le_iff ↔ _ sup_le
#align finset.sup_le Finset.sup_le
attribute [protected] sup_le
+#print Finset.sup_const_le /-
theorem sup_const_le : (s.sup fun _ => a) ≤ a :=
Finset.sup_le fun _ _ => le_rfl
#align finset.sup_const_le Finset.sup_const_le
+-/
#print Finset.le_sup /-
theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
@@ -137,11 +159,13 @@ theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
#align finset.le_sup_of_le Finset.le_sup_of_le
-/
+#print Finset.sup_biUnion /-
@[simp]
theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
(s.biUnion t).sup f = s.sup fun x => (t x).sup f :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup_bUnion Finset.sup_biUnion
+-/
#print Finset.sup_const /-
theorem sup_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.sup fun _ => c) = c :=
@@ -149,6 +173,7 @@ theorem sup_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.sup fun _ => c)
#align finset.sup_const Finset.sup_const
-/
+#print Finset.sup_bot /-
@[simp]
theorem sup_bot (s : Finset β) : (s.sup fun _ => ⊥) = (⊥ : α) :=
by
@@ -156,12 +181,15 @@ theorem sup_bot (s : Finset β) : (s.sup fun _ => ⊥) = (⊥ : α) :=
· exact sup_empty
· exact sup_const hs _
#align finset.sup_bot Finset.sup_bot
+-/
+#print Finset.sup_ite /-
theorem sup_ite (p : β → Prop) [DecidablePred p] :
(s.sup fun i => ite (p i) (f i) (g i)) =
(s.filterₓ p).sup f ⊔ (s.filterₓ fun i => ¬p i).sup g :=
fold_ite _
#align finset.sup_ite Finset.sup_ite
+-/
#print Finset.sup_mono_fun /-
theorem sup_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.sup f ≤ s.sup g :=
@@ -175,6 +203,7 @@ theorem sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f :=
#align finset.sup_mono Finset.sup_mono
-/
+#print Finset.sup_comm /-
protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.sup fun b => t.sup (f b)) = t.sup fun c => s.sup fun b => f b c :=
by
@@ -182,6 +211,7 @@ protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α
simp_rw [Finset.sup_le_iff]
exact ⟨fun h c hc b hb => h b hb c hc, fun h b hb c hc => h c hc b hb⟩
#align finset.sup_comm Finset.sup_comm
+-/
#print Finset.sup_attach /-
@[simp]
@@ -191,6 +221,7 @@ theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x)
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.sup_product_left /-
/-- See also `finset.product_bUnion`. -/
theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ :=
@@ -200,13 +231,17 @@ theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
⟨fun b c hb hc => (le_sup hb).trans' <| le_sup hc, fun b hb c hc =>
le_sup <| mem_product.2 ⟨hb, hc⟩⟩
#align finset.sup_product_left Finset.sup_product_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.sup_product_right /-
theorem sup_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).sup f = t.sup fun i' => s.sup fun i => f ⟨i, i'⟩ := by
rw [sup_product_left, Finset.sup_comm]
#align finset.sup_product_right Finset.sup_product_right
+-/
+#print Finset.sup_erase_bot /-
@[simp]
theorem sup_erase_bot [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊥).sup id = s.sup id :=
by
@@ -215,7 +250,9 @@ theorem sup_erase_bot [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊥).sup id
· exact bot_le
· exact le_sup (mem_erase.2 ⟨ha', ha⟩)
#align finset.sup_erase_bot Finset.sup_erase_bot
+-/
+#print Finset.sup_sdiff_right /-
theorem sup_sdiff_right {α β : Type _} [GeneralizedBooleanAlgebra α] (s : Finset β) (f : β → α)
(a : α) : (s.sup fun b => f b \ a) = s.sup f \ a :=
by
@@ -223,25 +260,33 @@ theorem sup_sdiff_right {α β : Type _} [GeneralizedBooleanAlgebra α] (s : Fin
· rw [sup_empty, sup_empty, bot_sdiff]
· rw [sup_cons, sup_cons, h, sup_sdiff]
#align finset.sup_sdiff_right Finset.sup_sdiff_right
+-/
+#print Finset.comp_sup_eq_sup_comp /-
theorem comp_sup_eq_sup_comp [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) :=
Finset.cons_induction_on s bot fun c t hc ih => by rw [sup_cons, sup_cons, g_sup, ih]
#align finset.comp_sup_eq_sup_comp Finset.comp_sup_eq_sup_comp
+-/
+#print Finset.sup_coe /-
/-- Computing `sup` in a subtype (closed under `sup`) is the same as computing it in `α`. -/
theorem sup_coe {P : α → Prop} {Pbot : P ⊥} {Psup : ∀ ⦃x y⦄, P x → P y → P (x ⊔ y)} (t : Finset β)
(f : β → { x : α // P x }) :
(@sup _ _ (Subtype.semilatticeSup Psup) (Subtype.orderBot Pbot) t f : α) = t.sup fun x => f x :=
by rw [comp_sup_eq_sup_comp coe] <;> intros <;> rfl
#align finset.sup_coe Finset.sup_coe
+-/
+#print Finset.sup_toFinset /-
@[simp]
theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multiset β) :
(s.sup f).toFinset = s.sup fun x => (f x).toFinset :=
comp_sup_eq_sup_comp Multiset.toFinset toFinset_union rfl
#align finset.sup_to_finset Finset.sup_toFinset
+-/
+#print List.foldr_sup_eq_sup_toFinset /-
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
by
@@ -249,6 +294,7 @@ theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
Multiset.map_id]
rfl
#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinset
+-/
#print Finset.subset_range_sup_succ /-
theorem subset_range_sup_succ (s : Finset ℕ) : s ⊆ range (s.sup id).succ := fun n hn =>
@@ -262,6 +308,7 @@ theorem exists_nat_subset_range (s : Finset ℕ) : ∃ n : ℕ, s ⊆ range n :=
#align finset.exists_nat_subset_range Finset.exists_nat_subset_range
-/
+#print Finset.sup_induction /-
theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.sup f) :=
by
@@ -272,7 +319,9 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
· exact hs c (mem_cons.2 (Or.inl rfl))
· exact ih fun b h => hs b (mem_cons.2 (Or.inr h))
#align finset.sup_induction Finset.sup_induction
+-/
+#print Finset.sup_le_of_le_directed /-
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
(∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by
@@ -293,44 +342,59 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
rw [sup_insert, id.def, sup_le_iff]
exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+#print Finset.sup_mem /-
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup p ∈ s :=
@sup_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.sup_mem Finset.sup_mem
+-/
+#print Finset.sup_eq_bot_iff /-
@[simp]
protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
classical induction' S using Finset.induction with a S haS hi <;> simp [*]
#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iff
+-/
end Sup
+#print Finset.sup_eq_iSup /-
theorem sup_eq_iSup [CompleteLattice β] (s : Finset α) (f : α → β) : s.sup f = ⨆ a ∈ s, f a :=
le_antisymm (Finset.sup_le fun a ha => le_iSup_of_le a <| le_iSup _ ha)
(iSup_le fun a => iSup_le fun ha => le_sup ha)
#align finset.sup_eq_supr Finset.sup_eq_iSup
+-/
+#print Finset.sup_id_eq_sSup /-
theorem sup_id_eq_sSup [CompleteLattice α] (s : Finset α) : s.sup id = sSup s := by
simp [sSup_eq_iSup, sup_eq_iSup]
#align finset.sup_id_eq_Sup Finset.sup_id_eq_sSup
+-/
+#print Finset.sup_id_set_eq_sUnion /-
theorem sup_id_set_eq_sUnion (s : Finset (Set α)) : s.sup id = ⋃₀ ↑s :=
sup_id_eq_sSup _
#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_sUnion
+-/
+#print Finset.sup_set_eq_biUnion /-
@[simp]
theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x ∈ s, f x :=
sup_eq_iSup _ _
#align finset.sup_set_eq_bUnion Finset.sup_set_eq_biUnion
+-/
+#print Finset.sup_eq_sSup_image /-
theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
s.sup f = sSup (f '' s) := by
classical rw [← Finset.coe_image, ← sup_id_eq_Sup, sup_image, Function.comp.left_id]
#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_image
+-/
/-! ### inf -/
@@ -349,29 +413,39 @@ def inf (s : Finset β) (f : β → α) : α :=
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
+#print Finset.inf_def /-
theorem inf_def : s.inf f = (s.1.map f).inf :=
rfl
#align finset.inf_def Finset.inf_def
+-/
+#print Finset.inf_empty /-
@[simp]
theorem inf_empty : (∅ : Finset β).inf f = ⊤ :=
fold_empty
#align finset.inf_empty Finset.inf_empty
+-/
+#print Finset.inf_cons /-
@[simp]
theorem inf_cons {b : β} (h : b ∉ s) : (cons b s h).inf f = f b ⊓ s.inf f :=
@sup_cons αᵒᵈ _ _ _ _ _ _ h
#align finset.inf_cons Finset.inf_cons
+-/
+#print Finset.inf_insert /-
@[simp]
theorem inf_insert [DecidableEq β] {b : β} : (insert b s : Finset β).inf f = f b ⊓ s.inf f :=
fold_insert_idem
#align finset.inf_insert Finset.inf_insert
+-/
+#print Finset.inf_image /-
theorem inf_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β → α) :
(s.image f).inf g = s.inf (g ∘ f) :=
fold_image_idem
#align finset.inf_image Finset.inf_image
+-/
#print Finset.inf_map /-
@[simp]
@@ -380,18 +454,24 @@ theorem inf_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).inf
#align finset.inf_map Finset.inf_map
-/
+#print Finset.inf_singleton /-
@[simp]
theorem inf_singleton {b : β} : ({b} : Finset β).inf f = f b :=
inf_singleton
#align finset.inf_singleton Finset.inf_singleton
+-/
+#print Finset.inf_union /-
theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
@sup_union αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_union Finset.inf_union
+-/
+#print Finset.inf_inf /-
theorem inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
#align finset.inf_inf Finset.inf_inf
+-/
#print Finset.inf_congr /-
theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.inf f = s₂.inf g :=
@@ -399,17 +479,21 @@ theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
#align finset.inf_congr Finset.inf_congr
-/
+#print map_finset_inf /-
@[simp]
theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β] (f : F) (s : Finset ι)
(g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
Finset.cons_induction_on s (map_top f) fun i s _ h => by rw [inf_cons, inf_cons, map_inf, h]
#align map_finset_inf map_finset_inf
+-/
+#print Finset.inf_biUnion /-
@[simp]
theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
(s.biUnion t).inf f = s.inf fun x => (t x).inf f :=
@sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
#align finset.inf_bUnion Finset.inf_biUnion
+-/
#print Finset.inf_const /-
theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c :=
@@ -417,23 +501,29 @@ theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c)
#align finset.inf_const Finset.inf_const
-/
+#print Finset.inf_top /-
@[simp]
theorem inf_top (s : Finset β) : (s.inf fun _ => ⊤) = (⊤ : α) :=
@sup_bot αᵒᵈ _ _ _ _
#align finset.inf_top Finset.inf_top
+-/
+#print Finset.le_inf_iff /-
protected theorem le_inf_iff {a : α} : a ≤ s.inf f ↔ ∀ b ∈ s, a ≤ f b :=
@Finset.sup_le_iff αᵒᵈ _ _ _ _ _ _
#align finset.le_inf_iff Finset.le_inf_iff
+-/
alias Finset.le_inf_iff ↔ _ le_inf
#align finset.le_inf Finset.le_inf
attribute [protected] le_inf
+#print Finset.le_inf_const_le /-
theorem le_inf_const_le : a ≤ s.inf fun _ => a :=
Finset.le_inf fun _ _ => le_rfl
#align finset.le_inf_const_le Finset.le_inf_const_le
+-/
#print Finset.inf_le /-
theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
@@ -465,40 +555,53 @@ theorem inf_attach (s : Finset β) (f : β → α) : (s.attach.inf fun x => f x)
#align finset.inf_attach Finset.inf_attach
-/
+#print Finset.inf_comm /-
protected theorem inf_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.inf fun b => t.inf (f b)) = t.inf fun c => s.inf fun b => f b c :=
@Finset.sup_comm αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_comm Finset.inf_comm
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.inf_product_left /-
theorem inf_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).inf f = s.inf fun i => t.inf fun i' => f ⟨i, i'⟩ :=
@sup_product_left αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_product_left Finset.inf_product_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.inf_product_right /-
theorem inf_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).inf f = t.inf fun i' => s.inf fun i => f ⟨i, i'⟩ :=
@sup_product_right αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_product_right Finset.inf_product_right
+-/
+#print Finset.inf_erase_top /-
@[simp]
theorem inf_erase_top [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊤).inf id = s.inf id :=
@sup_erase_bot αᵒᵈ _ _ _ _
#align finset.inf_erase_top Finset.inf_erase_top
+-/
+#print Finset.comp_inf_eq_inf_comp /-
theorem comp_inf_eq_inf_comp [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) :=
@comp_sup_eq_sup_comp αᵒᵈ _ γᵒᵈ _ _ _ _ _ _ _ g_inf top
#align finset.comp_inf_eq_inf_comp Finset.comp_inf_eq_inf_comp
+-/
+#print Finset.inf_coe /-
/-- Computing `inf` in a subtype (closed under `inf`) is the same as computing it in `α`. -/
theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x → P y → P (x ⊓ y)} (t : Finset β)
(f : β → { x : α // P x }) :
(@inf _ _ (Subtype.semilatticeInf Pinf) (Subtype.orderTop Ptop) t f : α) = t.inf fun x => f x :=
@sup_coe αᵒᵈ _ _ _ _ Ptop Pinf t f
#align finset.inf_coe Finset.inf_coe
+-/
+#print List.foldr_inf_eq_inf_toFinset /-
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
by
@@ -506,48 +609,63 @@ theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
Multiset.map_id]
rfl
#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinset
+-/
+#print Finset.inf_induction /-
theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊓ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.inf f) :=
@sup_induction αᵒᵈ _ _ _ _ _ _ ht hp hs
#align finset.inf_induction Finset.inf_induction
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+#print Finset.inf_mem /-
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@inf_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.inf_mem Finset.inf_mem
+-/
+#print Finset.inf_eq_top_iff /-
@[simp]
protected theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
@Finset.sup_eq_bot_iff αᵒᵈ _ _ _ _ _
#align finset.inf_eq_top_iff Finset.inf_eq_top_iff
+-/
end Inf
+#print Finset.toDual_sup /-
@[simp]
theorem toDual_sup [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → α) :
toDual (s.sup f) = s.inf (toDual ∘ f) :=
rfl
#align finset.to_dual_sup Finset.toDual_sup
+-/
+#print Finset.toDual_inf /-
@[simp]
theorem toDual_inf [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → α) :
toDual (s.inf f) = s.sup (toDual ∘ f) :=
rfl
#align finset.to_dual_inf Finset.toDual_inf
+-/
+#print Finset.ofDual_sup /-
@[simp]
theorem ofDual_sup [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → αᵒᵈ) :
ofDual (s.sup f) = s.inf (ofDual ∘ f) :=
rfl
#align finset.of_dual_sup Finset.ofDual_sup
+-/
+#print Finset.ofDual_inf /-
@[simp]
theorem ofDual_inf [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → αᵒᵈ) :
ofDual (s.inf f) = s.sup (ofDual ∘ f) :=
rfl
#align finset.of_dual_inf Finset.ofDual_inf
+-/
section DistribLattice
@@ -557,6 +675,7 @@ section OrderBot
variable [OrderBot α] {s : Finset ι} {t : Finset κ} {f : ι → α} {g : κ → α} {a : α}
+#print Finset.sup_inf_distrib_left /-
theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊓ s.sup f = s.sup fun i => a ⊓ f i :=
by
@@ -564,25 +683,34 @@ theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
· simp_rw [Finset.sup_empty, inf_bot_eq]
· rw [sup_cons, sup_cons, inf_sup_left, h]
#align finset.sup_inf_distrib_left Finset.sup_inf_distrib_left
+-/
+#print Finset.sup_inf_distrib_right /-
theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
s.sup f ⊓ a = s.sup fun i => f i ⊓ a := by rw [_root_.inf_comm, s.sup_inf_distrib_left];
simp_rw [_root_.inf_comm]
#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_right
+-/
+#print Finset.disjoint_sup_right /-
protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → Disjoint a (f i) := by
simp only [disjoint_iff, sup_inf_distrib_left, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
+-/
+#print Finset.disjoint_sup_left /-
protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → Disjoint (f i) a := by
simp only [disjoint_iff, sup_inf_distrib_right, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.sup_inf_sup /-
theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
s.sup f ⊓ t.sup g = (s ×ˢ t).sup fun i => f i.1 ⊓ g i.2 := by
simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left, sup_product_left]
#align finset.sup_inf_sup Finset.sup_inf_sup
+-/
end OrderBot
@@ -590,31 +718,41 @@ section OrderTop
variable [OrderTop α] {f : ι → α} {g : κ → α} {s : Finset ι} {t : Finset κ} {a : α}
+#print Finset.inf_sup_distrib_left /-
theorem inf_sup_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊔ s.inf f = s.inf fun i => a ⊔ f i :=
@sup_inf_distrib_left αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_left Finset.inf_sup_distrib_left
+-/
+#print Finset.inf_sup_distrib_right /-
theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
s.inf f ⊔ a = s.inf fun i => f i ⊔ a :=
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
+-/
+#print Finset.codisjoint_inf_right /-
protected theorem codisjoint_inf_right :
Codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint a (f i) :=
@Finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
#align finset.codisjoint_inf_right Finset.codisjoint_inf_right
+-/
+#print Finset.codisjoint_inf_left /-
protected theorem codisjoint_inf_left :
Codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint (f i) a :=
@Finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.inf_sup_inf /-
theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
s.inf f ⊔ t.inf g = (s ×ˢ t).inf fun i => f i.1 ⊔ g i.2 :=
@sup_inf_sup αᵒᵈ _ _ _ _ _ _ _ _
#align finset.inf_sup_inf Finset.inf_sup_inf
+-/
end OrderTop
@@ -622,6 +760,7 @@ section BoundedOrder
variable [BoundedOrder α] [DecidableEq ι]
+#print Finset.inf_sup /-
--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.inf fun i => (t i).sup (f i)) =
@@ -651,11 +790,14 @@ theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i))
· simpa
· simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
#align finset.inf_sup Finset.inf_sup
+-/
+#print Finset.sup_inf /-
theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
@inf_sup αᵒᵈ _ _ _ _ _ _ _ _
#align finset.sup_inf Finset.sup_inf
+-/
end BoundedOrder
@@ -665,6 +807,7 @@ section BooleanAlgebra
variable [BooleanAlgebra α] {s : Finset ι}
+#print Finset.sup_sdiff_left /-
theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
(s.sup fun b => a \ f b) = a \ s.inf f :=
by
@@ -672,7 +815,9 @@ theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
· rw [sup_empty, inf_empty, sdiff_top]
· rw [sup_cons, inf_cons, h, sdiff_inf]
#align finset.sup_sdiff_left Finset.sup_sdiff_left
+-/
+#print Finset.inf_sdiff_left /-
theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.inf fun b => a \ f b) = a \ s.sup f :=
by
@@ -680,7 +825,9 @@ theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [sup_singleton, inf_singleton]
· rw [sup_cons, inf_cons, h, sdiff_sup]
#align finset.inf_sdiff_left Finset.inf_sdiff_left
+-/
+#print Finset.inf_sdiff_right /-
theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.inf fun b => f b \ a) = s.inf f \ a :=
by
@@ -688,21 +835,28 @@ theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [inf_singleton, inf_singleton]
· rw [inf_cons, inf_cons, h, inf_sdiff]
#align finset.inf_sdiff_right Finset.inf_sdiff_right
+-/
+#print Finset.inf_himp_right /-
theorem inf_himp_right (s : Finset ι) (f : ι → α) (a : α) :
(s.inf fun b => f b ⇨ a) = s.sup f ⇨ a :=
@sup_sdiff_left αᵒᵈ _ _ _ _ _
#align finset.inf_himp_right Finset.inf_himp_right
+-/
+#print Finset.sup_himp_right /-
theorem sup_himp_right (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.sup fun b => f b ⇨ a) = s.inf f ⇨ a :=
@inf_sdiff_left αᵒᵈ _ _ _ hs _ _
#align finset.sup_himp_right Finset.sup_himp_right
+-/
+#print Finset.sup_himp_left /-
theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.sup fun b => a ⇨ f b) = a ⇨ s.sup f :=
@inf_sdiff_right αᵒᵈ _ _ _ hs _ _
#align finset.sup_himp_left Finset.sup_himp_left
+-/
#print Finset.compl_sup /-
@[simp]
@@ -728,11 +882,14 @@ section OrderBot
variable [OrderBot α] {s : Finset ι} {f : ι → α} {a : α}
+#print Finset.comp_sup_eq_sup_comp_of_is_total /-
theorem comp_sup_eq_sup_comp_of_is_total [SemilatticeSup β] [OrderBot β] (g : α → β)
(mono_g : Monotone g) (bot : g ⊥ = ⊥) : g (s.sup f) = s.sup (g ∘ f) :=
comp_sup_eq_sup_comp g mono_g.map_sup bot
#align finset.comp_sup_eq_sup_comp_of_is_total Finset.comp_sup_eq_sup_comp_of_is_total
+-/
+#print Finset.le_sup_iff /-
@[simp]
protected theorem le_sup_iff (ha : ⊥ < a) : a ≤ s.sup f ↔ ∃ b ∈ s, a ≤ f b :=
⟨Finset.cons_induction_on s (fun h => absurd h (not_le_of_lt ha)) fun c t hc ih => by
@@ -742,7 +899,9 @@ protected theorem le_sup_iff (ha : ⊥ < a) : a ≤ s.sup f ↔ ∃ b ∈ s, a
⟨b, Or.inr hb, hle⟩,
fun ⟨b, hb, hle⟩ => trans hle (le_sup hb)⟩
#align finset.le_sup_iff Finset.le_sup_iff
+-/
+#print Finset.lt_sup_iff /-
@[simp]
protected theorem lt_sup_iff : a < s.sup f ↔ ∃ b ∈ s, a < f b :=
⟨Finset.cons_induction_on s (fun h => absurd h not_lt_bot) fun c t hc ih => by
@@ -752,13 +911,16 @@ protected theorem lt_sup_iff : a < s.sup f ↔ ∃ b ∈ s, a < f b :=
⟨b, Or.inr hb, hlt⟩,
fun ⟨b, hb, hlt⟩ => lt_of_lt_of_le hlt (le_sup hb)⟩
#align finset.lt_sup_iff Finset.lt_sup_iff
+-/
+#print Finset.sup_lt_iff /-
@[simp]
protected theorem sup_lt_iff (ha : ⊥ < a) : s.sup f < a ↔ ∀ b ∈ s, f b < a :=
⟨fun hs b hb => lt_of_le_of_lt (le_sup hb) hs,
Finset.cons_induction_on s (fun _ => ha) fun c t hc => by
simpa only [sup_cons, sup_lt_iff, mem_cons, forall_eq_or_imp] using And.imp_right⟩
#align finset.sup_lt_iff Finset.sup_lt_iff
+-/
end OrderBot
@@ -766,51 +928,69 @@ section OrderTop
variable [OrderTop α] {s : Finset ι} {f : ι → α} {a : α}
+#print Finset.comp_inf_eq_inf_comp_of_is_total /-
theorem comp_inf_eq_inf_comp_of_is_total [SemilatticeInf β] [OrderTop β] (g : α → β)
(mono_g : Monotone g) (top : g ⊤ = ⊤) : g (s.inf f) = s.inf (g ∘ f) :=
comp_inf_eq_inf_comp g mono_g.map_inf top
#align finset.comp_inf_eq_inf_comp_of_is_total Finset.comp_inf_eq_inf_comp_of_is_total
+-/
+#print Finset.inf_le_iff /-
@[simp]
protected theorem inf_le_iff (ha : a < ⊤) : s.inf f ≤ a ↔ ∃ b ∈ s, f b ≤ a :=
@Finset.le_sup_iff αᵒᵈ _ _ _ _ _ _ ha
#align finset.inf_le_iff Finset.inf_le_iff
+-/
+#print Finset.inf_lt_iff /-
@[simp]
protected theorem inf_lt_iff : s.inf f < a ↔ ∃ b ∈ s, f b < a :=
@Finset.lt_sup_iff αᵒᵈ _ _ _ _ _ _
#align finset.inf_lt_iff Finset.inf_lt_iff
+-/
+#print Finset.lt_inf_iff /-
@[simp]
protected theorem lt_inf_iff (ha : a < ⊤) : a < s.inf f ↔ ∀ b ∈ s, a < f b :=
@Finset.sup_lt_iff αᵒᵈ _ _ _ _ _ _ ha
#align finset.lt_inf_iff Finset.lt_inf_iff
+-/
end OrderTop
end LinearOrder
+#print Finset.inf_eq_iInf /-
theorem inf_eq_iInf [CompleteLattice β] (s : Finset α) (f : α → β) : s.inf f = ⨅ a ∈ s, f a :=
@sup_eq_iSup _ βᵒᵈ _ _ _
#align finset.inf_eq_infi Finset.inf_eq_iInf
+-/
+#print Finset.inf_id_eq_sInf /-
theorem inf_id_eq_sInf [CompleteLattice α] (s : Finset α) : s.inf id = sInf s :=
@sup_id_eq_sSup αᵒᵈ _ _
#align finset.inf_id_eq_Inf Finset.inf_id_eq_sInf
+-/
+#print Finset.inf_id_set_eq_sInter /-
theorem inf_id_set_eq_sInter (s : Finset (Set α)) : s.inf id = ⋂₀ ↑s :=
inf_id_eq_sInf _
#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_sInter
+-/
+#print Finset.inf_set_eq_iInter /-
@[simp]
theorem inf_set_eq_iInter (s : Finset α) (f : α → Set β) : s.inf f = ⋂ x ∈ s, f x :=
inf_eq_iInf _ _
#align finset.inf_set_eq_bInter Finset.inf_set_eq_iInter
+-/
+#print Finset.inf_eq_sInf_image /-
theorem inf_eq_sInf_image [CompleteLattice β] (s : Finset α) (f : α → β) :
s.inf f = sInf (f '' s) :=
@sup_eq_sSup_image _ βᵒᵈ _ _ _
#align finset.inf_eq_Inf_image Finset.inf_eq_sInf_image
+-/
section Sup'
@@ -834,22 +1014,28 @@ def sup' (s : Finset β) (H : s.Nonempty) (f : β → α) : α :=
variable {s : Finset β} (H : s.Nonempty) (f : β → α)
+#print Finset.coe_sup' /-
@[simp]
theorem coe_sup' : ((s.sup' H f : α) : WithBot α) = s.sup (coe ∘ f) := by
rw [sup', WithBot.coe_unbot]
#align finset.coe_sup' Finset.coe_sup'
+-/
+#print Finset.sup'_cons /-
@[simp]
theorem sup'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
(cons b s hb).sup' h f = f b ⊔ s.sup' H f := by rw [← WithBot.coe_eq_coe];
simp only [coe_sup', sup_cons, WithBot.coe_sup]
#align finset.sup'_cons Finset.sup'_cons
+-/
+#print Finset.sup'_insert /-
@[simp]
theorem sup'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
(insert b s).sup' h f = f b ⊔ s.sup' H f := by rw [← WithBot.coe_eq_coe];
simp only [coe_sup', sup_insert, WithBot.coe_sup]
#align finset.sup'_insert Finset.sup'_insert
+-/
#print Finset.sup'_singleton /-
@[simp]
@@ -878,6 +1064,7 @@ theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s
#align finset.le_sup'_of_le Finset.le_sup'_of_le
-/
+#print Finset.sup'_const /-
@[simp]
theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
by
@@ -885,18 +1072,24 @@ theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
· apply sup'_le; intros; exact le_rfl
· apply le_sup' (fun b => a) H.some_spec
#align finset.sup'_const Finset.sup'_const
+-/
+#print Finset.sup'_le_iff /-
@[simp]
theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
Iff.intro (fun h b hb => trans (le_sup' f hb) h) (sup'_le H f)
#align finset.sup'_le_iff Finset.sup'_le_iff
+-/
+#print Finset.sup'_biUnion /-
theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
(s.biUnion t).sup' (Hs.biUnion fun b _ => Ht b) f = s.sup' Hs fun b => (t b).sup' (Ht b) f :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup'_bUnion Finset.sup'_biUnion
+-/
+#print Finset.comp_sup'_eq_sup'_comp /-
theorem comp_sup'_eq_sup'_comp [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) :=
by
@@ -912,7 +1105,9 @@ theorem comp_sup'_eq_sup'_comp [SemilatticeSup γ] {s : Finset β} (H : s.Nonemp
· rfl
· exact congr_arg coe (g_sup f₁ f₂)
#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_comp
+-/
+#print Finset.sup'_induction /-
theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.sup' H f) :=
by
@@ -924,12 +1119,15 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
cases a₂
exacts [h₁, hp a₁ h₁ a₂ h₂]
#align finset.sup'_induction Finset.sup'_induction
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+#print Finset.sup'_mem /-
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
sup'_induction H p w h
#align finset.sup'_mem Finset.sup'_mem
+-/
#print Finset.sup'_congr /-
@[congr]
@@ -973,22 +1171,28 @@ def inf' (s : Finset β) (H : s.Nonempty) (f : β → α) : α :=
variable {s : Finset β} (H : s.Nonempty) (f : β → α) {a : α} {b : β}
+#print Finset.coe_inf' /-
@[simp]
theorem coe_inf' : ((s.inf' H f : α) : WithTop α) = s.inf (coe ∘ f) :=
@coe_sup' αᵒᵈ _ _ _ H f
#align finset.coe_inf' Finset.coe_inf'
+-/
+#print Finset.inf'_cons /-
@[simp]
theorem inf'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
(cons b s hb).inf' h f = f b ⊓ s.inf' H f :=
@sup'_cons αᵒᵈ _ _ _ H f _ _ h
#align finset.inf'_cons Finset.inf'_cons
+-/
+#print Finset.inf'_insert /-
@[simp]
theorem inf'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
(insert b s).inf' h f = f b ⊓ s.inf' H f :=
@sup'_insert αᵒᵈ _ _ _ H f _ _ h
#align finset.inf'_insert Finset.inf'_insert
+-/
#print Finset.inf'_singleton /-
@[simp]
@@ -1009,41 +1213,55 @@ theorem inf'_le (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
#align finset.inf'_le Finset.inf'_le
-/
+#print Finset.inf'_le_of_le /-
theorem inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a :=
(inf'_le _ hb).trans h
#align finset.inf'_le_of_le Finset.inf'_le_of_le
+-/
+#print Finset.inf'_const /-
@[simp]
theorem inf'_const (a : α) : (s.inf' H fun b => a) = a :=
@sup'_const αᵒᵈ _ _ _ H _
#align finset.inf'_const Finset.inf'_const
+-/
+#print Finset.le_inf'_iff /-
@[simp]
theorem le_inf'_iff : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
@sup'_le_iff αᵒᵈ _ _ _ H f _
#align finset.le_inf'_iff Finset.le_inf'_iff
+-/
+#print Finset.inf'_biUnion /-
theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
(s.biUnion t).inf' (Hs.biUnion fun b _ => Ht b) f = s.inf' Hs fun b => (t b).inf' (Ht b) f :=
@sup'_biUnion αᵒᵈ _ _ _ _ _ _ Hs _ Ht
#align finset.inf'_bUnion Finset.inf'_biUnion
+-/
+#print Finset.comp_inf'_eq_inf'_comp /-
theorem comp_inf'_eq_inf'_comp [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) :=
@comp_sup'_eq_sup'_comp αᵒᵈ _ γᵒᵈ _ _ _ H f g g_inf
#align finset.comp_inf'_eq_inf'_comp Finset.comp_inf'_eq_inf'_comp
+-/
+#print Finset.inf'_induction /-
theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊓ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.inf' H f) :=
@sup'_induction αᵒᵈ _ _ _ H f _ hp hs
#align finset.inf'_induction Finset.inf'_induction
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+#print Finset.inf'_mem /-
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
inf'_induction H p w h
#align finset.inf'_mem Finset.inf'_mem
+-/
#print Finset.inf'_congr /-
@[congr]
@@ -1074,10 +1292,12 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+#print Finset.sup_closed_of_sup_closed /-
theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closed
+-/
#print Finset.coe_sup_of_nonempty /-
theorem coe_sup_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
@@ -1098,10 +1318,12 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+#print Finset.inf_closed_of_inf_closed /-
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
+-/
#print Finset.coe_inf_of_nonempty /-
theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
@@ -1116,11 +1338,13 @@ section Sup
variable {C : β → Type _} [∀ b : β, SemilatticeSup (C b)] [∀ b : β, OrderBot (C b)]
+#print Finset.sup_apply /-
@[simp]
protected theorem sup_apply (s : Finset α) (f : α → ∀ b : β, C b) (b : β) :
s.sup f b = s.sup fun a => f a b :=
comp_sup_eq_sup_comp (fun x : ∀ b : β, C b => x b) (fun i j => rfl) rfl
#align finset.sup_apply Finset.sup_apply
+-/
end Sup
@@ -1128,11 +1352,13 @@ section Inf
variable {C : β → Type _} [∀ b : β, SemilatticeInf (C b)] [∀ b : β, OrderTop (C b)]
+#print Finset.inf_apply /-
@[simp]
protected theorem inf_apply (s : Finset α) (f : α → ∀ b : β, C b) (b : β) :
s.inf f b = s.inf fun a => f a b :=
@Finset.sup_apply _ _ (fun b => (C b)ᵒᵈ) _ _ s f b
#align finset.inf_apply Finset.inf_apply
+-/
end Inf
@@ -1140,11 +1366,13 @@ section Sup'
variable {C : β → Type _} [∀ b : β, SemilatticeSup (C b)]
+#print Finset.sup'_apply /-
@[simp]
protected theorem sup'_apply {s : Finset α} (H : s.Nonempty) (f : α → ∀ b : β, C b) (b : β) :
s.sup' H f b = s.sup' H fun a => f a b :=
comp_sup'_eq_sup'_comp H (fun x : ∀ b : β, C b => x b) fun i j => rfl
#align finset.sup'_apply Finset.sup'_apply
+-/
end Sup'
@@ -1152,77 +1380,99 @@ section Inf'
variable {C : β → Type _} [∀ b : β, SemilatticeInf (C b)]
+#print Finset.inf'_apply /-
@[simp]
protected theorem inf'_apply {s : Finset α} (H : s.Nonempty) (f : α → ∀ b : β, C b) (b : β) :
s.inf' H f b = s.inf' H fun a => f a b :=
@Finset.sup'_apply _ _ (fun b => (C b)ᵒᵈ) _ _ H f b
#align finset.inf'_apply Finset.inf'_apply
+-/
end Inf'
+#print Finset.toDual_sup' /-
@[simp]
theorem toDual_sup' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
toDual (s.sup' hs f) = s.inf' hs (toDual ∘ f) :=
rfl
#align finset.to_dual_sup' Finset.toDual_sup'
+-/
+#print Finset.toDual_inf' /-
@[simp]
theorem toDual_inf' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
toDual (s.inf' hs f) = s.sup' hs (toDual ∘ f) :=
rfl
#align finset.to_dual_inf' Finset.toDual_inf'
+-/
+#print Finset.ofDual_sup' /-
@[simp]
theorem ofDual_sup' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
ofDual (s.sup' hs f) = s.inf' hs (ofDual ∘ f) :=
rfl
#align finset.of_dual_sup' Finset.ofDual_sup'
+-/
+#print Finset.ofDual_inf' /-
@[simp]
theorem ofDual_inf' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
ofDual (s.inf' hs f) = s.sup' hs (ofDual ∘ f) :=
rfl
#align finset.of_dual_inf' Finset.ofDual_inf'
+-/
section LinearOrder
variable [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ι → α} {a : α}
+#print Finset.le_sup'_iff /-
@[simp]
theorem le_sup'_iff : a ≤ s.sup' H f ↔ ∃ b ∈ s, a ≤ f b :=
by
rw [← WithBot.coe_le_coe, coe_sup', Finset.le_sup_iff (WithBot.bot_lt_coe a)]
exact bex_congr fun b hb => WithBot.coe_le_coe
#align finset.le_sup'_iff Finset.le_sup'_iff
+-/
+#print Finset.lt_sup'_iff /-
@[simp]
theorem lt_sup'_iff : a < s.sup' H f ↔ ∃ b ∈ s, a < f b :=
by
rw [← WithBot.coe_lt_coe, coe_sup', Finset.lt_sup_iff]
exact bex_congr fun b hb => WithBot.coe_lt_coe
#align finset.lt_sup'_iff Finset.lt_sup'_iff
+-/
+#print Finset.sup'_lt_iff /-
@[simp]
theorem sup'_lt_iff : s.sup' H f < a ↔ ∀ i ∈ s, f i < a :=
by
rw [← WithBot.coe_lt_coe, coe_sup', Finset.sup_lt_iff (WithBot.bot_lt_coe a)]
exact ball_congr fun b hb => WithBot.coe_lt_coe
#align finset.sup'_lt_iff Finset.sup'_lt_iff
+-/
+#print Finset.inf'_le_iff /-
@[simp]
theorem inf'_le_iff : s.inf' H f ≤ a ↔ ∃ i ∈ s, f i ≤ a :=
@le_sup'_iff αᵒᵈ _ _ _ H f _
#align finset.inf'_le_iff Finset.inf'_le_iff
+-/
+#print Finset.inf'_lt_iff /-
@[simp]
theorem inf'_lt_iff : s.inf' H f < a ↔ ∃ i ∈ s, f i < a :=
@lt_sup'_iff αᵒᵈ _ _ _ H f _
#align finset.inf'_lt_iff Finset.inf'_lt_iff
+-/
+#print Finset.lt_inf'_iff /-
@[simp]
theorem lt_inf'_iff : a < s.inf' H f ↔ ∀ i ∈ s, a < f i :=
@sup'_lt_iff αᵒᵈ _ _ _ H f _
#align finset.lt_inf'_iff Finset.lt_inf'_iff
+-/
#print Finset.exists_mem_eq_sup' /-
theorem exists_mem_eq_sup' (f : ι → α) : ∃ i, i ∈ s ∧ s.sup' H f = f i :=
@@ -1243,15 +1493,19 @@ theorem exists_mem_eq_inf' (f : ι → α) : ∃ i, i ∈ s ∧ s.inf' H f = f i
#align finset.exists_mem_eq_inf' Finset.exists_mem_eq_inf'
-/
+#print Finset.exists_mem_eq_sup /-
theorem exists_mem_eq_sup [OrderBot α] (s : Finset ι) (h : s.Nonempty) (f : ι → α) :
∃ i, i ∈ s ∧ s.sup f = f i :=
sup'_eq_sup h f ▸ exists_mem_eq_sup' h f
#align finset.exists_mem_eq_sup Finset.exists_mem_eq_sup
+-/
+#print Finset.exists_mem_eq_inf /-
theorem exists_mem_eq_inf [OrderTop α] (s : Finset ι) (h : s.Nonempty) (f : ι → α) :
∃ i, i ∈ s ∧ s.inf f = f i :=
@exists_mem_eq_sup αᵒᵈ _ _ _ _ h f
#align finset.exists_mem_eq_inf Finset.exists_mem_eq_inf
+-/
end LinearOrder
@@ -1290,10 +1544,12 @@ theorem max_empty : (∅ : Finset α).max = ⊥ :=
#align finset.max_empty Finset.max_empty
-/
+#print Finset.max_insert /-
@[simp]
theorem max_insert {a : α} {s : Finset α} : (insert a s).max = max a s.max :=
fold_insert_idem
#align finset.max_insert Finset.max_insert
+-/
#print Finset.max_singleton /-
@[simp]
@@ -1398,10 +1654,12 @@ theorem min_empty : (∅ : Finset α).min = ⊤ :=
#align finset.min_empty Finset.min_empty
-/
+#print Finset.min_insert /-
@[simp]
theorem min_insert {a : α} {s : Finset α} : (insert a s).min = min (↑a) s.min :=
fold_insert_idem
#align finset.min_insert Finset.min_insert
+-/
#print Finset.min_singleton /-
@[simp]
@@ -1680,16 +1938,20 @@ theorem min'_subset {s t : Finset α} (H : s.Nonempty) (hst : s ⊆ t) :
#align finset.min'_subset Finset.min'_subset
-/
+#print Finset.max'_insert /-
theorem max'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(insert a s).max' (s.insert_nonempty a) = max (s.max' H) a :=
(isGreatest_max' _ _).unique <| by rw [coe_insert, max_comm];
exact (is_greatest_max' _ _).insert _
#align finset.max'_insert Finset.max'_insert
+-/
+#print Finset.min'_insert /-
theorem min'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(insert a s).min' (s.insert_nonempty a) = min (s.min' H) a :=
(isLeast_min' _ _).unique <| by rw [coe_insert, min_comm]; exact (is_least_min' _ _).insert _
#align finset.min'_insert Finset.min'_insert
+-/
#print Finset.lt_max'_of_mem_erase_max' /-
theorem lt_max'_of_mem_erase_max' [DecidableEq α] {a : α} (ha : a ∈ s.eraseₓ (s.max' H)) :
@@ -1740,25 +2002,33 @@ theorem coe_min' {s : Finset α} (hs : s.Nonempty) : ↑(s.min' hs) = s.min :=
#align finset.coe_min' Finset.coe_min'
-/
+#print Finset.max_mem_image_coe /-
theorem max_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
s.max ∈ (s.image coe : Finset (WithBot α)) :=
mem_image.2 ⟨max' s hs, max'_mem _ _, coe_max' hs⟩
#align finset.max_mem_image_coe Finset.max_mem_image_coe
+-/
+#print Finset.min_mem_image_coe /-
theorem min_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
s.min ∈ (s.image coe : Finset (WithTop α)) :=
mem_image.2 ⟨min' s hs, min'_mem _ _, coe_min' hs⟩
#align finset.min_mem_image_coe Finset.min_mem_image_coe
+-/
+#print Finset.max_mem_insert_bot_image_coe /-
theorem max_mem_insert_bot_image_coe (s : Finset α) :
s.max ∈ (insert ⊥ (s.image coe) : Finset (WithBot α)) :=
mem_insert.2 <| s.eq_empty_or_nonempty.imp max_eq_bot.2 max_mem_image_coe
#align finset.max_mem_insert_bot_image_coe Finset.max_mem_insert_bot_image_coe
+-/
+#print Finset.min_mem_insert_top_image_coe /-
theorem min_mem_insert_top_image_coe (s : Finset α) :
s.min ∈ (insert ⊤ (s.image coe) : Finset (WithTop α)) :=
mem_insert.2 <| s.eq_empty_or_nonempty.imp min_eq_top.2 min_mem_image_coe
#align finset.min_mem_insert_top_image_coe Finset.min_mem_insert_top_image_coe
+-/
#print Finset.max'_erase_ne_self /-
theorem max'_erase_ne_self {s : Finset α} (s0 : (s.eraseₓ x).Nonempty) : (s.eraseₓ x).max' s0 ≠ x :=
@@ -1789,20 +2059,25 @@ theorem min_erase_ne_self {s : Finset α} : (s.eraseₓ x).min ≠ x := by
#align finset.min_erase_ne_self Finset.min_erase_ne_self
-/
+#print Finset.exists_next_right /-
theorem exists_next_right {x : α} {s : Finset α} (h : ∃ y ∈ s, x < y) :
∃ y ∈ s, x < y ∧ ∀ z ∈ s, x < z → y ≤ z :=
have Hne : (s.filterₓ ((· < ·) x)).Nonempty := h.imp fun y hy => mem_filter.2 ⟨hy.fst, hy.snd⟩
⟨min' _ Hne, (mem_filter.1 (min'_mem _ Hne)).1, (mem_filter.1 (min'_mem _ Hne)).2, fun z hzs hz =>
min'_le _ _ <| mem_filter.2 ⟨hzs, hz⟩⟩
#align finset.exists_next_right Finset.exists_next_right
+-/
+#print Finset.exists_next_left /-
theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
∃ y ∈ s, y < x ∧ ∀ z ∈ s, z < x → z ≤ y :=
@exists_next_right αᵒᵈ _ x s h
#align finset.exists_next_left Finset.exists_next_left
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+#print Finset.card_le_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card t + 1`. -/
theorem card_le_of_interleaved {s t : Finset α}
(h :
@@ -1833,8 +2108,10 @@ theorem card_le_of_interleaved {s t : Finset α}
(min_mem_insert_top_image_coe _))
_ ≤ t.card + 1 := (card_insert_le _ _).trans (add_le_add_right card_image_le _)
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+#print Finset.card_le_diff_of_interleaved /-
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
(h :
@@ -1845,6 +2122,7 @@ theorem card_le_diff_of_interleaved {s t : Finset α}
let ⟨z, hzt, hxz, hzy⟩ := h x hx y hy hxy hs
⟨z, mem_sdiff.2 ⟨hzt, fun hzs => hs z hzs ⟨hxz, hzy⟩⟩, hxz, hzy⟩
#align finset.card_le_diff_of_interleaved Finset.card_le_diff_of_interleaved
+-/
#print Finset.induction_on_max /-
/-- Induction principle for `finset`s in a linearly ordered type: a predicate is true on all
@@ -1931,6 +2209,7 @@ section ExistsMaxMin
variable [LinearOrder α]
+#print Finset.exists_max_image /-
theorem exists_max_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
∃ x ∈ s, ∀ x' ∈ s, f x' ≤ f x :=
by
@@ -1938,11 +2217,14 @@ theorem exists_max_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
rcases mem_image.mp (mem_of_max hy) with ⟨x, hx, rfl⟩
exact ⟨x, hx, fun x' hx' => le_max_of_eq (mem_image_of_mem f hx') hy⟩
#align finset.exists_max_image Finset.exists_max_image
+-/
+#print Finset.exists_min_image /-
theorem exists_min_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
∃ x ∈ s, ∀ x' ∈ s, f x ≤ f x' :=
@exists_max_image αᵒᵈ β _ s f h
#align finset.exists_min_image Finset.exists_min_image
+-/
end ExistsMaxMin
@@ -1981,11 +2263,14 @@ end Finset
namespace Multiset
+#print Multiset.map_finset_sup /-
theorem map_finset_sup [DecidableEq α] [DecidableEq β] (s : Finset γ) (f : γ → Multiset β)
(g : β → α) (hg : Function.Injective g) : map g (s.sup f) = s.sup (map g ∘ f) :=
Finset.comp_sup_eq_sup_comp _ (fun _ _ => map_union hg) (map_zero _)
#align multiset.map_finset_sup Multiset.map_finset_sup
+-/
+#print Multiset.count_finset_sup /-
theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset β) (b : β) :
count b (s.sup f) = s.sup fun a => count b (f a) :=
by
@@ -1996,7 +2281,9 @@ theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset
rw [Finset.sup_insert, sup_eq_union, count_union, Finset.sup_insert, ih]
rfl
#align multiset.count_finset_sup Multiset.count_finset_sup
+-/
+#print Multiset.mem_sup /-
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β} {x : β} :
x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by
classical
@@ -2018,11 +2305,13 @@ theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β
· exact Or.inl hfv
· refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
#align multiset.mem_sup Multiset.mem_sup
+-/
end Multiset
namespace Finset
+#print Finset.mem_sup /-
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Finset β} {x : β} :
x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v :=
by
@@ -2030,21 +2319,28 @@ theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Finset β}
rw [← Multiset.mem_sup, ← Multiset.mem_toFinset, sup_to_finset]
simp_rw [val_to_finset]
#align finset.mem_sup Finset.mem_sup
+-/
+#print Finset.sup_eq_biUnion /-
theorem sup_eq_biUnion {α β} [DecidableEq β] (s : Finset α) (t : α → Finset β) :
s.sup t = s.biUnion t := by ext; rw [mem_sup, mem_bUnion]
#align finset.sup_eq_bUnion Finset.sup_eq_biUnion
+-/
+#print Finset.sup_singleton'' /-
@[simp]
theorem sup_singleton'' [DecidableEq α] (s : Finset β) (f : β → α) :
(s.sup fun b => {f b}) = s.image f := by ext a; rw [mem_sup, mem_image];
simp only [mem_singleton, eq_comm]
#align finset.sup_singleton'' Finset.sup_singleton''
+-/
+#print Finset.sup_singleton' /-
@[simp]
theorem sup_singleton' [DecidableEq α] (s : Finset α) : s.sup singleton = s :=
(s.sup_singleton'' _).trans image_id
#align finset.sup_singleton' Finset.sup_singleton'
+-/
end Finset
@@ -2052,6 +2348,7 @@ section Lattice
variable {ι' : Sort _} [CompleteLattice α]
+#print iSup_eq_iSup_finset /-
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `supr_eq_supr_finset'` for a version
that works for `ι : Sort*`. -/
@@ -2061,7 +2358,9 @@ theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι,
(iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl)
(iSup_le fun t => iSup_le fun b => iSup_le fun hb => le_iSup _ _)
#align supr_eq_supr_finset iSup_eq_iSup_finset
+-/
+#print iSup_eq_iSup_finset' /-
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `supr_eq_supr_finset` for a version
that assumes `ι : Type*` but has no `plift`s. -/
@@ -2069,14 +2368,18 @@ theorem iSup_eq_iSup_finset' (s : ι' → α) :
(⨆ i, s i) = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
rw [← iSup_eq_iSup_finset, ← equiv.plift.surjective.supr_comp] <;> rfl
#align supr_eq_supr_finset' iSup_eq_iSup_finset'
+-/
+#print iInf_eq_iInf_finset /-
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : finset ι` of infima
`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `infi_eq_infi_finset'` for a version
that works for `ι : Sort*`. -/
theorem iInf_eq_iInf_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι) (i ∈ t), s i :=
@iSup_eq_iSup_finset αᵒᵈ _ _ _
#align infi_eq_infi_finset iInf_eq_iInf_finset
+-/
+#print iInf_eq_iInf_finset' /-
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : finset ι` of infima
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `infi_eq_infi_finset` for a version
that assumes `ι : Type*` but has no `plift`s. -/
@@ -2084,6 +2387,7 @@ theorem iInf_eq_iInf_finset' (s : ι' → α) :
(⨅ i, s i) = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
@iSup_eq_iSup_finset' αᵒᵈ _ _ _
#align infi_eq_infi_finset' iInf_eq_iInf_finset'
+-/
end Lattice
@@ -2091,13 +2395,16 @@ namespace Set
variable {ι' : Sort _}
+#print Set.iUnion_eq_iUnion_finset /-
/-- Union of an indexed family of sets `s : ι → set α` is equal to the union of the unions
of finite subfamilies. This version assumes `ι : Type*`. See also `Union_eq_Union_finset'` for
a version that works for `ι : Sort*`. -/
theorem iUnion_eq_iUnion_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
iSup_eq_iSup_finset s
#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finset
+-/
+#print Set.iUnion_eq_iUnion_finset' /-
/-- Union of an indexed family of sets `s : ι → set α` is equal to the union of the unions
of finite subfamilies. This version works for `ι : Sort*`. See also `Union_eq_Union_finset` for
a version that assumes `ι : Type*` but avoids `plift`s in the right hand side. -/
@@ -2105,14 +2412,18 @@ theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
(⋃ i, s i) = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
iSup_eq_iSup_finset' s
#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'
+-/
+#print Set.iInter_eq_iInter_finset /-
/-- Intersection of an indexed family of sets `s : ι → set α` is equal to the intersection of the
intersections of finite subfamilies. This version assumes `ι : Type*`. See also
`Inter_eq_Inter_finset'` for a version that works for `ι : Sort*`. -/
theorem iInter_eq_iInter_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
iInf_eq_iInf_finset s
#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finset
+-/
+#print Set.iInter_eq_iInter_finset' /-
/-- Intersection of an indexed family of sets `s : ι → set α` is equal to the intersection of the
intersections of finite subfamilies. This version works for `ι : Sort*`. See also
`Inter_eq_Inter_finset` for a version that assumes `ι : Type*` but avoids `plift`s in the right
@@ -2121,6 +2432,7 @@ theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
(⋂ i, s i) = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
iInf_eq_iInf_finset' s
#align set.Inter_eq_Inter_finset' Set.iInter_eq_iInter_finset'
+-/
end Set
@@ -2129,31 +2441,39 @@ namespace Finset
/-! ### Interaction with ordered algebra structures -/
+#print Finset.sup_mul_le_mul_sup_of_nonneg /-
theorem sup_mul_le_mul_sup_of_nonneg [LinearOrderedSemiring α] [OrderBot α] {a b : ι → α}
(s : Finset ι) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.sup (a * b) ≤ s.sup a * s.sup b :=
Finset.sup_le fun i hi =>
mul_le_mul (le_sup hi) (le_sup hi) (hb _ hi) ((ha _ hi).trans <| le_sup hi)
#align finset.sup_mul_le_mul_sup_of_nonneg Finset.sup_mul_le_mul_sup_of_nonneg
+-/
+#print Finset.mul_inf_le_inf_mul_of_nonneg /-
theorem mul_inf_le_inf_mul_of_nonneg [LinearOrderedSemiring α] [OrderTop α] {a b : ι → α}
(s : Finset ι) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.inf a * s.inf b ≤ s.inf (a * b) :=
Finset.le_inf fun i hi => mul_le_mul (inf_le hi) (inf_le hi) (Finset.le_inf hb) (ha i hi)
#align finset.mul_inf_le_inf_mul_of_nonneg Finset.mul_inf_le_inf_mul_of_nonneg
+-/
+#print Finset.sup'_mul_le_mul_sup'_of_nonneg /-
theorem sup'_mul_le_mul_sup'_of_nonneg [LinearOrderedSemiring α] {a b : ι → α} (s : Finset ι)
(H : s.Nonempty) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.sup' H (a * b) ≤ s.sup' H a * s.sup' H b :=
sup'_le _ _ fun i hi =>
mul_le_mul (le_sup' _ hi) (le_sup' _ hi) (hb _ hi) ((ha _ hi).trans <| le_sup' _ hi)
#align finset.sup'_mul_le_mul_sup'_of_nonneg Finset.sup'_mul_le_mul_sup'_of_nonneg
+-/
+#print Finset.inf'_mul_le_mul_inf'_of_nonneg /-
theorem inf'_mul_le_mul_inf'_of_nonneg [LinearOrderedSemiring α] {a b : ι → α} (s : Finset ι)
(H : s.Nonempty) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.inf' H a * s.inf' H b ≤ s.inf' H (a * b) :=
le_inf' _ _ fun i hi => mul_le_mul (inf'_le _ hi) (inf'_le _ hi) (le_inf' _ _ hb) (ha _ hi)
#align finset.inf'_mul_le_mul_inf'_of_nonneg Finset.inf'_mul_le_mul_inf'_of_nonneg
+-/
open Function
@@ -2176,79 +2496,111 @@ theorem iInf_coe [InfSet β] (f : α → β) (s : Finset α) : (⨅ x ∈ (↑s
variable [CompleteLattice β]
+#print Finset.iSup_singleton /-
theorem iSup_singleton (a : α) (s : α → β) : (⨆ x ∈ ({a} : Finset α), s x) = s a := by simp
#align finset.supr_singleton Finset.iSup_singleton
+-/
+#print Finset.iInf_singleton /-
theorem iInf_singleton (a : α) (s : α → β) : (⨅ x ∈ ({a} : Finset α), s x) = s a := by simp
#align finset.infi_singleton Finset.iInf_singleton
+-/
+#print Finset.iSup_option_toFinset /-
theorem iSup_option_toFinset (o : Option α) (f : α → β) : (⨆ x ∈ o.toFinset, f x) = ⨆ x ∈ o, f x :=
by simp
#align finset.supr_option_to_finset Finset.iSup_option_toFinset
+-/
+#print Finset.iInf_option_toFinset /-
theorem iInf_option_toFinset (o : Option α) (f : α → β) : (⨅ x ∈ o.toFinset, f x) = ⨅ x ∈ o, f x :=
@iSup_option_toFinset _ βᵒᵈ _ _ _
#align finset.infi_option_to_finset Finset.iInf_option_toFinset
+-/
variable [DecidableEq α]
+#print Finset.iSup_union /-
theorem iSup_union {f : α → β} {s t : Finset α} :
(⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [iSup_or, iSup_sup_eq]
#align finset.supr_union Finset.iSup_union
+-/
+#print Finset.iInf_union /-
theorem iInf_union {f : α → β} {s t : Finset α} :
(⨅ x ∈ s ∪ t, f x) = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
@iSup_union α βᵒᵈ _ _ _ _ _
#align finset.infi_union Finset.iInf_union
+-/
+#print Finset.iSup_insert /-
theorem iSup_insert (a : α) (s : Finset α) (t : α → β) :
(⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x := by rw [insert_eq];
simp only [iSup_union, Finset.iSup_singleton]
#align finset.supr_insert Finset.iSup_insert
+-/
+#print Finset.iInf_insert /-
theorem iInf_insert (a : α) (s : Finset α) (t : α → β) :
(⨅ x ∈ insert a s, t x) = t a ⊓ ⨅ x ∈ s, t x :=
@iSup_insert α βᵒᵈ _ _ _ _ _
#align finset.infi_insert Finset.iInf_insert
+-/
+#print Finset.iSup_finset_image /-
theorem iSup_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
(⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← supr_coe, coe_image, iSup_image, supr_coe]
#align finset.supr_finset_image Finset.iSup_finset_image
+-/
+#print Finset.iInf_finset_image /-
theorem iInf_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
(⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← infi_coe, coe_image, iInf_image, infi_coe]
#align finset.infi_finset_image Finset.iInf_finset_image
+-/
+#print Finset.iSup_insert_update /-
theorem iSup_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i :=
by
simp only [Finset.iSup_insert, update_same]
rcongr (i hi); apply update_noteq; rintro rfl; exact hx hi
#align finset.supr_insert_update Finset.iSup_insert_update
+-/
+#print Finset.iInf_insert_update /-
theorem iInf_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨅ i ∈ insert x t, update f x s i) = s ⊓ ⨅ i ∈ t, f i :=
@iSup_insert_update α βᵒᵈ _ _ _ _ f _ hx
#align finset.infi_insert_update Finset.iInf_insert_update
+-/
+#print Finset.iSup_biUnion /-
theorem iSup_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
(⨆ y ∈ s.biUnion t, f y) = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@iSup_comm _ α, iSup_and]
#align finset.supr_bUnion Finset.iSup_biUnion
+-/
+#print Finset.iInf_biUnion /-
theorem iInf_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
(⨅ y ∈ s.biUnion t, f y) = ⨅ (x ∈ s) (y ∈ t x), f y :=
@iSup_biUnion _ βᵒᵈ _ _ _ _ _ _
#align finset.infi_bUnion Finset.iInf_biUnion
+-/
end Lattice
+#print Finset.set_biUnion_coe /-
theorem set_biUnion_coe (s : Finset α) (t : α → Set β) : (⋃ x ∈ (↑s : Set α), t x) = ⋃ x ∈ s, t x :=
rfl
#align finset.set_bUnion_coe Finset.set_biUnion_coe
+-/
+#print Finset.set_biInter_coe /-
theorem set_biInter_coe (s : Finset α) (t : α → Set β) : (⋂ x ∈ (↑s : Set α), t x) = ⋂ x ∈ s, t x :=
rfl
#align finset.set_bInter_coe Finset.set_biInter_coe
+-/
#print Finset.set_biUnion_singleton /-
theorem set_biUnion_singleton (a : α) (s : α → Set β) : (⋃ x ∈ ({a} : Finset α), s x) = s a :=
@@ -2270,72 +2622,98 @@ theorem set_biUnion_preimage_singleton (f : α → β) (s : Finset β) :
#align finset.set_bUnion_preimage_singleton Finset.set_biUnion_preimage_singleton
-/
+#print Finset.set_biUnion_option_toFinset /-
theorem set_biUnion_option_toFinset (o : Option α) (f : α → Set β) :
(⋃ x ∈ o.toFinset, f x) = ⋃ x ∈ o, f x :=
iSup_option_toFinset o f
#align finset.set_bUnion_option_to_finset Finset.set_biUnion_option_toFinset
+-/
+#print Finset.set_biInter_option_toFinset /-
theorem set_biInter_option_toFinset (o : Option α) (f : α → Set β) :
(⋂ x ∈ o.toFinset, f x) = ⋂ x ∈ o, f x :=
iInf_option_toFinset o f
#align finset.set_bInter_option_to_finset Finset.set_biInter_option_toFinset
+-/
+#print Finset.subset_set_biUnion_of_mem /-
theorem subset_set_biUnion_of_mem {s : Finset α} {f : α → Set β} {x : α} (h : x ∈ s) :
f x ⊆ ⋃ y ∈ s, f y :=
show f x ≤ ⨆ y ∈ s, f y from le_iSup_of_le x <| le_iSup _ h
#align finset.subset_set_bUnion_of_mem Finset.subset_set_biUnion_of_mem
+-/
variable [DecidableEq α]
+#print Finset.set_biUnion_union /-
theorem set_biUnion_union (s t : Finset α) (u : α → Set β) :
(⋃ x ∈ s ∪ t, u x) = (⋃ x ∈ s, u x) ∪ ⋃ x ∈ t, u x :=
iSup_union
#align finset.set_bUnion_union Finset.set_biUnion_union
+-/
+#print Finset.set_biInter_inter /-
theorem set_biInter_inter (s t : Finset α) (u : α → Set β) :
(⋂ x ∈ s ∪ t, u x) = (⋂ x ∈ s, u x) ∩ ⋂ x ∈ t, u x :=
iInf_union
#align finset.set_bInter_inter Finset.set_biInter_inter
+-/
+#print Finset.set_biUnion_insert /-
theorem set_biUnion_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋃ x ∈ insert a s, t x) = t a ∪ ⋃ x ∈ s, t x :=
iSup_insert a s t
#align finset.set_bUnion_insert Finset.set_biUnion_insert
+-/
+#print Finset.set_biInter_insert /-
theorem set_biInter_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋂ x ∈ insert a s, t x) = t a ∩ ⋂ x ∈ s, t x :=
iInf_insert a s t
#align finset.set_bInter_insert Finset.set_biInter_insert
+-/
+#print Finset.set_biUnion_finset_image /-
theorem set_biUnion_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋃ x ∈ s.image f, g x) = ⋃ y ∈ s, g (f y) :=
iSup_finset_image
#align finset.set_bUnion_finset_image Finset.set_biUnion_finset_image
+-/
+#print Finset.set_biInter_finset_image /-
theorem set_biInter_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋂ x ∈ s.image f, g x) = ⋂ y ∈ s, g (f y) :=
iInf_finset_image
#align finset.set_bInter_finset_image Finset.set_biInter_finset_image
+-/
+#print Finset.set_biUnion_insert_update /-
theorem set_biUnion_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋃ i ∈ insert x t, @update _ _ _ f x s i) = s ∪ ⋃ i ∈ t, f i :=
iSup_insert_update f hx
#align finset.set_bUnion_insert_update Finset.set_biUnion_insert_update
+-/
+#print Finset.set_biInter_insert_update /-
theorem set_biInter_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋂ i ∈ insert x t, @update _ _ _ f x s i) = s ∩ ⋂ i ∈ t, f i :=
iInf_insert_update f hx
#align finset.set_bInter_insert_update Finset.set_biInter_insert_update
+-/
+#print Finset.set_biUnion_biUnion /-
theorem set_biUnion_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
(⋃ y ∈ s.biUnion t, f y) = ⋃ (x ∈ s) (y ∈ t x), f y :=
iSup_biUnion s t f
#align finset.set_bUnion_bUnion Finset.set_biUnion_biUnion
+-/
+#print Finset.set_biInter_biUnion /-
theorem set_biInter_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
(⋂ y ∈ s.biUnion t, f y) = ⋂ (x ∈ s) (y ∈ t x), f y :=
iInf_biUnion s t f
#align finset.set_bInter_bUnion Finset.set_biInter_biUnion
+-/
end Finset
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -1824,7 +1824,6 @@ theorem card_le_of_interleaved {s t : Finset α}
_ < f y :=
(Finset.lt_inf_iff <| WithTop.coe_lt_top a).2 fun b hb =>
WithTop.coe_lt_coe.2 <| hay.trans (mem_filter.1 hb).2
-
calc
s.card = (s.image f).card := (card_image_of_inj_on f_mono.inj_on).symm
_ ≤ (insert ⊤ (t.image coe) : Finset (WithTop α)).card :=
@@ -1833,7 +1832,6 @@ theorem card_le_of_interleaved {s t : Finset α}
insert_subset_insert _ (image_subset_image <| filter_subset _ _)
(min_mem_insert_top_image_coe _))
_ ≤ t.card + 1 := (card_insert_le _ _).trans (add_le_add_right card_image_le _)
-
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -294,7 +294,7 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s)
@@ -512,7 +512,7 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
@sup_induction αᵒᵈ _ _ _ _ _ _ ht hp hs
#align finset.inf_induction Finset.inf_induction
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@inf_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
@@ -925,7 +925,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
exacts [h₁, hp a₁ h₁ a₂ h₂]
#align finset.sup'_induction Finset.sup'_induction
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
sup'_induction H p w h
@@ -1039,7 +1039,7 @@ theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
@sup'_induction αᵒᵈ _ _ _ H f _ hp hs
#align finset.inf'_induction Finset.inf'_induction
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
inf'_induction H p w h
@@ -1073,7 +1073,7 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
#align finset.sup'_eq_sup Finset.sup'_eq_sup
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
@@ -1097,7 +1097,7 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
#align finset.inf'_eq_inf Finset.inf'_eq_inf
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
@@ -1801,8 +1801,8 @@ theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
@exists_next_right αᵒᵈ _ x s h
#align finset.exists_next_left Finset.exists_next_left
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card t + 1`. -/
theorem card_le_of_interleaved {s t : Finset α}
(h :
@@ -1836,7 +1836,7 @@ theorem card_le_of_interleaved {s t : Finset α}
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
(h :
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -277,21 +277,21 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
(∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by
classical
- apply Finset.induction_on t
- ·
- simpa only [forall_prop_of_true, and_true_iff, forall_prop_of_false, bot_le, not_false_iff,
- sup_empty, forall_true_iff, not_mem_empty]
- · intro a r har ih h
- have incs : ↑r ⊆ ↑(insert a r) := by rw [Finset.coe_subset]; apply Finset.subset_insert
- -- x ∈ s is above the sup of r
- obtain ⟨x, ⟨hxs, hsx_sup⟩⟩ := ih fun x hx => h x <| incs hx
- -- y ∈ s is above a
- obtain ⟨y, hys, hay⟩ := h a (Finset.mem_insert_self a r)
- -- z ∈ s is above x and y
- obtain ⟨z, hzs, ⟨hxz, hyz⟩⟩ := hdir x hxs y hys
- use z, hzs
- rw [sup_insert, id.def, sup_le_iff]
- exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
+ apply Finset.induction_on t
+ ·
+ simpa only [forall_prop_of_true, and_true_iff, forall_prop_of_false, bot_le, not_false_iff,
+ sup_empty, forall_true_iff, not_mem_empty]
+ · intro a r har ih h
+ have incs : ↑r ⊆ ↑(insert a r) := by rw [Finset.coe_subset]; apply Finset.subset_insert
+ -- x ∈ s is above the sup of r
+ obtain ⟨x, ⟨hxs, hsx_sup⟩⟩ := ih fun x hx => h x <| incs hx
+ -- y ∈ s is above a
+ obtain ⟨y, hys, hay⟩ := h a (Finset.mem_insert_self a r)
+ -- z ∈ s is above x and y
+ obtain ⟨z, hzs, ⟨hxz, hyz⟩⟩ := hdir x hxs y hys
+ use z, hzs
+ rw [sup_insert, id.def, sup_le_iff]
+ exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
@@ -1722,7 +1722,7 @@ theorem max'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finse
theorem min'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
(h : (s.image f).Nonempty) : (s.image f).min' h = f (s.min' ((Nonempty.image_iff f).mp h)) :=
by
- convert@max'_image αᵒᵈ βᵒᵈ _ _ (fun a : αᵒᵈ => to_dual (f (of_dual a))) (by simpa) _ _ <;>
+ convert @max'_image αᵒᵈ βᵒᵈ _ _ (fun a : αᵒᵈ => to_dual (f (of_dual a))) (by simpa) _ _ <;>
convert h
rw [nonempty.image_iff]
#align finset.min'_image Finset.min'_image
@@ -1785,7 +1785,7 @@ theorem max_erase_ne_self {s : Finset α} : (s.eraseₓ x).max ≠ x :=
#print Finset.min_erase_ne_self /-
theorem min_erase_ne_self {s : Finset α} : (s.eraseₓ x).min ≠ x := by
- convert@max_erase_ne_self αᵒᵈ _ _ _
+ convert @max_erase_ne_self αᵒᵈ _ _ _
#align finset.min_erase_ne_self Finset.min_erase_ne_self
-/
@@ -2002,23 +2002,23 @@ theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β} {x : β} :
x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by
classical
- apply s.induction_on
- · simp
- · intro a s has hxs
- rw [Finset.sup_insert, Multiset.sup_eq_union, Multiset.mem_union]
- constructor
- · intro hxi
- cases' hxi with hf hf
- · refine' ⟨a, _, hf⟩
- simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert]
- · rcases hxs.mp hf with ⟨v, hv, hfv⟩
- refine' ⟨v, _, hfv⟩
- simp only [hv, or_true_iff, Finset.mem_insert]
- · rintro ⟨v, hv, hfv⟩
- rw [Finset.mem_insert] at hv
- rcases hv with (rfl | hv)
- · exact Or.inl hfv
- · refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
+ apply s.induction_on
+ · simp
+ · intro a s has hxs
+ rw [Finset.sup_insert, Multiset.sup_eq_union, Multiset.mem_union]
+ constructor
+ · intro hxi
+ cases' hxi with hf hf
+ · refine' ⟨a, _, hf⟩
+ simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert]
+ · rcases hxs.mp hf with ⟨v, hv, hfv⟩
+ refine' ⟨v, _, hfv⟩
+ simp only [hv, or_true_iff, Finset.mem_insert]
+ · rintro ⟨v, hv, hfv⟩
+ rw [Finset.mem_insert] at hv
+ rcases hv with (rfl | hv)
+ · exact Or.inl hfv
+ · refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
#align multiset.mem_sup Multiset.mem_sup
end Multiset
@@ -2059,9 +2059,9 @@ variable {ι' : Sort _} [CompleteLattice α]
that works for `ι : Sort*`. -/
theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
classical exact
- le_antisymm
- (iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl)
- (iSup_le fun t => iSup_le fun b => iSup_le fun hb => le_iSup _ _)
+ le_antisymm
+ (iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl)
+ (iSup_le fun t => iSup_le fun b => iSup_le fun hb => le_iSup _ _)
#align supr_eq_supr_finset iSup_eq_iSup_finset
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -882,7 +882,7 @@ theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s
theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
by
apply le_antisymm
- · apply sup'_le; intros ; exact le_rfl
+ · apply sup'_le; intros; exact le_rfl
· apply le_sup' (fun b => a) H.some_spec
#align finset.sup'_const Finset.sup'_const
@@ -922,7 +922,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
rintro (_ | a₁) h₁ a₂ h₂
· rw [WithBot.none_eq_bot, bot_sup_eq]; exact h₂
cases a₂
- exacts[h₁, hp a₁ h₁ a₂ h₂]
+ exacts [h₁, hp a₁ h₁ a₂ h₂]
#align finset.sup'_induction Finset.sup'_induction
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
@@ -1321,7 +1321,7 @@ theorem max_eq_bot {s : Finset α} : s.max = ⊥ ↔ s = ∅ :=
s.eq_empty_or_nonempty.elim id fun H =>
by
let ⟨a, ha⟩ := max_of_nonempty H
- rw [h] at ha <;> cases ha,
+ rw [h] at ha <;> cases ha,
fun h => h.symm ▸ max_empty⟩
#align finset.max_eq_bot Finset.max_eq_bot
-/
@@ -1333,7 +1333,7 @@ theorem mem_of_max {s : Finset α} : ∀ {a : α}, s.max = a → a ∈ s :=
by
by_cases p : b = a
· induction p; exact mem_insert_self b s
- · cases' max_choice (↑b) s.max with q q <;> rw [max_insert, q] at h
+ · cases' max_choice (↑b) s.max with q q <;> rw [max_insert, q] at h
· cases h; cases p rfl
· exact mem_insert_of_mem (ih h)
#align finset.mem_of_max Finset.mem_of_max
@@ -1429,7 +1429,7 @@ theorem min_eq_top {s : Finset α} : s.min = ⊤ ↔ s = ∅ :=
s.eq_empty_or_nonempty.elim id fun H =>
by
let ⟨a, ha⟩ := min_of_nonempty H
- rw [h] at ha <;> cases ha,
+ rw [h] at ha <;> cases ha,
fun h => h.symm ▸ min_empty⟩
#align finset.min_eq_top Finset.min_eq_top
-/
@@ -1901,10 +1901,10 @@ theorem induction_on_max_value [DecidableEq ι] (f : ι → α) {p : Finset ι
by
induction' s using Finset.strongInductionOn with s ihs
rcases(s.image f).eq_empty_or_nonempty with (hne | hne)
- · simp only [image_eq_empty] at hne
+ · simp only [image_eq_empty] at hne
simp only [hne, h0]
· have H : (s.image f).max' hne ∈ s.image f := max'_mem (s.image f) hne
- simp only [mem_image, exists_prop] at H
+ simp only [mem_image, exists_prop] at H
rcases H with ⟨a, has, hfa⟩
rw [← insert_erase has]
refine' step _ _ (not_mem_erase a s) (fun x hx => _) (ihs _ <| erase_ssubset has)
@@ -1954,7 +1954,7 @@ theorem is_glb_iff_is_least [LinearOrder α] (i : α) (s : Finset α) (hs : s.No
by
refine' ⟨fun his => _, IsLeast.isGLB⟩
suffices i = min' s hs by rw [this]; exact is_least_min' s hs
- rw [IsGLB, IsGreatest, mem_lowerBounds, mem_upperBounds] at his
+ rw [IsGLB, IsGreatest, mem_lowerBounds, mem_upperBounds] at his
exact le_antisymm (his.1 (Finset.min' s hs) (Finset.min'_mem s hs)) (his.2 _ (Finset.min'_le s))
#align finset.is_glb_iff_is_least Finset.is_glb_iff_is_least
-/
@@ -2015,7 +2015,7 @@ theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β
refine' ⟨v, _, hfv⟩
simp only [hv, or_true_iff, Finset.mem_insert]
· rintro ⟨v, hv, hfv⟩
- rw [Finset.mem_insert] at hv
+ rw [Finset.mem_insert] at hv
rcases hv with (rfl | hv)
· exact Or.inl hfv
· refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -38,10 +38,12 @@ section Sup
-- TODO: define with just `[has_bot α]` where some lemmas hold without requiring `[order_bot α]`
variable [SemilatticeSup α] [OrderBot α]
+#print Finset.sup /-
/-- Supremum of a finite set: `sup {a, b, c} f = f a ⊔ f b ⊔ f c` -/
def sup (s : Finset β) (f : β → α) : α :=
s.fold (· ⊔ ·) ⊥ f
#align finset.sup Finset.sup
+-/
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
@@ -69,10 +71,12 @@ theorem sup_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β →
fold_image_idem
#align finset.sup_image Finset.sup_image
+#print Finset.sup_map /-
@[simp]
theorem sup_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).sup g = s.sup (g ∘ f) :=
fold_map
#align finset.sup_map Finset.sup_map
+-/
@[simp]
theorem sup_singleton {b : β} : ({b} : Finset β).sup f = f b :=
@@ -92,9 +96,11 @@ theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
exact sup_sup_sup_comm _ _ _ _
#align finset.sup_sup Finset.sup_sup
+#print Finset.sup_congr /-
theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.sup f = s₂.sup g :=
by subst hs <;> exact Finset.fold_congr hfg
#align finset.sup_congr Finset.sup_congr
+-/
@[simp]
theorem map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β] (f : F) (s : Finset ι)
@@ -119,13 +125,17 @@ theorem sup_const_le : (s.sup fun _ => a) ≤ a :=
Finset.sup_le fun _ _ => le_rfl
#align finset.sup_const_le Finset.sup_const_le
+#print Finset.le_sup /-
theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
Finset.sup_le_iff.1 le_rfl _ hb
#align finset.le_sup Finset.le_sup
+-/
+#print Finset.le_sup_of_le /-
theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
h.trans <| le_sup hb
#align finset.le_sup_of_le Finset.le_sup_of_le
+-/
@[simp]
theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
@@ -133,9 +143,11 @@ theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup_bUnion Finset.sup_biUnion
+#print Finset.sup_const /-
theorem sup_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.sup fun _ => c) = c :=
eq_of_forall_ge_iff fun b => Finset.sup_le_iff.trans h.forall_const
#align finset.sup_const Finset.sup_const
+-/
@[simp]
theorem sup_bot (s : Finset β) : (s.sup fun _ => ⊥) = (⊥ : α) :=
@@ -151,13 +163,17 @@ theorem sup_ite (p : β → Prop) [DecidablePred p] :
fold_ite _
#align finset.sup_ite Finset.sup_ite
+#print Finset.sup_mono_fun /-
theorem sup_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.sup f ≤ s.sup g :=
Finset.sup_le fun b hb => le_trans (h b hb) (le_sup hb)
#align finset.sup_mono_fun Finset.sup_mono_fun
+-/
+#print Finset.sup_mono /-
theorem sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f :=
Finset.sup_le fun b hb => le_sup <| h hb
#align finset.sup_mono Finset.sup_mono
+-/
protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.sup fun b => t.sup (f b)) = t.sup fun c => s.sup fun b => f b c :=
@@ -167,10 +183,12 @@ protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α
exact ⟨fun h c hc b hb => h b hb c hc, fun h b hb c hc => h c hc b hb⟩
#align finset.sup_comm Finset.sup_comm
+#print Finset.sup_attach /-
@[simp]
theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x) = s.sup f :=
(s.attach.sup_map (Function.Embedding.subtype _) f).symm.trans <| congr_arg _ attach_map_val
#align finset.sup_attach Finset.sup_attach
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- See also `finset.product_bUnion`. -/
@@ -322,10 +340,12 @@ section Inf
-- TODO: define with just `[has_top α]` where some lemmas hold without requiring `[order_top α]`
variable [SemilatticeInf α] [OrderTop α]
+#print Finset.inf /-
/-- Infimum of a finite set: `inf {a, b, c} f = f a ⊓ f b ⊓ f c` -/
def inf (s : Finset β) (f : β → α) : α :=
s.fold (· ⊓ ·) ⊤ f
#align finset.inf Finset.inf
+-/
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
@@ -353,10 +373,12 @@ theorem inf_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β →
fold_image_idem
#align finset.inf_image Finset.inf_image
+#print Finset.inf_map /-
@[simp]
theorem inf_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).inf g = s.inf (g ∘ f) :=
fold_map
#align finset.inf_map Finset.inf_map
+-/
@[simp]
theorem inf_singleton {b : β} : ({b} : Finset β).inf f = f b :=
@@ -371,9 +393,11 @@ theorem inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
#align finset.inf_inf Finset.inf_inf
+#print Finset.inf_congr /-
theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.inf f = s₂.inf g :=
by subst hs <;> exact Finset.fold_congr hfg
#align finset.inf_congr Finset.inf_congr
+-/
@[simp]
theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β] (f : F) (s : Finset ι)
@@ -387,9 +411,11 @@ theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
@sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
#align finset.inf_bUnion Finset.inf_biUnion
+#print Finset.inf_const /-
theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c :=
@sup_const αᵒᵈ _ _ _ _ h _
#align finset.inf_const Finset.inf_const
+-/
@[simp]
theorem inf_top (s : Finset β) : (s.inf fun _ => ⊤) = (⊤ : α) :=
@@ -409,25 +435,35 @@ theorem le_inf_const_le : a ≤ s.inf fun _ => a :=
Finset.le_inf fun _ _ => le_rfl
#align finset.le_inf_const_le Finset.le_inf_const_le
+#print Finset.inf_le /-
theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
Finset.le_inf_iff.1 le_rfl _ hb
#align finset.inf_le Finset.inf_le
+-/
+#print Finset.inf_le_of_le /-
theorem inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a :=
(inf_le hb).trans h
#align finset.inf_le_of_le Finset.inf_le_of_le
+-/
+#print Finset.inf_mono_fun /-
theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
Finset.le_inf fun b hb => le_trans (inf_le hb) (h b hb)
#align finset.inf_mono_fun Finset.inf_mono_fun
+-/
+#print Finset.inf_mono /-
theorem inf_mono (h : s₁ ⊆ s₂) : s₂.inf f ≤ s₁.inf f :=
Finset.le_inf fun b hb => inf_le <| h hb
#align finset.inf_mono Finset.inf_mono
+-/
+#print Finset.inf_attach /-
theorem inf_attach (s : Finset β) (f : β → α) : (s.attach.inf fun x => f x) = s.inf f :=
@sup_attach αᵒᵈ _ _ _ _ _
#align finset.inf_attach Finset.inf_attach
+-/
protected theorem inf_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.inf fun b => t.inf (f b)) = t.inf fun c => s.inf fun b => f b c :=
@@ -822,19 +858,25 @@ theorem sup'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset
#align finset.sup'_singleton Finset.sup'_singleton
-/
+#print Finset.sup'_le /-
theorem sup'_le {a : α} (hs : ∀ b ∈ s, f b ≤ a) : s.sup' H f ≤ a :=
by
rw [← WithBot.coe_le_coe, coe_sup']
exact Finset.sup_le fun b h => WithBot.coe_le_coe.2 <| hs b h
#align finset.sup'_le Finset.sup'_le
+-/
+#print Finset.le_sup' /-
theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f := by
rw [← WithBot.coe_le_coe, coe_sup']; exact le_sup h
#align finset.le_sup' Finset.le_sup'
+-/
+#print Finset.le_sup'_of_le /-
theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
h.trans <| le_sup' _ hb
#align finset.le_sup'_of_le Finset.le_sup'_of_le
+-/
@[simp]
theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
@@ -955,13 +997,17 @@ theorem inf'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset
#align finset.inf'_singleton Finset.inf'_singleton
-/
+#print Finset.le_inf' /-
theorem le_inf' (hs : ∀ b ∈ s, a ≤ f b) : a ≤ s.inf' H f :=
@sup'_le αᵒᵈ _ _ _ H f _ hs
#align finset.le_inf' Finset.le_inf'
+-/
+#print Finset.inf'_le /-
theorem inf'_le (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
@le_sup' αᵒᵈ _ _ _ f _ h
#align finset.inf'_le Finset.inf'_le
+-/
theorem inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a :=
(inf'_le _ hb).trans h
@@ -1021,9 +1067,11 @@ section Sup
variable [SemilatticeSup α] [OrderBot α]
+#print Finset.sup'_eq_sup /-
theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H f = s.sup f :=
le_antisymm (sup'_le H f fun b => le_sup) (Finset.sup_le fun b => le_sup' f)
#align finset.sup'_eq_sup Finset.sup'_eq_sup
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
@@ -1031,9 +1079,11 @@ theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closed
+#print Finset.coe_sup_of_nonempty /-
theorem coe_sup_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.sup f) : WithBot α) = s.sup (coe ∘ f) := by simp only [← sup'_eq_sup h, coe_sup' h]
#align finset.coe_sup_of_nonempty Finset.coe_sup_of_nonempty
+-/
end Sup
@@ -1041,9 +1091,11 @@ section Inf
variable [SemilatticeInf α] [OrderTop α]
+#print Finset.inf'_eq_inf /-
theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H f = s.inf f :=
@sup'_eq_sup αᵒᵈ _ _ _ _ H f
#align finset.inf'_eq_inf Finset.inf'_eq_inf
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
@@ -1051,10 +1103,12 @@ theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty
@sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
+#print Finset.coe_inf_of_nonempty /-
theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.inf f) : WithTop α) = s.inf fun i => f i :=
@coe_sup_of_nonempty αᵒᵈ _ _ _ _ h f
#align finset.coe_inf_of_nonempty Finset.coe_inf_of_nonempty
+-/
end Inf
@@ -1285,30 +1339,42 @@ theorem mem_of_max {s : Finset α} : ∀ {a : α}, s.max = a → a ∈ s :=
#align finset.mem_of_max Finset.mem_of_max
-/
+#print Finset.le_max /-
theorem le_max {a : α} {s : Finset α} (as : a ∈ s) : ↑a ≤ s.max :=
le_sup as
#align finset.le_max Finset.le_max
+-/
+#print Finset.not_mem_of_max_lt_coe /-
theorem not_mem_of_max_lt_coe {a : α} {s : Finset α} (h : s.max < a) : a ∉ s :=
mt le_max h.not_le
#align finset.not_mem_of_max_lt_coe Finset.not_mem_of_max_lt_coe
+-/
+#print Finset.le_max_of_eq /-
theorem le_max_of_eq {s : Finset α} {a b : α} (h₁ : a ∈ s) (h₂ : s.max = b) : a ≤ b :=
WithBot.coe_le_coe.mp <| (le_max h₁).trans h₂.le
#align finset.le_max_of_eq Finset.le_max_of_eq
+-/
+#print Finset.not_mem_of_max_lt /-
theorem not_mem_of_max_lt {s : Finset α} {a b : α} (h₁ : b < a) (h₂ : s.max = ↑b) : a ∉ s :=
Finset.not_mem_of_max_lt_coe <| h₂.trans_lt <| WithBot.coe_lt_coe.mpr h₁
#align finset.not_mem_of_max_lt Finset.not_mem_of_max_lt
+-/
+#print Finset.max_mono /-
theorem max_mono {s t : Finset α} (st : s ⊆ t) : s.max ≤ t.max :=
sup_mono st
#align finset.max_mono Finset.max_mono
+-/
+#print Finset.max_le /-
protected theorem max_le {M : WithBot α} {s : Finset α} (st : ∀ a ∈ s, (a : WithBot α) ≤ M) :
s.max ≤ M :=
Finset.sup_le st
#align finset.max_le Finset.max_le
+-/
#print Finset.min /-
/-- Let `s` be a finset in a linear order. Then `s.min` is the minimum of `s` if `s` is not empty,
@@ -1374,29 +1440,41 @@ theorem mem_of_min {s : Finset α} : ∀ {a : α}, s.min = a → a ∈ s :=
#align finset.mem_of_min Finset.mem_of_min
-/
+#print Finset.min_le /-
theorem min_le {a : α} {s : Finset α} (as : a ∈ s) : s.min ≤ a :=
inf_le as
#align finset.min_le Finset.min_le
+-/
+#print Finset.not_mem_of_coe_lt_min /-
theorem not_mem_of_coe_lt_min {a : α} {s : Finset α} (h : ↑a < s.min) : a ∉ s :=
mt min_le h.not_le
#align finset.not_mem_of_coe_lt_min Finset.not_mem_of_coe_lt_min
+-/
+#print Finset.min_le_of_eq /-
theorem min_le_of_eq {s : Finset α} {a b : α} (h₁ : b ∈ s) (h₂ : s.min = a) : a ≤ b :=
WithTop.coe_le_coe.mp <| h₂.ge.trans (min_le h₁)
#align finset.min_le_of_eq Finset.min_le_of_eq
+-/
+#print Finset.not_mem_of_lt_min /-
theorem not_mem_of_lt_min {s : Finset α} {a b : α} (h₁ : a < b) (h₂ : s.min = ↑b) : a ∉ s :=
Finset.not_mem_of_coe_lt_min <| (WithTop.coe_lt_coe.mpr h₁).trans_eq h₂.symm
#align finset.not_mem_of_lt_min Finset.not_mem_of_lt_min
+-/
+#print Finset.min_mono /-
theorem min_mono {s t : Finset α} (st : s ⊆ t) : t.min ≤ s.min :=
inf_mono st
#align finset.min_mono Finset.min_mono
+-/
+#print Finset.le_min /-
protected theorem le_min {m : WithTop α} {s : Finset α} (st : ∀ a : α, a ∈ s → m ≤ a) : m ≤ s.min :=
Finset.le_inf st
#align finset.le_min Finset.le_min
+-/
#print Finset.min' /-
/-- Given a nonempty finset `s` in a linear order `α`, then `s.min' h` is its minimum, as an
@@ -1424,13 +1502,17 @@ theorem min'_mem : s.min' H ∈ s :=
#align finset.min'_mem Finset.min'_mem
-/
+#print Finset.min'_le /-
theorem min'_le (x) (H2 : x ∈ s) : s.min' ⟨x, H2⟩ ≤ x :=
min_le_of_eq H2 (WithTop.coe_untop _ _).symm
#align finset.min'_le Finset.min'_le
+-/
+#print Finset.le_min' /-
theorem le_min' (x) (H2 : ∀ y ∈ s, x ≤ y) : x ≤ s.min' H :=
H2 _ <| min'_mem _ _
#align finset.le_min' Finset.le_min'
+-/
#print Finset.isLeast_min' /-
theorem isLeast_min' : IsLeast (↑s) (s.min' H) :=
@@ -1438,10 +1520,12 @@ theorem isLeast_min' : IsLeast (↑s) (s.min' H) :=
#align finset.is_least_min' Finset.isLeast_min'
-/
+#print Finset.le_min'_iff /-
@[simp]
theorem le_min'_iff {x} : x ≤ s.min' H ↔ ∀ y ∈ s, x ≤ y :=
le_isGLB_iff (isLeast_min' s H).IsGLB
#align finset.le_min'_iff Finset.le_min'_iff
+-/
#print Finset.min'_singleton /-
/-- `{a}.min' _` is `a`. -/
@@ -1456,13 +1540,17 @@ theorem max'_mem : s.max' H ∈ s :=
#align finset.max'_mem Finset.max'_mem
-/
+#print Finset.le_max' /-
theorem le_max' (x) (H2 : x ∈ s) : x ≤ s.max' ⟨x, H2⟩ :=
le_max_of_eq H2 (WithBot.coe_unbot _ _).symm
#align finset.le_max' Finset.le_max'
+-/
+#print Finset.max'_le /-
theorem max'_le (x) (H2 : ∀ y ∈ s, y ≤ x) : s.max' H ≤ x :=
H2 _ <| max'_mem _ _
#align finset.max'_le Finset.max'_le
+-/
#print Finset.isGreatest_max' /-
theorem isGreatest_max' : IsGreatest (↑s) (s.max' H) :=
@@ -1470,20 +1558,26 @@ theorem isGreatest_max' : IsGreatest (↑s) (s.max' H) :=
#align finset.is_greatest_max' Finset.isGreatest_max'
-/
+#print Finset.max'_le_iff /-
@[simp]
theorem max'_le_iff {x} : s.max' H ≤ x ↔ ∀ y ∈ s, y ≤ x :=
isLUB_le_iff (isGreatest_max' s H).IsLUB
#align finset.max'_le_iff Finset.max'_le_iff
+-/
+#print Finset.max'_lt_iff /-
@[simp]
theorem max'_lt_iff {x} : s.max' H < x ↔ ∀ y ∈ s, y < x :=
⟨fun Hlt y hy => (s.le_max' y hy).trans_lt Hlt, fun H => H _ <| s.max'_mem _⟩
#align finset.max'_lt_iff Finset.max'_lt_iff
+-/
+#print Finset.lt_min'_iff /-
@[simp]
theorem lt_min'_iff : x < s.min' H ↔ ∀ y ∈ s, x < y :=
@max'_lt_iff αᵒᵈ _ _ H _
#align finset.lt_min'_iff Finset.lt_min'_iff
+-/
#print Finset.max'_eq_sup' /-
theorem max'_eq_sup' : s.max' H = s.sup' H id :=
@@ -1504,11 +1598,14 @@ theorem max'_singleton (a : α) : ({a} : Finset α).max' (singleton_nonempty _)
#align finset.max'_singleton Finset.max'_singleton
-/
+#print Finset.min'_lt_max' /-
theorem min'_lt_max' {i j} (H1 : i ∈ s) (H2 : j ∈ s) (H3 : i ≠ j) :
s.min' ⟨i, H1⟩ < s.max' ⟨i, H1⟩ :=
isGLB_lt_isLUB_of_ne (s.isLeast_min' _).IsGLB (s.isGreatest_max' _).IsLUB H1 H2 H3
#align finset.min'_lt_max' Finset.min'_lt_max'
+-/
+#print Finset.min'_lt_max'_of_card /-
/-- If there's more than 1 element, the min' is less than the max'. An alternate version of
`min'_lt_max'` which is sometimes more convenient.
-/
@@ -1519,6 +1616,7 @@ theorem min'_lt_max'_of_card (h₂ : 1 < card s) :
rcases one_lt_card.1 h₂ with ⟨a, ha, b, hb, hab⟩
exact s.min'_lt_max' ha hb hab
#align finset.min'_lt_max'_of_card Finset.min'_lt_max'_of_card
+-/
#print Finset.map_ofDual_min /-
theorem map_ofDual_min (s : Finset αᵒᵈ) : s.min.map ofDual = (s.image ofDual).max := by
@@ -1568,15 +1666,19 @@ theorem toDual_max' {s : Finset α} (hs : s.Nonempty) :
#align finset.to_dual_max' Finset.toDual_max'
-/
+#print Finset.max'_subset /-
theorem max'_subset {s t : Finset α} (H : s.Nonempty) (hst : s ⊆ t) :
s.max' H ≤ t.max' (H.mono hst) :=
le_max' _ _ (hst (s.max'_mem H))
#align finset.max'_subset Finset.max'_subset
+-/
+#print Finset.min'_subset /-
theorem min'_subset {s t : Finset α} (H : s.Nonempty) (hst : s ⊆ t) :
t.min' (H.mono hst) ≤ s.min' H :=
min'_le _ _ (hst (s.min'_mem H))
#align finset.min'_subset Finset.min'_subset
+-/
theorem max'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(insert a s).max' (s.insert_nonempty a) = max (s.max' H) a :=
@@ -1589,15 +1691,19 @@ theorem min'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(isLeast_min' _ _).unique <| by rw [coe_insert, min_comm]; exact (is_least_min' _ _).insert _
#align finset.min'_insert Finset.min'_insert
+#print Finset.lt_max'_of_mem_erase_max' /-
theorem lt_max'_of_mem_erase_max' [DecidableEq α] {a : α} (ha : a ∈ s.eraseₓ (s.max' H)) :
a < s.max' H :=
lt_of_le_of_ne (le_max' _ _ (mem_of_mem_erase ha)) <| ne_of_mem_of_not_mem ha <| not_mem_erase _ _
#align finset.lt_max'_of_mem_erase_max' Finset.lt_max'_of_mem_erase_max'
+-/
+#print Finset.min'_lt_of_mem_erase_min' /-
theorem min'_lt_of_mem_erase_min' [DecidableEq α] {a : α} (ha : a ∈ s.eraseₓ (s.min' H)) :
s.min' H < a :=
@lt_max'_of_mem_erase_max' αᵒᵈ _ s H _ a ha
#align finset.min'_lt_of_mem_erase_min' Finset.min'_lt_of_mem_erase_min'
+-/
#print Finset.max'_image /-
@[simp]
@@ -1742,6 +1848,7 @@ theorem card_le_diff_of_interleaved {s t : Finset α}
⟨z, mem_sdiff.2 ⟨hzt, fun hzs => hs z hzs ⟨hxz, hzy⟩⟩, hxz, hzy⟩
#align finset.card_le_diff_of_interleaved Finset.card_le_diff_of_interleaved
+#print Finset.induction_on_max /-
/-- Induction principle for `finset`s in a linearly ordered type: a predicate is true on all
`s : finset α` provided that:
@@ -1759,7 +1866,9 @@ theorem induction_on_max [DecidableEq α] {p : Finset α → Prop} (s : Finset
rw [← insert_erase H]
exact step _ _ (fun x => s.lt_max'_of_mem_erase_max' hne) (ihs _ <| erase_ssubset H)
#align finset.induction_on_max Finset.induction_on_max
+-/
+#print Finset.induction_on_min /-
/-- Induction principle for `finset`s in a linearly ordered type: a predicate is true on all
`s : finset α` provided that:
@@ -1771,6 +1880,7 @@ theorem induction_on_min [DecidableEq α] {p : Finset α → Prop} (s : Finset
(step : ∀ a s, (∀ x ∈ s, a < x) → p s → p (insert a s)) : p s :=
@induction_on_max αᵒᵈ _ _ _ s h0 step
#align finset.induction_on_min Finset.induction_on_min
+-/
end MaxMin
@@ -1778,6 +1888,7 @@ section MaxMinInductionValue
variable [LinearOrder α] [LinearOrder β]
+#print Finset.induction_on_max_value /-
/-- Induction principle for `finset`s in any type from which a given function `f` maps to a linearly
ordered type : a predicate is true on all `s : finset α` provided that:
@@ -1800,7 +1911,9 @@ theorem induction_on_max_value [DecidableEq ι] (f : ι → α) {p : Finset ι
rw [hfa]
exact le_max' _ _ (mem_image_of_mem _ <| mem_of_mem_erase hx)
#align finset.induction_on_max_value Finset.induction_on_max_value
+-/
+#print Finset.induction_on_min_value /-
/-- Induction principle for `finset`s in any type from which a given function `f` maps to a linearly
ordered type : a predicate is true on all `s : finset α` provided that:
@@ -1812,6 +1925,7 @@ theorem induction_on_min_value [DecidableEq ι] (f : ι → α) {p : Finset ι
(h0 : p ∅) (step : ∀ a s, a ∉ s → (∀ x ∈ s, f a ≤ f x) → p s → p (insert a s)) : p s :=
@induction_on_max_value αᵒᵈ ι _ _ _ _ s h0 step
#align finset.induction_on_min_value Finset.induction_on_min_value
+-/
end MaxMinInductionValue
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -38,12 +38,6 @@ section Sup
-- TODO: define with just `[has_bot α]` where some lemmas hold without requiring `[order_bot α]`
variable [SemilatticeSup α] [OrderBot α]
-/- warning: finset.sup -> Finset.sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
-Case conversion may be inaccurate. Consider using '#align finset.sup Finset.supₓ'. -/
/-- Supremum of a finite set: `sup {a, b, c} f = f a ⊔ f b ⊔ f c` -/
def sup (s : Finset β) (f : β → α) : α :=
s.fold (· ⊔ ·) ⊥ f
@@ -51,99 +45,45 @@ def sup (s : Finset β) (f : β → α) : α :=
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
-/- warning: finset.sup_def -> Finset.sup_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Multiset.sup.{u1} α _inst_1 _inst_2 (Multiset.map.{u2, u1} β α f (Finset.val.{u2} β s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) (Multiset.sup.{u2} α _inst_1 _inst_2 (Multiset.map.{u1, u2} β α f (Finset.val.{u1} β s)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_def Finset.sup_defₓ'. -/
theorem sup_def : s.sup f = (s.1.map f).sup :=
rfl
#align finset.sup_def Finset.sup_def
-/- warning: finset.sup_empty -> Finset.sup_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β)) f) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {f : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β)) f) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))
-Case conversion may be inaccurate. Consider using '#align finset.sup_empty Finset.sup_emptyₓ'. -/
@[simp]
theorem sup_empty : (∅ : Finset β).sup f = ⊥ :=
fold_empty
#align finset.sup_empty Finset.sup_empty
-/- warning: finset.sup_cons -> Finset.sup_cons is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_cons Finset.sup_consₓ'. -/
@[simp]
theorem sup_cons {b : β} (h : b ∉ s) : (cons b s h).sup f = f b ⊔ s.sup f :=
fold_cons h
#align finset.sup_cons Finset.sup_cons
-/- warning: finset.sup_insert -> Finset.sup_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_insert Finset.sup_insertₓ'. -/
@[simp]
theorem sup_insert [DecidableEq β] {b : β} : (insert b s : Finset β).sup f = f b ⊔ s.sup f :=
fold_insert_idem
#align finset.sup_insert Finset.sup_insert
-/- warning: finset.sup_image -> Finset.sup_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.image.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 (Finset.image.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 s (Function.comp.{succ u2, succ u3, succ u1} γ β α g f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_image Finset.sup_imageₓ'. -/
theorem sup_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β → α) :
(s.image f).sup g = s.sup (g ∘ f) :=
fold_image_idem
#align finset.sup_image Finset.sup_image
-/- warning: finset.sup_map -> Finset.sup_map is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (coeFn.{max 1 (succ u3) (succ u2), max (succ u3) (succ u2)} (Function.Embedding.{succ u3, succ u2} γ β) (fun (_x : Function.Embedding.{succ u3, succ u2} γ β) => γ -> β) (Function.Embedding.hasCoeToFun.{succ u3, succ u2} γ β) f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ (fun (_x : γ) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : γ) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ β (Function.instEmbeddingLikeEmbedding.{succ u3, succ u2} γ β)) f)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_map Finset.sup_mapₓ'. -/
@[simp]
theorem sup_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).sup g = s.sup (g ∘ f) :=
fold_map
#align finset.sup_map Finset.sup_map
-/- warning: finset.sup_singleton -> Finset.sup_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b) f) (f b)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) b) f) (f b)
-Case conversion may be inaccurate. Consider using '#align finset.sup_singleton Finset.sup_singletonₓ'. -/
@[simp]
theorem sup_singleton {b : β} : ({b} : Finset β).sup f = f b :=
sup_singleton
#align finset.sup_singleton Finset.sup_singleton
-/- warning: finset.sup_union -> Finset.sup_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.instUnionFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_union Finset.sup_unionₓ'. -/
theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
Finset.induction_on s₁ (by rw [empty_union, sup_empty, bot_sup_eq]) fun a s has ih => by
rw [insert_union, sup_insert, sup_insert, ih, sup_assoc]
#align finset.sup_union Finset.sup_union
-/- warning: finset.sup_sup -> Finset.sup_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Sup.sup.{max u2 u1} (β -> α) (Pi.hasSup.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toHasSup.{u1} α _inst_1)) f g)) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Sup.sup.{max u1 u2} (β -> α) (Pi.instSupForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toSup.{u2} α _inst_1)) f g)) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s g))
-Case conversion may be inaccurate. Consider using '#align finset.sup_sup Finset.sup_supₓ'. -/
theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
by
refine' Finset.cons_induction_on s _ fun b t _ h => _
@@ -152,34 +92,16 @@ theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
exact sup_sup_sup_comm _ _ _ _
#align finset.sup_sup Finset.sup_sup
-/- warning: finset.sup_congr -> Finset.sup_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ g))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ g))
-Case conversion may be inaccurate. Consider using '#align finset.sup_congr Finset.sup_congrₓ'. -/
theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.sup f = s₂.sup g :=
by subst hs <;> exact Finset.fold_congr hfg
#align finset.sup_congr Finset.sup_congr
-/- warning: map_finset_sup -> map_finset_sup is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : SupBotHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.sup.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
-but is expected to have type
- forall {F : Type.{u3}} {α : Type.{u2}} {β : Type.{u4}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u4} β] [_inst_4 : OrderBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3)))] [_inst_5 : SupBotHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} ι) (g : ι -> α), Eq.{succ u4} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 s g)) (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) _x) (SupHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (SupBotHomClass.toSupHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u4, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u4} ι α β (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) _x) (SupHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (SupBotHomClass.toSupHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f) g))
-Case conversion may be inaccurate. Consider using '#align map_finset_sup map_finset_supₓ'. -/
@[simp]
theorem map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β] (f : F) (s : Finset ι)
(g : ι → α) : f (s.sup g) = s.sup (f ∘ g) :=
Finset.cons_induction_on s (map_bot f) fun i s _ h => by rw [sup_cons, sup_cons, map_sup, h]
#align map_finset_sup map_finset_sup
-/- warning: finset.sup_le_iff -> Finset.sup_le_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) a) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) a) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (f b) a))
-Case conversion may be inaccurate. Consider using '#align finset.sup_le_iff Finset.sup_le_iffₓ'. -/
@[simp]
protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
by
@@ -188,75 +110,33 @@ protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a
exact ⟨fun k b hb => k _ _ hb rfl, fun k a' b hb h => h ▸ k _ hb⟩
#align finset.sup_le_iff Finset.sup_le_iff
-/- warning: finset.sup_le -> Finset.sup_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) a)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (f b) a)) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) a)
-Case conversion may be inaccurate. Consider using '#align finset.sup_le Finset.sup_leₓ'. -/
alias Finset.sup_le_iff ↔ _ sup_le
#align finset.sup_le Finset.sup_le
attribute [protected] sup_le
-/- warning: finset.sup_const_le -> Finset.sup_const_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {a : α}, LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => a)) a
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {a : α}, LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (fun (_x : β) => a)) a
-Case conversion may be inaccurate. Consider using '#align finset.sup_const_le Finset.sup_const_leₓ'. -/
theorem sup_const_le : (s.sup fun _ => a) ≤ a :=
Finset.sup_le fun _ _ => le_rfl
#align finset.sup_const_le Finset.sup_const_le
-/- warning: finset.le_sup -> Finset.le_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.le_sup Finset.le_supₓ'. -/
theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
Finset.sup_le_iff.1 le_rfl _ hb
#align finset.le_sup Finset.le_sup
-/- warning: finset.le_sup_of_le -> Finset.le_sup_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.le_sup_of_le Finset.le_sup_of_leₓ'. -/
theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
h.trans <| le_sup hb
#align finset.le_sup_of_le Finset.le_sup_of_le
-/- warning: finset.sup_bUnion -> Finset.sup_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 (t x) f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 (t x) f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_bUnion Finset.sup_biUnionₓ'. -/
@[simp]
theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
(s.biUnion t).sup f = s.sup fun x => (t x).sup f :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup_bUnion Finset.sup_biUnion
-/- warning: finset.sup_const -> Finset.sup_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
-Case conversion may be inaccurate. Consider using '#align finset.sup_const Finset.sup_constₓ'. -/
theorem sup_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.sup fun _ => c) = c :=
eq_of_forall_ge_iff fun b => Finset.sup_le_iff.trans h.forall_const
#align finset.sup_const Finset.sup_const
-/- warning: finset.sup_bot -> Finset.sup_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
-Case conversion may be inaccurate. Consider using '#align finset.sup_bot Finset.sup_botₓ'. -/
@[simp]
theorem sup_bot (s : Finset β) : (s.sup fun _ => ⊥) = (⊥ : α) :=
by
@@ -265,44 +145,20 @@ theorem sup_bot (s : Finset β) : (s.sup fun _ => ⊥) = (⊥ : α) :=
· exact sup_const hs _
#align finset.sup_bot Finset.sup_bot
-/- warning: finset.sup_ite -> Finset.sup_ite is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α} (p : β -> Prop) [_inst_3 : DecidablePred.{succ u2} β p], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => ite.{succ u1} α (p i) (_inst_3 i) (f i) (g i))) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β p (fun (a : β) => _inst_3 a) s) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β (fun (i : β) => Not (p i)) (fun (a : β) => Not.decidable (p a) (_inst_3 a)) s) g))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α} (p : β -> Prop) [_inst_3 : DecidablePred.{succ u2} β p], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => ite.{succ u1} α (p i) (_inst_3 i) (f i) (g i))) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β p (fun (a : β) => _inst_3 a) s) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β (fun (i : β) => Not (p i)) (fun (a : β) => instDecidableNot (p a) (_inst_3 a)) s) g))
-Case conversion may be inaccurate. Consider using '#align finset.sup_ite Finset.sup_iteₓ'. -/
theorem sup_ite (p : β → Prop) [DecidablePred p] :
(s.sup fun i => ite (p i) (f i) (g i)) =
(s.filterₓ p).sup f ⊔ (s.filterₓ fun i => ¬p i).sup g :=
fold_ite _
#align finset.sup_ite Finset.sup_ite
-/- warning: finset.sup_mono_fun -> Finset.sup_mono_fun is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
-Case conversion may be inaccurate. Consider using '#align finset.sup_mono_fun Finset.sup_mono_funₓ'. -/
theorem sup_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.sup f ≤ s.sup g :=
Finset.sup_le fun b hb => le_trans (h b hb) (le_sup hb)
#align finset.sup_mono_fun Finset.sup_mono_fun
-/- warning: finset.sup_mono -> Finset.sup_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_mono Finset.sup_monoₓ'. -/
theorem sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f :=
Finset.sup_le fun b hb => le_sup <| h hb
#align finset.sup_mono Finset.sup_mono
-/- warning: finset.sup_comm -> Finset.sup_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (f b))) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (f b))) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_comm Finset.sup_commₓ'. -/
protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.sup fun b => t.sup (f b)) = t.sup fun c => s.sup fun b => f b c :=
by
@@ -311,23 +167,11 @@ protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α
exact ⟨fun h c hc b hb => h b hb c hc, fun h b hb c hc => h c hc b hb⟩
#align finset.sup_comm Finset.sup_comm
-/- warning: finset.sup_attach -> Finset.sup_attach is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeBase.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeSubtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s))))) x))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) => f (Subtype.val.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) x))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
-Case conversion may be inaccurate. Consider using '#align finset.sup_attach Finset.sup_attachₓ'. -/
@[simp]
theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x) = s.sup f :=
(s.attach.sup_map (Function.Embedding.subtype _) f).symm.trans <| congr_arg _ attach_map_val
#align finset.sup_attach Finset.sup_attach
-/- warning: finset.sup_product_left -> Finset.sup_product_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u2, u3} β γ i i'))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u3, u2} β γ i i'))))
-Case conversion may be inaccurate. Consider using '#align finset.sup_product_left Finset.sup_product_leftₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- See also `finset.product_bUnion`. -/
theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
@@ -339,24 +183,12 @@ theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
le_sup <| mem_product.2 ⟨hb, hc⟩⟩
#align finset.sup_product_left Finset.sup_product_left
-/- warning: finset.sup_product_right -> Finset.sup_product_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u2, u3} β γ i i'))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u3, u2} β γ i i'))))
-Case conversion may be inaccurate. Consider using '#align finset.sup_product_right Finset.sup_product_rightₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem sup_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).sup f = t.sup fun i' => s.sup fun i => f ⟨i, i'⟩ := by
rw [sup_product_left, Finset.sup_comm]
#align finset.sup_product_right Finset.sup_product_right
-/- warning: finset.sup_erase_bot -> Finset.sup_erase_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.sup_erase_bot Finset.sup_erase_botₓ'. -/
@[simp]
theorem sup_erase_bot [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊥).sup id = s.sup id :=
by
@@ -366,12 +198,6 @@ theorem sup_erase_bot [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊥).sup id
· exact le_sup (mem_erase.2 ⟨ha', ha⟩)
#align finset.sup_erase_bot Finset.sup_erase_bot
-/- warning: finset.sup_sdiff_right -> Finset.sup_sdiff_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : GeneralizedBooleanAlgebra.{u1} α] (s : Finset.{u2} β) (f : β -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_3))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_3) s (fun (b : β) => SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_3) (f b) a)) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_3) (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_3))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_3) s f) a)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : GeneralizedBooleanAlgebra.{u2} α] (s : Finset.{u1} β) (f : β -> α) (a : α), Eq.{succ u2} α (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_3))) (GeneralizedBooleanAlgebra.toOrderBot.{u2} α _inst_3) s (fun (b : β) => SDiff.sdiff.{u2} α (GeneralizedBooleanAlgebra.toSDiff.{u2} α _inst_3) (f b) a)) (SDiff.sdiff.{u2} α (GeneralizedBooleanAlgebra.toSDiff.{u2} α _inst_3) (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_3))) (GeneralizedBooleanAlgebra.toOrderBot.{u2} α _inst_3) s f) a)
-Case conversion may be inaccurate. Consider using '#align finset.sup_sdiff_right Finset.sup_sdiff_rightₓ'. -/
theorem sup_sdiff_right {α β : Type _} [GeneralizedBooleanAlgebra α] (s : Finset β) (f : β → α)
(a : α) : (s.sup fun b => f b \ a) = s.sup f \ a :=
by
@@ -380,23 +206,11 @@ theorem sup_sdiff_right {α β : Type _} [GeneralizedBooleanAlgebra α] (s : Fin
· rw [sup_cons, sup_cons, h, sup_sdiff]
#align finset.sup_sdiff_right Finset.sup_sdiff_right
-/- warning: finset.comp_sup_eq_sup_comp -> Finset.comp_sup_eq_sup_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toHasBot.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-Case conversion may be inaccurate. Consider using '#align finset.comp_sup_eq_sup_comp Finset.comp_sup_eq_sup_compₓ'. -/
theorem comp_sup_eq_sup_comp [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) :=
Finset.cons_induction_on s bot fun c t hc ih => by rw [sup_cons, sup_cons, g_sup, ih]
#align finset.comp_sup_eq_sup_comp Finset.comp_sup_eq_sup_comp
-/- warning: finset.sup_coe -> Finset.sup_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.sup.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u1} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u1} α (fun (x : α) => P x) (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.sup.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u2} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_coe Finset.sup_coeₓ'. -/
/-- Computing `sup` in a subtype (closed under `sup`) is the same as computing it in `α`. -/
theorem sup_coe {P : α → Prop} {Pbot : P ⊥} {Psup : ∀ ⦃x y⦄, P x → P y → P (x ⊔ y)} (t : Finset β)
(f : β → { x : α // P x }) :
@@ -404,24 +218,12 @@ theorem sup_coe {P : α → Prop} {Pbot : P ⊥} {Psup : ∀ ⦃x y⦄, P x →
by rw [comp_sup_eq_sup_comp coe] <;> intros <;> rfl
#align finset.sup_coe Finset.sup_coe
-/- warning: finset.sup_to_finset -> Finset.sup_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (f : α -> (Multiset.{u2} β)), Eq.{succ u2} (Finset.{u2} β) (Multiset.toFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b) (Finset.sup.{u2, u1} (Multiset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Multiset.{u2} β) (Multiset.lattice.{u2} β (fun (a : β) (b : β) => _inst_3 a b))) (Multiset.orderBot.{u2} β) s f)) (Finset.sup.{u2, u1} (Finset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_3 a b))) (Finset.orderBot.{u2} β) s (fun (x : α) => Multiset.toFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b) (f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : DecidableEq.{succ u1} β] (s : Finset.{u2} α) (f : α -> (Multiset.{u1} β)), Eq.{succ u1} (Finset.{u1} β) (Multiset.toFinset.{u1} β (fun (a : β) (b : β) => _inst_3 a b) (Finset.sup.{u1, u2} (Multiset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Multiset.{u1} β) (Multiset.instLatticeMultiset.{u1} β (fun (a : β) (b : β) => _inst_3 a b))) (Multiset.instOrderBotMultisetToLEToPreorderInstPartialOrderMultiset.{u1} β) s f)) (Finset.sup.{u1, u2} (Finset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_3 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} β) s (fun (x : α) => Multiset.toFinset.{u1} β (fun (a : β) (b : β) => _inst_3 a b) (f x)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_to_finset Finset.sup_toFinsetₓ'. -/
@[simp]
theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multiset β) :
(s.sup f).toFinset = s.sup fun x => (f x).toFinset :=
comp_sup_eq_sup_comp Multiset.toFinset toFinset_union rfl
#align finset.sup_to_finset Finset.sup_toFinset
-/- warning: list.foldr_sup_eq_sup_to_finset -> List.foldr_sup_eq_sup_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2519 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2521 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2519 x._@.Mathlib.Data.Finset.Lattice._hyg.2521) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
-Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
by
@@ -442,12 +244,6 @@ theorem exists_nat_subset_range (s : Finset ℕ) : ∃ n : ℕ, s ⊆ range n :=
#align finset.exists_nat_subset_range Finset.exists_nat_subset_range
-/
-/- warning: finset.sup_induction -> Finset.sup_induction is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_induction Finset.sup_inductionₓ'. -/
theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.sup f) :=
by
@@ -459,12 +255,6 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
· exact ih fun b h => hs b (mem_cons.2 (Or.inr h))
#align finset.sup_induction Finset.sup_induction
-/- warning: finset.sup_le_of_le_directed -> Finset.sup_le_of_le_directed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2877 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2879 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2877 x._@.Mathlib.Data.Finset.Lattice._hyg.2879) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
-Case conversion may be inaccurate. Consider using '#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directedₓ'. -/
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
(∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by
@@ -486,12 +276,6 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
-/- warning: finset.sup_mem -> Finset.sup_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u2} α ι _inst_1 _inst_2 t p) s))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 t p) s))
-Case conversion may be inaccurate. Consider using '#align finset.sup_mem Finset.sup_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
@@ -500,12 +284,6 @@ theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y
@sup_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.sup_mem Finset.sup_mem
-/- warning: finset.sup_eq_bot_iff -> Finset.sup_eq_bot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iffₓ'. -/
@[simp]
protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
classical induction' S using Finset.induction with a S haS hi <;> simp [*]
@@ -513,54 +291,24 @@ protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥
end Sup
-/- warning: finset.sup_eq_supr -> Finset.sup_eq_iSup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (a : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iSup.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (a : α) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_eq_supr Finset.sup_eq_iSupₓ'. -/
theorem sup_eq_iSup [CompleteLattice β] (s : Finset α) (f : α → β) : s.sup f = ⨆ a ∈ s, f a :=
le_antisymm (Finset.sup_le fun a ha => le_iSup_of_le a <| le_iSup _ ha)
(iSup_le fun a => iSup_le fun ha => le_sup ha)
#align finset.sup_eq_supr Finset.sup_eq_iSup
-/- warning: finset.sup_id_eq_Sup -> Finset.sup_id_eq_sSup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.sSup.{u1} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.sSup.{u1} α (CompleteLattice.toSupSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
-Case conversion may be inaccurate. Consider using '#align finset.sup_id_eq_Sup Finset.sup_id_eq_sSupₓ'. -/
theorem sup_id_eq_sSup [CompleteLattice α] (s : Finset α) : s.sup id = sSup s := by
simp [sSup_eq_iSup, sup_eq_iSup]
#align finset.sup_id_eq_Sup Finset.sup_id_eq_sSup
-/- warning: finset.sup_id_set_eq_sUnion -> Finset.sup_id_set_eq_sUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.sup.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s (id.{succ u1} (Set.{u1} α))) (Set.sUnion.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) s))
-but is expected to have type
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.sup.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (SemilatticeSup.toPartialOrder.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s (id.{succ u1} (Set.{u1} α))) (Set.sUnion.{u1} α (Finset.toSet.{u1} (Set.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_sUnionₓ'. -/
theorem sup_id_set_eq_sUnion (s : Finset (Set α)) : s.sup id = ⋃₀ ↑s :=
sup_id_eq_sSup _
#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_sUnion
-/- warning: finset.sup_set_eq_bUnion -> Finset.sup_set_eq_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Finset.sup.{u2, u1} (Set.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Set.{u2} β) (CompleteLattice.toLattice.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u2} (Set.{u2} β) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u2} (Set.{u2} β) (Set.booleanAlgebra.{u2} β))) s f) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Finset.sup.{u1, u2} (Set.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} β) (Preorder.toLE.{u1} (Set.{u1} β) (PartialOrder.toPreorder.{u1} (Set.{u1} β) (SemilatticeSup.toPartialOrder.{u1} (Set.{u1} β) (Lattice.toSemilatticeSup.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β))))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) s f) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_set_eq_bUnion Finset.sup_set_eq_biUnionₓ'. -/
@[simp]
theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x ∈ s, f x :=
sup_eq_iSup _ _
#align finset.sup_set_eq_bUnion Finset.sup_set_eq_biUnion
-/- warning: finset.sup_eq_Sup_image -> Finset.sup_eq_sSup_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.sSup.{u2} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.sSup.{u2} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_imageₓ'. -/
theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
s.sup f = sSup (f '' s) := by
classical rw [← Finset.coe_image, ← sup_id_eq_Sup, sup_image, Function.comp.left_id]
@@ -574,12 +322,6 @@ section Inf
-- TODO: define with just `[has_top α]` where some lemmas hold without requiring `[order_top α]`
variable [SemilatticeInf α] [OrderTop α]
-/- warning: finset.inf -> Finset.inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
-Case conversion may be inaccurate. Consider using '#align finset.inf Finset.infₓ'. -/
/-- Infimum of a finite set: `inf {a, b, c} f = f a ⊓ f b ⊓ f c` -/
def inf (s : Finset β) (f : β → α) : α :=
s.fold (· ⊓ ·) ⊤ f
@@ -587,301 +329,133 @@ def inf (s : Finset β) (f : β → α) : α :=
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
-/- warning: finset.inf_def -> Finset.inf_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Multiset.inf.{u1} α _inst_1 _inst_2 (Multiset.map.{u2, u1} β α f (Finset.val.{u2} β s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f) (Multiset.inf.{u2} α _inst_1 _inst_2 (Multiset.map.{u1, u2} β α f (Finset.val.{u1} β s)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_def Finset.inf_defₓ'. -/
theorem inf_def : s.inf f = (s.1.map f).inf :=
rfl
#align finset.inf_def Finset.inf_def
-/- warning: finset.inf_empty -> Finset.inf_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β)) f) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {f : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β)) f) (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))
-Case conversion may be inaccurate. Consider using '#align finset.inf_empty Finset.inf_emptyₓ'. -/
@[simp]
theorem inf_empty : (∅ : Finset β).inf f = ⊤ :=
fold_empty
#align finset.inf_empty Finset.inf_empty
-/- warning: finset.inf_cons -> Finset.inf_cons is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_cons Finset.inf_consₓ'. -/
@[simp]
theorem inf_cons {b : β} (h : b ∉ s) : (cons b s h).inf f = f b ⊓ s.inf f :=
@sup_cons αᵒᵈ _ _ _ _ _ _ h
#align finset.inf_cons Finset.inf_cons
-/- warning: finset.inf_insert -> Finset.inf_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_insert Finset.inf_insertₓ'. -/
@[simp]
theorem inf_insert [DecidableEq β] {b : β} : (insert b s : Finset β).inf f = f b ⊓ s.inf f :=
fold_insert_idem
#align finset.inf_insert Finset.inf_insert
-/- warning: finset.inf_image -> Finset.inf_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.image.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 (Finset.image.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 s (Function.comp.{succ u2, succ u3, succ u1} γ β α g f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_image Finset.inf_imageₓ'. -/
theorem inf_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β → α) :
(s.image f).inf g = s.inf (g ∘ f) :=
fold_image_idem
#align finset.inf_image Finset.inf_image
-/- warning: finset.inf_map -> Finset.inf_map is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (coeFn.{max 1 (succ u3) (succ u2), max (succ u3) (succ u2)} (Function.Embedding.{succ u3, succ u2} γ β) (fun (_x : Function.Embedding.{succ u3, succ u2} γ β) => γ -> β) (Function.Embedding.hasCoeToFun.{succ u3, succ u2} γ β) f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ (fun (_x : γ) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : γ) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ β (Function.instEmbeddingLikeEmbedding.{succ u3, succ u2} γ β)) f)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_map Finset.inf_mapₓ'. -/
@[simp]
theorem inf_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).inf g = s.inf (g ∘ f) :=
fold_map
#align finset.inf_map Finset.inf_map
-/- warning: finset.inf_singleton -> Finset.inf_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b) f) (f b)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) b) f) (f b)
-Case conversion may be inaccurate. Consider using '#align finset.inf_singleton Finset.inf_singletonₓ'. -/
@[simp]
theorem inf_singleton {b : β} : ({b} : Finset β).inf f = f b :=
inf_singleton
#align finset.inf_singleton Finset.inf_singleton
-/- warning: finset.inf_union -> Finset.inf_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.instUnionFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_union Finset.inf_unionₓ'. -/
theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
@sup_union αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_union Finset.inf_union
-/- warning: finset.inf_inf -> Finset.inf_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Inf.inf.{max u2 u1} (β -> α) (Pi.hasInf.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toHasInf.{u1} α _inst_1)) f g)) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Inf.inf.{max u1 u2} (β -> α) (Pi.instInfForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toInf.{u2} α _inst_1)) f g)) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s g))
-Case conversion may be inaccurate. Consider using '#align finset.inf_inf Finset.inf_infₓ'. -/
theorem inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
#align finset.inf_inf Finset.inf_inf
-/- warning: finset.inf_congr -> Finset.inf_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ g))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ g))
-Case conversion may be inaccurate. Consider using '#align finset.inf_congr Finset.inf_congrₓ'. -/
theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.inf f = s₂.inf g :=
by subst hs <;> exact Finset.fold_congr hfg
#align finset.inf_congr Finset.inf_congr
-/- warning: map_finset_inf -> map_finset_inf is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} β] [_inst_4 : OrderTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : InfTopHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.inf.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
-but is expected to have type
- forall {F : Type.{u3}} {α : Type.{u2}} {β : Type.{u4}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u4} β] [_inst_4 : OrderTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3)))] [_inst_5 : InfTopHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} ι) (g : ι -> α), Eq.{succ u4} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 s g)) (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (InfTopHomClass.toInfHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u4, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u4} ι α β (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (InfTopHomClass.toInfHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f) g))
-Case conversion may be inaccurate. Consider using '#align map_finset_inf map_finset_infₓ'. -/
@[simp]
theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β] (f : F) (s : Finset ι)
(g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
Finset.cons_induction_on s (map_top f) fun i s _ h => by rw [inf_cons, inf_cons, map_inf, h]
#align map_finset_inf map_finset_inf
-/- warning: finset.inf_bUnion -> Finset.inf_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 (t x) f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 (t x) f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_bUnion Finset.inf_biUnionₓ'. -/
@[simp]
theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
(s.biUnion t).inf f = s.inf fun x => (t x).inf f :=
@sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
#align finset.inf_bUnion Finset.inf_biUnion
-/- warning: finset.inf_const -> Finset.inf_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
-Case conversion may be inaccurate. Consider using '#align finset.inf_const Finset.inf_constₓ'. -/
theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c :=
@sup_const αᵒᵈ _ _ _ _ h _
#align finset.inf_const Finset.inf_const
-/- warning: finset.inf_top -> Finset.inf_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
-Case conversion may be inaccurate. Consider using '#align finset.inf_top Finset.inf_topₓ'. -/
@[simp]
theorem inf_top (s : Finset β) : (s.inf fun _ => ⊤) = (⊤ : α) :=
@sup_bot αᵒᵈ _ _ _ _
#align finset.inf_top Finset.inf_top
-/- warning: finset.le_inf_iff -> Finset.le_inf_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (f b)))
-Case conversion may be inaccurate. Consider using '#align finset.le_inf_iff Finset.le_inf_iffₓ'. -/
protected theorem le_inf_iff {a : α} : a ≤ s.inf f ↔ ∀ b ∈ s, a ≤ f b :=
@Finset.sup_le_iff αᵒᵈ _ _ _ _ _ _
#align finset.le_inf_iff Finset.le_inf_iff
-/- warning: finset.le_inf -> Finset.le_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (f b))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.le_inf Finset.le_infₓ'. -/
alias Finset.le_inf_iff ↔ _ le_inf
#align finset.le_inf Finset.le_inf
attribute [protected] le_inf
-/- warning: finset.le_inf_const_le -> Finset.le_inf_const_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {a : α}, LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => a))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {a : α}, LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (fun (_x : β) => a))
-Case conversion may be inaccurate. Consider using '#align finset.le_inf_const_le Finset.le_inf_const_leₓ'. -/
theorem le_inf_const_le : a ≤ s.inf fun _ => a :=
Finset.le_inf fun _ _ => le_rfl
#align finset.le_inf_const_le Finset.le_inf_const_le
-/- warning: finset.inf_le -> Finset.inf_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (f b))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (f b))
-Case conversion may be inaccurate. Consider using '#align finset.inf_le Finset.inf_leₓ'. -/
theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
Finset.le_inf_iff.1 le_rfl _ hb
#align finset.inf_le Finset.inf_le
-/- warning: finset.inf_le_of_le -> Finset.inf_le_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) a)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) a)
-Case conversion may be inaccurate. Consider using '#align finset.inf_le_of_le Finset.inf_le_of_leₓ'. -/
theorem inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a :=
(inf_le hb).trans h
#align finset.inf_le_of_le Finset.inf_le_of_le
-/- warning: finset.inf_mono_fun -> Finset.inf_mono_fun is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
-Case conversion may be inaccurate. Consider using '#align finset.inf_mono_fun Finset.inf_mono_funₓ'. -/
theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
Finset.le_inf fun b hb => le_trans (inf_le hb) (h b hb)
#align finset.inf_mono_fun Finset.inf_mono_fun
-/- warning: finset.inf_mono -> Finset.inf_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_mono Finset.inf_monoₓ'. -/
theorem inf_mono (h : s₁ ⊆ s₂) : s₂.inf f ≤ s₁.inf f :=
Finset.le_inf fun b hb => inf_le <| h hb
#align finset.inf_mono Finset.inf_mono
-/- warning: finset.inf_attach -> Finset.inf_attach is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeBase.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeSubtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s))))) x))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) => f (Subtype.val.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) x))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
-Case conversion may be inaccurate. Consider using '#align finset.inf_attach Finset.inf_attachₓ'. -/
theorem inf_attach (s : Finset β) (f : β → α) : (s.attach.inf fun x => f x) = s.inf f :=
@sup_attach αᵒᵈ _ _ _ _ _
#align finset.inf_attach Finset.inf_attach
-/- warning: finset.inf_comm -> Finset.inf_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (f b))) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (f b))) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_comm Finset.inf_commₓ'. -/
protected theorem inf_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.inf fun b => t.inf (f b)) = t.inf fun c => s.inf fun b => f b c :=
@Finset.sup_comm αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_comm Finset.inf_comm
-/- warning: finset.inf_product_left -> Finset.inf_product_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u2, u3} β γ i i'))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u3, u2} β γ i i'))))
-Case conversion may be inaccurate. Consider using '#align finset.inf_product_left Finset.inf_product_leftₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem inf_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).inf f = s.inf fun i => t.inf fun i' => f ⟨i, i'⟩ :=
@sup_product_left αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_product_left Finset.inf_product_left
-/- warning: finset.inf_product_right -> Finset.inf_product_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u2, u3} β γ i i'))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u3, u2} β γ i i'))))
-Case conversion may be inaccurate. Consider using '#align finset.inf_product_right Finset.inf_product_rightₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem inf_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).inf f = t.inf fun i' => s.inf fun i => f ⟨i, i'⟩ :=
@sup_product_right αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_product_right Finset.inf_product_right
-/- warning: finset.inf_erase_top -> Finset.inf_erase_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.inf_erase_top Finset.inf_erase_topₓ'. -/
@[simp]
theorem inf_erase_top [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊤).inf id = s.inf id :=
@sup_erase_bot αᵒᵈ _ _ _ _
#align finset.inf_erase_top Finset.inf_erase_top
-/- warning: finset.comp_inf_eq_inf_comp -> Finset.comp_inf_eq_inf_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toHasTop.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-Case conversion may be inaccurate. Consider using '#align finset.comp_inf_eq_inf_comp Finset.comp_inf_eq_inf_compₓ'. -/
theorem comp_inf_eq_inf_comp [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) :=
@comp_sup_eq_sup_comp αᵒᵈ _ γᵒᵈ _ _ _ _ _ _ _ g_inf top
#align finset.comp_inf_eq_inf_comp Finset.comp_inf_eq_inf_comp
-/- warning: finset.inf_coe -> Finset.inf_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.inf.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u1} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u1} α (fun (x : α) => P x) (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.inf.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u2} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_coe Finset.inf_coeₓ'. -/
/-- Computing `inf` in a subtype (closed under `inf`) is the same as computing it in `α`. -/
theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x → P y → P (x ⊓ y)} (t : Finset β)
(f : β → { x : α // P x }) :
@@ -889,12 +463,6 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
@sup_coe αᵒᵈ _ _ _ _ Ptop Pinf t f
#align finset.inf_coe Finset.inf_coe
-/- warning: list.foldr_inf_eq_inf_to_finset -> List.foldr_inf_eq_inf_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5388 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5390 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5388 x._@.Mathlib.Data.Finset.Lattice._hyg.5390) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
-Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
by
@@ -903,35 +471,17 @@ theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
rfl
#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinset
-/- warning: finset.inf_induction -> Finset.inf_induction is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_induction Finset.inf_inductionₓ'. -/
theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊓ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.inf f) :=
@sup_induction αᵒᵈ _ _ _ _ _ _ ht hp hs
#align finset.inf_induction Finset.inf_induction
-/- warning: finset.inf_mem -> Finset.inf_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u2} α ι _inst_1 _inst_2 t p) s))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 t p) s))
-Case conversion may be inaccurate. Consider using '#align finset.inf_mem Finset.inf_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@inf_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.inf_mem Finset.inf_mem
-/- warning: finset.inf_eq_top_iff -> Finset.inf_eq_top_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align finset.inf_eq_top_iff Finset.inf_eq_top_iffₓ'. -/
@[simp]
protected theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
@Finset.sup_eq_bot_iff αᵒᵈ _ _ _ _ _
@@ -939,48 +489,24 @@ protected theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤
end Inf
-/- warning: finset.to_dual_sup -> Finset.toDual_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.to_dual_sup Finset.toDual_supₓ'. -/
@[simp]
theorem toDual_sup [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → α) :
toDual (s.sup f) = s.inf (toDual ∘ f) :=
rfl
#align finset.to_dual_sup Finset.toDual_sup
-/- warning: finset.to_dual_inf -> Finset.toDual_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.to_dual_inf Finset.toDual_infₓ'. -/
@[simp]
theorem toDual_inf [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → α) :
toDual (s.inf f) = s.sup (toDual ∘ f) :=
rfl
#align finset.to_dual_inf Finset.toDual_inf
-/- warning: finset.of_dual_sup -> Finset.ofDual_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.of_dual_sup Finset.ofDual_supₓ'. -/
@[simp]
theorem ofDual_sup [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → αᵒᵈ) :
ofDual (s.sup f) = s.inf (ofDual ∘ f) :=
rfl
#align finset.of_dual_sup Finset.ofDual_sup
-/- warning: finset.of_dual_inf -> Finset.ofDual_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.of_dual_inf Finset.ofDual_infₓ'. -/
@[simp]
theorem ofDual_inf [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → αᵒᵈ) :
ofDual (s.inf f) = s.sup (ofDual ∘ f) :=
@@ -995,12 +521,6 @@ section OrderBot
variable [OrderBot α] {s : Finset ι} {t : Finset κ} {f : ι → α} {g : κ → α} {a : α}
-/- warning: finset.sup_inf_distrib_left -> Finset.sup_inf_distrib_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) a (f i)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_inf_distrib_left Finset.sup_inf_distrib_leftₓ'. -/
theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊓ s.sup f = s.sup fun i => a ⊓ f i :=
by
@@ -1009,43 +529,19 @@ theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
· rw [sup_cons, sup_cons, inf_sup_left, h]
#align finset.sup_inf_distrib_left Finset.sup_inf_distrib_left
-/- warning: finset.sup_inf_distrib_right -> Finset.sup_inf_distrib_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (f i) a))
-Case conversion may be inaccurate. Consider using '#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_rightₓ'. -/
theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
s.sup f ⊓ a = s.sup fun i => f i ⊓ a := by rw [_root_.inf_comm, s.sup_inf_distrib_left];
simp_rw [_root_.inf_comm]
#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_right
-/- warning: finset.disjoint_sup_right -> Finset.disjoint_sup_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
-Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_right Finset.disjoint_sup_rightₓ'. -/
protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → Disjoint a (f i) := by
simp only [disjoint_iff, sup_inf_distrib_left, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
-/- warning: finset.disjoint_sup_left -> Finset.disjoint_sup_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
-Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_left Finset.disjoint_sup_leftₓ'. -/
protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → Disjoint (f i) a := by
simp only [disjoint_iff, sup_inf_distrib_right, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
-/- warning: finset.sup_inf_sup -> Finset.sup_inf_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.sup.{u1, u3} α κ (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {κ : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u3} ι) (t : Finset.{u2} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Finset.sup.{u1, u3} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.sup.{u1, u2} α κ (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.sup.{u1, max u3 u2} α (Prod.{u3, u2} ι κ) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u3, u2} ι κ s t) (fun (i : Prod.{u3, u2} ι κ) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (f (Prod.fst.{u3, u2} ι κ i)) (g (Prod.snd.{u3, u2} ι κ i))))
-Case conversion may be inaccurate. Consider using '#align finset.sup_inf_sup Finset.sup_inf_supₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
s.sup f ⊓ t.sup g = (s ×ˢ t).sup fun i => f i.1 ⊓ g i.2 := by
@@ -1058,56 +554,26 @@ section OrderTop
variable [OrderTop α] {f : ι → α} {g : κ → α} {s : Finset ι} {t : Finset κ} {a : α}
-/- warning: finset.inf_sup_distrib_left -> Finset.inf_sup_distrib_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_sup_distrib_left Finset.inf_sup_distrib_leftₓ'. -/
theorem inf_sup_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊔ s.inf f = s.inf fun i => a ⊔ f i :=
@sup_inf_distrib_left αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_left Finset.inf_sup_distrib_left
-/- warning: finset.inf_sup_distrib_right -> Finset.inf_sup_distrib_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
-Case conversion may be inaccurate. Consider using '#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_rightₓ'. -/
theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
s.inf f ⊔ a = s.inf fun i => f i ⊔ a :=
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
-/- warning: finset.codisjoint_inf_right -> Finset.codisjoint_inf_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {f : ι -> α} {s : Finset.{u1} ι} {a : α}, Iff (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
-Case conversion may be inaccurate. Consider using '#align finset.codisjoint_inf_right Finset.codisjoint_inf_rightₓ'. -/
protected theorem codisjoint_inf_right :
Codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint a (f i) :=
@Finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
#align finset.codisjoint_inf_right Finset.codisjoint_inf_right
-/- warning: finset.codisjoint_inf_left -> Finset.codisjoint_inf_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {f : ι -> α} {s : Finset.{u1} ι} {a : α}, Iff (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
-Case conversion may be inaccurate. Consider using '#align finset.codisjoint_inf_left Finset.codisjoint_inf_leftₓ'. -/
protected theorem codisjoint_inf_left :
Codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint (f i) a :=
@Finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
-/- warning: finset.inf_sup_inf -> Finset.inf_sup_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.inf.{u1, u3} α κ (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {κ : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u3} ι) (t : Finset.{u2} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u3} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.inf.{u1, u2} α κ (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.inf.{u1, max u3 u2} α (Prod.{u3, u2} ι κ) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u3, u2} ι κ s t) (fun (i : Prod.{u3, u2} ι κ) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u3, u2} ι κ i)) (g (Prod.snd.{u3, u2} ι κ i))))
-Case conversion may be inaccurate. Consider using '#align finset.inf_sup_inf Finset.inf_sup_infₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
s.inf f ⊔ t.inf g = (s ×ˢ t).inf fun i => f i.1 ⊔ g i.2 :=
@@ -1120,9 +586,6 @@ section BoundedOrder
variable [BoundedOrder α] [DecidableEq ι]
-/- warning: finset.inf_sup -> Finset.inf_sup is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align finset.inf_sup Finset.inf_supₓ'. -/
--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.inf fun i => (t i).sup (f i)) =
@@ -1153,12 +616,6 @@ theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i))
· simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
#align finset.inf_sup Finset.inf_sup
-/- warning: finset.sup_inf -> Finset.sup_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.inf.{u1, u3} α (κ i) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.inf.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.sup.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.inf.{u1, u3} α (κ i) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.inf.{u1, max u2 u3} α (forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u3, u2} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) => Finset.sup.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i)))))
-Case conversion may be inaccurate. Consider using '#align finset.sup_inf Finset.sup_infₓ'. -/
theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
@inf_sup αᵒᵈ _ _ _ _ _ _ _ _
@@ -1172,12 +629,6 @@ section BooleanAlgebra
variable [BooleanAlgebra α] {s : Finset ι}
-/- warning: finset.sup_sdiff_left -> Finset.sup_sdiff_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_sdiff_left Finset.sup_sdiff_leftₓ'. -/
theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
(s.sup fun b => a \ f b) = a \ s.inf f :=
by
@@ -1186,12 +637,6 @@ theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
· rw [sup_cons, inf_cons, h, sdiff_inf]
#align finset.sup_sdiff_left Finset.sup_sdiff_left
-/- warning: finset.inf_sdiff_left -> Finset.inf_sdiff_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s f)))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_left Finset.inf_sdiff_leftₓ'. -/
theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.inf fun b => a \ f b) = a \ s.sup f :=
by
@@ -1200,12 +645,6 @@ theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [sup_cons, inf_cons, h, sdiff_sup]
#align finset.inf_sdiff_left Finset.inf_sdiff_left
-/- warning: finset.inf_sdiff_right -> Finset.inf_sdiff_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) (f b) a)) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f) a))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) (f b) a)) (SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f) a))
-Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_right Finset.inf_sdiff_rightₓ'. -/
theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.inf fun b => f b \ a) = s.inf f \ a :=
by
@@ -1214,34 +653,16 @@ theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [inf_cons, inf_cons, h, inf_sdiff]
#align finset.inf_sdiff_right Finset.inf_sdiff_right
-/- warning: finset.inf_himp_right -> Finset.inf_himp_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s f) a)
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f) a)
-Case conversion may be inaccurate. Consider using '#align finset.inf_himp_right Finset.inf_himp_rightₓ'. -/
theorem inf_himp_right (s : Finset ι) (f : ι → α) (a : α) :
(s.inf fun b => f b ⇨ a) = s.sup f ⇨ a :=
@sup_sdiff_left αᵒᵈ _ _ _ _ _
#align finset.inf_himp_right Finset.inf_himp_right
-/- warning: finset.sup_himp_right -> Finset.sup_himp_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f) a))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f) a))
-Case conversion may be inaccurate. Consider using '#align finset.sup_himp_right Finset.sup_himp_rightₓ'. -/
theorem sup_himp_right (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.sup fun b => f b ⇨ a) = s.inf f ⇨ a :=
@inf_sdiff_left αᵒᵈ _ _ _ hs _ _
#align finset.sup_himp_right Finset.sup_himp_right
-/- warning: finset.sup_himp_left -> Finset.sup_himp_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) a (f b))) (HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s f)))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) a (f b))) (HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_himp_left Finset.sup_himp_leftₓ'. -/
theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.sup fun b => a ⇨ f b) = a ⇨ s.sup f :=
@inf_sdiff_right αᵒᵈ _ _ _ hs _ _
@@ -1271,23 +692,11 @@ section OrderBot
variable [OrderBot α] {s : Finset ι} {f : ι → α} {a : α}
-/- warning: finset.comp_sup_eq_sup_comp_of_is_total -> Finset.comp_sup_eq_sup_comp_of_is_total is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u3} ι} {f : ι -> α} [_inst_3 : SemilatticeSup.{u2} β] [_inst_4 : OrderBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3)))] (g : α -> β), (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3)) g) -> (Eq.{succ u2} β (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) (Bot.bot.{u2} β (OrderBot.toHasBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3))) _inst_4))) -> (Eq.{succ u2} β (g (Finset.sup.{u1, u3} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u2, u3} β ι _inst_3 _inst_4 s (Function.comp.{succ u3, succ u1, succ u2} ι α β g f)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] (g : α -> β), (Monotone.{u2, u3} α β (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))) (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)) g) -> (Eq.{succ u3} β (g (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) (Bot.bot.{u3} β (OrderBot.toBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4))) -> (Eq.{succ u3} β (g (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Finset.sup.{u3, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u3} ι α β g f)))
-Case conversion may be inaccurate. Consider using '#align finset.comp_sup_eq_sup_comp_of_is_total Finset.comp_sup_eq_sup_comp_of_is_totalₓ'. -/
theorem comp_sup_eq_sup_comp_of_is_total [SemilatticeSup β] [OrderBot β] (g : α → β)
(mono_g : Monotone g) (bot : g ⊥ = ⊥) : g (s.sup f) = s.sup (g ∘ f) :=
comp_sup_eq_sup_comp g mono_g.map_sup bot
#align finset.comp_sup_eq_sup_comp_of_is_total Finset.comp_sup_eq_sup_comp_of_is_total
-/- warning: finset.le_sup_iff -> Finset.le_sup_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2)) a) -> (Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2)) a) -> (Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b)))))
-Case conversion may be inaccurate. Consider using '#align finset.le_sup_iff Finset.le_sup_iffₓ'. -/
@[simp]
protected theorem le_sup_iff (ha : ⊥ < a) : a ≤ s.sup f ↔ ∃ b ∈ s, a ≤ f b :=
⟨Finset.cons_induction_on s (fun h => absurd h (not_le_of_lt ha)) fun c t hc ih => by
@@ -1298,12 +707,6 @@ protected theorem le_sup_iff (ha : ⊥ < a) : a ≤ s.sup f ↔ ∃ b ∈ s, a
fun ⟨b, hb, hle⟩ => trans hle (le_sup hb)⟩
#align finset.le_sup_iff Finset.le_sup_iff
-/- warning: finset.lt_sup_iff -> Finset.lt_sup_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
-Case conversion may be inaccurate. Consider using '#align finset.lt_sup_iff Finset.lt_sup_iffₓ'. -/
@[simp]
protected theorem lt_sup_iff : a < s.sup f ↔ ∃ b ∈ s, a < f b :=
⟨Finset.cons_induction_on s (fun h => absurd h not_lt_bot) fun c t hc ih => by
@@ -1314,12 +717,6 @@ protected theorem lt_sup_iff : a < s.sup f ↔ ∃ b ∈ s, a < f b :=
fun ⟨b, hb, hlt⟩ => lt_of_lt_of_le hlt (le_sup hb)⟩
#align finset.lt_sup_iff Finset.lt_sup_iff
-/- warning: finset.sup_lt_iff -> Finset.sup_lt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2)) a) -> (Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall (b : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2)) a) -> (Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) a) (forall (b : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f b) a)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_lt_iff Finset.sup_lt_iffₓ'. -/
@[simp]
protected theorem sup_lt_iff (ha : ⊥ < a) : s.sup f < a ↔ ∀ b ∈ s, f b < a :=
⟨fun hs b hb => lt_of_le_of_lt (le_sup hb) hs,
@@ -1333,45 +730,21 @@ section OrderTop
variable [OrderTop α] {s : Finset ι} {f : ι → α} {a : α}
-/- warning: finset.comp_inf_eq_inf_comp_of_is_total -> Finset.comp_inf_eq_inf_comp_of_is_total is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u3} ι} {f : ι -> α} [_inst_3 : SemilatticeInf.{u2} β] [_inst_4 : OrderTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3)))] (g : α -> β), (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3)) g) -> (Eq.{succ u2} β (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) (Top.top.{u2} β (OrderTop.toHasTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3))) _inst_4))) -> (Eq.{succ u2} β (g (Finset.inf.{u1, u3} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u2, u3} β ι _inst_3 _inst_4 s (Function.comp.{succ u3, succ u1, succ u2} ι α β g f)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} [_inst_3 : SemilatticeInf.{u3} β] [_inst_4 : OrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)))] (g : α -> β), (Monotone.{u2, u3} α β (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))) (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)) g) -> (Eq.{succ u3} β (g (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) (Top.top.{u3} β (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4))) -> (Eq.{succ u3} β (g (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Finset.inf.{u3, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u3} ι α β g f)))
-Case conversion may be inaccurate. Consider using '#align finset.comp_inf_eq_inf_comp_of_is_total Finset.comp_inf_eq_inf_comp_of_is_totalₓ'. -/
theorem comp_inf_eq_inf_comp_of_is_total [SemilatticeInf β] [OrderTop β] (g : α → β)
(mono_g : Monotone g) (top : g ⊤ = ⊤) : g (s.inf f) = s.inf (g ∘ f) :=
comp_inf_eq_inf_comp g mono_g.map_inf top
#align finset.comp_inf_eq_inf_comp_of_is_total Finset.comp_inf_eq_inf_comp_of_is_total
-/- warning: finset.inf_le_iff -> Finset.inf_le_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) -> (Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) a) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f b) a))))
-Case conversion may be inaccurate. Consider using '#align finset.inf_le_iff Finset.inf_le_iffₓ'. -/
@[simp]
protected theorem inf_le_iff (ha : a < ⊤) : s.inf f ≤ a ↔ ∃ b ∈ s, f b ≤ a :=
@Finset.le_sup_iff αᵒᵈ _ _ _ _ _ _ ha
#align finset.inf_le_iff Finset.inf_le_iff
-/- warning: finset.inf_lt_iff -> Finset.inf_lt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) a) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f b) a)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_lt_iff Finset.inf_lt_iffₓ'. -/
@[simp]
protected theorem inf_lt_iff : s.inf f < a ↔ ∃ b ∈ s, f b < a :=
@Finset.lt_sup_iff αᵒᵈ _ _ _ _ _ _
#align finset.inf_lt_iff Finset.inf_lt_iff
-/- warning: finset.lt_inf_iff -> Finset.lt_inf_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall (b : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) -> (Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (forall (b : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
-Case conversion may be inaccurate. Consider using '#align finset.lt_inf_iff Finset.lt_inf_iffₓ'. -/
@[simp]
protected theorem lt_inf_iff (ha : a < ⊤) : a < s.inf f ↔ ∀ b ∈ s, a < f b :=
@Finset.sup_lt_iff αᵒᵈ _ _ _ _ _ _ ha
@@ -1381,53 +754,23 @@ end OrderTop
end LinearOrder
-/- warning: finset.inf_eq_infi -> Finset.inf_eq_iInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (a : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iInf.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (a : α) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_eq_infi Finset.inf_eq_iInfₓ'. -/
theorem inf_eq_iInf [CompleteLattice β] (s : Finset α) (f : α → β) : s.inf f = ⨅ a ∈ s, f a :=
@sup_eq_iSup _ βᵒᵈ _ _ _
#align finset.inf_eq_infi Finset.inf_eq_iInf
-/- warning: finset.inf_id_eq_Inf -> Finset.inf_id_eq_sInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.sInf.{u1} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.sInf.{u1} α (CompleteLattice.toInfSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
-Case conversion may be inaccurate. Consider using '#align finset.inf_id_eq_Inf Finset.inf_id_eq_sInfₓ'. -/
theorem inf_id_eq_sInf [CompleteLattice α] (s : Finset α) : s.inf id = sInf s :=
@sup_id_eq_sSup αᵒᵈ _ _
#align finset.inf_id_eq_Inf Finset.inf_id_eq_sInf
-/- warning: finset.inf_id_set_eq_sInter -> Finset.inf_id_set_eq_sInter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.inf.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (Set.orderTop.{u1} α) s (id.{succ u1} (Set.{u1} α))) (Set.sInter.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) s))
-but is expected to have type
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.inf.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Set.instOrderTopSetInstLESet.{u1} α) s (id.{succ u1} (Set.{u1} α))) (Set.sInter.{u1} α (Finset.toSet.{u1} (Set.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_sInterₓ'. -/
theorem inf_id_set_eq_sInter (s : Finset (Set α)) : s.inf id = ⋂₀ ↑s :=
inf_id_eq_sInf _
#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_sInter
-/- warning: finset.inf_set_eq_bInter -> Finset.inf_set_eq_iInter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Finset.inf.{u2, u1} (Set.{u2} β) α (Lattice.toSemilatticeInf.{u2} (Set.{u2} β) (CompleteLattice.toLattice.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (Set.orderTop.{u2} β) s f) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Finset.inf.{u1, u2} (Set.{u1} β) α (Lattice.toSemilatticeInf.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (Set.instOrderTopSetInstLESet.{u1} β) s f) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_set_eq_bInter Finset.inf_set_eq_iInterₓ'. -/
@[simp]
theorem inf_set_eq_iInter (s : Finset α) (f : α → Set β) : s.inf f = ⋂ x ∈ s, f x :=
inf_eq_iInf _ _
#align finset.inf_set_eq_bInter Finset.inf_set_eq_iInter
-/- warning: finset.inf_eq_Inf_image -> Finset.inf_eq_sInf_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.sInf.{u2} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.sInf.{u2} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_eq_Inf_image Finset.inf_eq_sInf_imageₓ'. -/
theorem inf_eq_sInf_image [CompleteLattice β] (s : Finset α) (f : α → β) :
s.inf f = sInf (f '' s) :=
@sup_eq_sSup_image _ βᵒᵈ _ _ _
@@ -1455,35 +798,17 @@ def sup' (s : Finset β) (H : s.Nonempty) (f : β → α) : α :=
variable {s : Finset β} (H : s.Nonempty) (f : β → α)
-/- warning: finset.coe_sup' -> Finset.coe_sup' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) (Finset.sup'.{u1, u2} α β _inst_1 s H f)) (Finset.sup.{u1, u2} (WithBot.{u1} α) β (WithBot.semilatticeSup.{u1} α _inst_1) (WithBot.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α), Eq.{succ u2} (WithBot.{u2} α) (WithBot.some.{u2} α (Finset.sup'.{u2, u1} α β _inst_1 s H f)) (Finset.sup.{u2, u1} (WithBot.{u2} α) β (WithBot.semilatticeSup.{u2} α _inst_1) (WithBot.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))) s (Function.comp.{succ u1, succ u2, succ u2} β α (WithBot.{u2} α) (WithBot.some.{u2} α) f))
-Case conversion may be inaccurate. Consider using '#align finset.coe_sup' Finset.coe_sup'ₓ'. -/
@[simp]
theorem coe_sup' : ((s.sup' H f : α) : WithBot α) = s.sup (coe ∘ f) := by
rw [sup', WithBot.coe_unbot]
#align finset.coe_sup' Finset.coe_sup'
-/- warning: finset.sup'_cons -> Finset.sup'_cons is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_cons Finset.sup'_consₓ'. -/
@[simp]
theorem sup'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
(cons b s hb).sup' h f = f b ⊔ s.sup' H f := by rw [← WithBot.coe_eq_coe];
simp only [coe_sup', sup_cons, WithBot.coe_sup]
#align finset.sup'_cons Finset.sup'_cons
-/- warning: finset.sup'_insert -> Finset.sup'_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_insert Finset.sup'_insertₓ'. -/
@[simp]
theorem sup'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
(insert b s).sup' h f = f b ⊔ s.sup' H f := by rw [← WithBot.coe_eq_coe];
@@ -1497,44 +822,20 @@ theorem sup'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset
#align finset.sup'_singleton Finset.sup'_singleton
-/
-/- warning: finset.sup'_le -> Finset.sup'_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup'.{u1, u2} α β _inst_1 s H f) a)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup'.{u1, u2} α β _inst_1 s H f) a)
-Case conversion may be inaccurate. Consider using '#align finset.sup'_le Finset.sup'_leₓ'. -/
theorem sup'_le {a : α} (hs : ∀ b ∈ s, f b ≤ a) : s.sup' H f ≤ a :=
by
rw [← WithBot.coe_le_coe, coe_sup']
exact Finset.sup_le fun b h => WithBot.coe_le_coe.2 <| hs b h
#align finset.sup'_le Finset.sup'_le
-/- warning: finset.le_sup' -> Finset.le_sup' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b h) f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) b h) f)
-Case conversion may be inaccurate. Consider using '#align finset.le_sup' Finset.le_sup'ₓ'. -/
theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f := by
rw [← WithBot.coe_le_coe, coe_sup']; exact le_sup h
#align finset.le_sup' Finset.le_sup'
-/- warning: finset.le_sup'_of_le -> Finset.le_sup'_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b hb) f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s), (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) b hb) f))
-Case conversion may be inaccurate. Consider using '#align finset.le_sup'_of_le Finset.le_sup'_of_leₓ'. -/
theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
h.trans <| le_sup' _ hb
#align finset.le_sup'_of_le Finset.le_sup'_of_le
-/- warning: finset.sup'_const -> Finset.sup'_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (a : α), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 s H (fun (b : β) => a)) a
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (a : α), Eq.{succ u2} α (Finset.sup'.{u2, u1} α β _inst_1 s H (fun (b : β) => a)) a
-Case conversion may be inaccurate. Consider using '#align finset.sup'_const Finset.sup'_constₓ'. -/
@[simp]
theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
by
@@ -1543,35 +844,17 @@ theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
· apply le_sup' (fun b => a) H.some_spec
#align finset.sup'_const Finset.sup'_const
-/- warning: finset.sup'_le_iff -> Finset.sup'_le_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup'.{u1, u2} α β _inst_1 s H f) a) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup'.{u2, u1} α β _inst_1 s H f) a) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (f b) a))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_le_iff Finset.sup'_le_iffₓ'. -/
@[simp]
theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
Iff.intro (fun h b hb => trans (le_sup' f hb) h) (sup'_le H f)
#align finset.sup'_le_iff Finset.sup'_le_iff
-/- warning: finset.sup'_bUnion -> Finset.sup'_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {s : Finset.{u3} γ} (Hs : Finset.Nonempty.{u3} γ s) {t : γ -> (Finset.{u2} β)} (Ht : forall (b : γ), Finset.Nonempty.{u2} β (t b)), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) b s) => Ht b)) f) (Finset.sup'.{u1, u3} α γ _inst_1 s Hs (fun (b : γ) => Finset.sup'.{u1, u2} α β _inst_1 (t b) (Ht b) f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u3} β] {s : Finset.{u2} γ} (Hs : Finset.Nonempty.{u2} γ s) {t : γ -> (Finset.{u3} β)} (Ht : forall (b : γ), Finset.Nonempty.{u3} β (t b)), Eq.{succ u1} α (Finset.sup'.{u1, u3} α β _inst_1 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) b s) => Ht b)) f) (Finset.sup'.{u1, u2} α γ _inst_1 s Hs (fun (b : γ) => Finset.sup'.{u1, u3} α β _inst_1 (t b) (Ht b) f))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_bUnion Finset.sup'_biUnionₓ'. -/
theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
(s.biUnion t).sup' (Hs.biUnion fun b _ => Ht b) f = s.sup' Hs fun b => (t b).sup' (Ht b) f :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup'_bUnion Finset.sup'_biUnion
-/- warning: finset.comp_sup'_eq_sup'_comp -> Finset.comp_sup'_eq_sup'_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : SemilatticeSup.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.sup'.{u1, u2} α β _inst_1 s H f)) (Finset.sup'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : SemilatticeSup.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toSup.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.sup'.{u1, u2} α β _inst_1 s H f)) (Finset.sup'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-Case conversion may be inaccurate. Consider using '#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_compₓ'. -/
theorem comp_sup'_eq_sup'_comp [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) :=
by
@@ -1588,12 +871,6 @@ theorem comp_sup'_eq_sup'_comp [SemilatticeSup γ] {s : Finset β} (H : s.Nonemp
· exact congr_arg coe (g_sup f₁ f₂)
#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_comp
-/- warning: finset.sup'_induction -> Finset.sup'_induction is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup'.{u1, u2} α β _inst_1 s H f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.sup'.{u2, u1} α β _inst_1 s H f))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_induction Finset.sup'_inductionₓ'. -/
theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.sup' H f) :=
by
@@ -1606,12 +883,6 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
exacts[h₁, hp a₁ h₁ a₂ h₂]
#align finset.sup'_induction Finset.sup'_induction
-/- warning: finset.sup'_mem -> Finset.sup'_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] (s : Set.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι t) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup'.{u1, u2} α ι _inst_1 t H p) s))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 t H p) s))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_mem Finset.sup'_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
@@ -1660,35 +931,17 @@ def inf' (s : Finset β) (H : s.Nonempty) (f : β → α) : α :=
variable {s : Finset β} (H : s.Nonempty) (f : β → α) {a : α} {b : β}
-/- warning: finset.coe_inf' -> Finset.coe_inf' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (Finset.inf.{u1, u2} (WithTop.{u1} α) β (WithTop.semilatticeInf.{u1} α _inst_1) (WithTop.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α)))) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α), Eq.{succ u2} (WithTop.{u2} α) (WithTop.some.{u2} α (Finset.inf'.{u2, u1} α β _inst_1 s H f)) (Finset.inf.{u2, u1} (WithTop.{u2} α) β (WithTop.semilatticeInf.{u2} α _inst_1) (WithTop.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))) s (Function.comp.{succ u1, succ u2, succ u2} β α (WithTop.{u2} α) (WithTop.some.{u2} α) f))
-Case conversion may be inaccurate. Consider using '#align finset.coe_inf' Finset.coe_inf'ₓ'. -/
@[simp]
theorem coe_inf' : ((s.inf' H f : α) : WithTop α) = s.inf (coe ∘ f) :=
@coe_sup' αᵒᵈ _ _ _ H f
#align finset.coe_inf' Finset.coe_inf'
-/- warning: finset.inf'_cons -> Finset.inf'_cons is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_cons Finset.inf'_consₓ'. -/
@[simp]
theorem inf'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
(cons b s hb).inf' h f = f b ⊓ s.inf' H f :=
@sup'_cons αᵒᵈ _ _ _ H f _ _ h
#align finset.inf'_cons Finset.inf'_cons
-/- warning: finset.inf'_insert -> Finset.inf'_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_insert Finset.inf'_insertₓ'. -/
@[simp]
theorem inf'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
(insert b s).inf' h f = f b ⊓ s.inf' H f :=
@@ -1702,98 +955,44 @@ theorem inf'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset
#align finset.inf'_singleton Finset.inf'_singleton
-/
-/- warning: finset.le_inf' -> Finset.le_inf' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf'.{u1, u2} α β _inst_1 s H f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf'.{u1, u2} α β _inst_1 s H f))
-Case conversion may be inaccurate. Consider using '#align finset.le_inf' Finset.le_inf'ₓ'. -/
theorem le_inf' (hs : ∀ b ∈ s, a ≤ f b) : a ≤ s.inf' H f :=
@sup'_le αᵒᵈ _ _ _ H f _ hs
#align finset.le_inf' Finset.le_inf'
-/- warning: finset.inf'_le -> Finset.inf'_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b h) f) (f b)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) b h) f) (f b)
-Case conversion may be inaccurate. Consider using '#align finset.inf'_le Finset.inf'_leₓ'. -/
theorem inf'_le (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
@le_sup' αᵒᵈ _ _ _ f _ h
#align finset.inf'_le Finset.inf'_le
-/- warning: finset.inf'_le_of_le -> Finset.inf'_le_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b hb) f) a)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : β} {b : α} (hb : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) a s), (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f a) b) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) a hb) f) b)
-Case conversion may be inaccurate. Consider using '#align finset.inf'_le_of_le Finset.inf'_le_of_leₓ'. -/
theorem inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a :=
(inf'_le _ hb).trans h
#align finset.inf'_le_of_le Finset.inf'_le_of_le
-/- warning: finset.inf'_const -> Finset.inf'_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (a : α), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 s H (fun (b : β) => a)) a
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (a : α), Eq.{succ u2} α (Finset.inf'.{u2, u1} α β _inst_1 s H (fun (b : β) => a)) a
-Case conversion may be inaccurate. Consider using '#align finset.inf'_const Finset.inf'_constₓ'. -/
@[simp]
theorem inf'_const (a : α) : (s.inf' H fun b => a) = a :=
@sup'_const αᵒᵈ _ _ _ H _
#align finset.inf'_const Finset.inf'_const
-/- warning: finset.le_inf'_iff -> Finset.le_inf'_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf'.{u2, u1} α β _inst_1 s H f)) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (f b)))
-Case conversion may be inaccurate. Consider using '#align finset.le_inf'_iff Finset.le_inf'_iffₓ'. -/
@[simp]
theorem le_inf'_iff : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
@sup'_le_iff αᵒᵈ _ _ _ H f _
#align finset.le_inf'_iff Finset.le_inf'_iff
-/- warning: finset.inf'_bUnion -> Finset.inf'_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {s : Finset.{u3} γ} (Hs : Finset.Nonempty.{u3} γ s) {t : γ -> (Finset.{u2} β)} (Ht : forall (b : γ), Finset.Nonempty.{u2} β (t b)), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) b s) => Ht b)) f) (Finset.inf'.{u1, u3} α γ _inst_1 s Hs (fun (b : γ) => Finset.inf'.{u1, u2} α β _inst_1 (t b) (Ht b) f))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u3} β] {s : Finset.{u2} γ} (Hs : Finset.Nonempty.{u2} γ s) {t : γ -> (Finset.{u3} β)} (Ht : forall (b : γ), Finset.Nonempty.{u3} β (t b)), Eq.{succ u1} α (Finset.inf'.{u1, u3} α β _inst_1 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) b s) => Ht b)) f) (Finset.inf'.{u1, u2} α γ _inst_1 s Hs (fun (b : γ) => Finset.inf'.{u1, u3} α β _inst_1 (t b) (Ht b) f))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_bUnion Finset.inf'_biUnionₓ'. -/
theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
(s.biUnion t).inf' (Hs.biUnion fun b _ => Ht b) f = s.inf' Hs fun b => (t b).inf' (Ht b) f :=
@sup'_biUnion αᵒᵈ _ _ _ _ _ _ Hs _ Ht
#align finset.inf'_bUnion Finset.inf'_biUnion
-/- warning: finset.comp_inf'_eq_inf'_comp -> Finset.comp_inf'_eq_inf'_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : SemilatticeInf.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (Finset.inf'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : SemilatticeInf.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toInf.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (Finset.inf'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
-Case conversion may be inaccurate. Consider using '#align finset.comp_inf'_eq_inf'_comp Finset.comp_inf'_eq_inf'_compₓ'. -/
theorem comp_inf'_eq_inf'_comp [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) :=
@comp_sup'_eq_sup'_comp αᵒᵈ _ γᵒᵈ _ _ _ H f g g_inf
#align finset.comp_inf'_eq_inf'_comp Finset.comp_inf'_eq_inf'_comp
-/- warning: finset.inf'_induction -> Finset.inf'_induction is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf'.{u1, u2} α β _inst_1 s H f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.inf'.{u2, u1} α β _inst_1 s H f))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_induction Finset.inf'_inductionₓ'. -/
theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊓ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.inf' H f) :=
@sup'_induction αᵒᵈ _ _ _ H f _ hp hs
#align finset.inf'_induction Finset.inf'_induction
-/- warning: finset.inf'_mem -> Finset.inf'_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] (s : Set.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι t) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf'.{u1, u2} α ι _inst_1 t H p) s))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 t H p) s))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_mem Finset.inf'_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
@@ -1822,34 +1021,16 @@ section Sup
variable [SemilatticeSup α] [OrderBot α]
-/- warning: finset.sup'_eq_sup -> Finset.sup'_eq_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 s H f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 s H f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
-Case conversion may be inaccurate. Consider using '#align finset.sup'_eq_sup Finset.sup'_eq_supₓ'. -/
theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H f = s.sup f :=
le_antisymm (sup'_le H f fun b => le_sup) (Finset.sup_le fun b => le_sup' f)
#align finset.sup'_eq_sup Finset.sup'_eq_sup
-/- warning: finset.sup_closed_of_sup_closed -> Finset.sup_closed_of_sup_closed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
-Case conversion may be inaccurate. Consider using '#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closedₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closed
-/- warning: finset.coe_sup_of_nonempty -> Finset.coe_sup_of_nonempty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (WithBot.{u1} α) β (WithBot.semilatticeSup.{u1} α _inst_1) (WithBot.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithBot.{u1} α) (WithBot.some.{u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (WithBot.{u1} α) β (WithBot.semilatticeSup.{u1} α _inst_1) (WithBot.orderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithBot.{u1} α) (WithBot.some.{u1} α) f)))
-Case conversion may be inaccurate. Consider using '#align finset.coe_sup_of_nonempty Finset.coe_sup_of_nonemptyₓ'. -/
theorem coe_sup_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.sup f) : WithBot α) = s.sup (coe ∘ f) := by simp only [← sup'_eq_sup h, coe_sup' h]
#align finset.coe_sup_of_nonempty Finset.coe_sup_of_nonempty
@@ -1860,34 +1041,16 @@ section Inf
variable [SemilatticeInf α] [OrderTop α]
-/- warning: finset.inf'_eq_inf -> Finset.inf'_eq_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 s H f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 s H f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
-Case conversion may be inaccurate. Consider using '#align finset.inf'_eq_inf Finset.inf'_eq_infₓ'. -/
theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H f = s.inf f :=
@sup'_eq_sup αᵒᵈ _ _ _ _ H f
#align finset.inf'_eq_inf Finset.inf'_eq_inf
-/- warning: finset.inf_closed_of_inf_closed -> Finset.inf_closed_of_inf_closed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
-Case conversion may be inaccurate. Consider using '#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closedₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
-/- warning: finset.coe_inf_of_nonempty -> Finset.coe_inf_of_nonempty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (WithTop.{u1} α) β (WithTop.semilatticeInf.{u1} α _inst_1) (WithTop.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))) s (fun (i : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) (f i))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithTop.{u1} α) (WithTop.some.{u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (WithTop.{u1} α) β (WithTop.semilatticeInf.{u1} α _inst_1) (WithTop.orderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithTop.{u1} α) (WithTop.some.{u1} α) f)))
-Case conversion may be inaccurate. Consider using '#align finset.coe_inf_of_nonempty Finset.coe_inf_of_nonemptyₓ'. -/
theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.inf f) : WithTop α) = s.inf fun i => f i :=
@coe_sup_of_nonempty αᵒᵈ _ _ _ _ h f
@@ -1899,9 +1062,6 @@ section Sup
variable {C : β → Type _} [∀ b : β, SemilatticeSup (C b)] [∀ b : β, OrderBot (C b)]
-/- warning: finset.sup_apply -> Finset.sup_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align finset.sup_apply Finset.sup_applyₓ'. -/
@[simp]
protected theorem sup_apply (s : Finset α) (f : α → ∀ b : β, C b) (b : β) :
s.sup f b = s.sup fun a => f a b :=
@@ -1914,9 +1074,6 @@ section Inf
variable {C : β → Type _} [∀ b : β, SemilatticeInf (C b)] [∀ b : β, OrderTop (C b)]
-/- warning: finset.inf_apply -> Finset.inf_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align finset.inf_apply Finset.inf_applyₓ'. -/
@[simp]
protected theorem inf_apply (s : Finset α) (f : α → ∀ b : β, C b) (b : β) :
s.inf f b = s.inf fun a => f a b :=
@@ -1929,12 +1086,6 @@ section Sup'
variable {C : β → Type _} [∀ b : β, SemilatticeSup (C b)]
-/- warning: finset.sup'_apply -> Finset.sup'_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeSup.{u3} (C b)] {s : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.sup'.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeSup.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) s H f b) (Finset.sup'.{u3, u1} (C b) α (_inst_1 b) s H (fun (a : α) => f a b))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeSup.{u3} (C b)] {s : Finset.{u2} α} (H : Finset.Nonempty.{u2} α s) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.sup'.{max u1 u3, u2} (forall (b : β), C b) α (Pi.semilatticeSup.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) s H f b) (Finset.sup'.{u3, u2} (C b) α (_inst_1 b) s H (fun (a : α) => f a b))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_apply Finset.sup'_applyₓ'. -/
@[simp]
protected theorem sup'_apply {s : Finset α} (H : s.Nonempty) (f : α → ∀ b : β, C b) (b : β) :
s.sup' H f b = s.sup' H fun a => f a b :=
@@ -1947,12 +1098,6 @@ section Inf'
variable {C : β → Type _} [∀ b : β, SemilatticeInf (C b)]
-/- warning: finset.inf'_apply -> Finset.inf'_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeInf.{u3} (C b)] {s : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.inf'.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeInf.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) s H f b) (Finset.inf'.{u3, u1} (C b) α (_inst_1 b) s H (fun (a : α) => f a b))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeInf.{u3} (C b)] {s : Finset.{u2} α} (H : Finset.Nonempty.{u2} α s) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.inf'.{max u1 u3, u2} (forall (b : β), C b) α (Pi.semilatticeInf.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) s H f b) (Finset.inf'.{u3, u2} (C b) α (_inst_1 b) s H (fun (a : α) => f a b))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_apply Finset.inf'_applyₓ'. -/
@[simp]
protected theorem inf'_apply {s : Finset α} (H : s.Nonempty) (f : α → ∀ b : β, C b) (b : β) :
s.inf' H f b = s.inf' H fun a => f a b :=
@@ -1961,48 +1106,24 @@ protected theorem inf'_apply {s : Finset α} (H : s.Nonempty) (f : α → ∀ b
end Inf'
-/- warning: finset.to_dual_sup' -> Finset.toDual_sup' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup'.{u1, u2} α ι _inst_1 s hs f)) (Finset.inf'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeInf.{u1} α _inst_1) s hs (Function.comp.{succ u2, succ u1, succ u1} ι α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.to_dual_sup' Finset.toDual_sup'ₓ'. -/
@[simp]
theorem toDual_sup' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
toDual (s.sup' hs f) = s.inf' hs (toDual ∘ f) :=
rfl
#align finset.to_dual_sup' Finset.toDual_sup'
-/- warning: finset.to_dual_inf' -> Finset.toDual_inf' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf'.{u1, u2} α ι _inst_1 s hs f)) (Finset.sup'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeSup.{u1} α _inst_1) s hs (Function.comp.{succ u2, succ u1, succ u1} ι α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.to_dual_inf' Finset.toDual_inf'ₓ'. -/
@[simp]
theorem toDual_inf' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
toDual (s.inf' hs f) = s.sup' hs (toDual ∘ f) :=
rfl
#align finset.to_dual_inf' Finset.toDual_inf'
-/- warning: finset.of_dual_sup' -> Finset.ofDual_sup' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeSup.{u1} α _inst_1) s hs f)) (Finset.inf'.{u1, u2} α ι _inst_1 s hs (Function.comp.{succ u2, succ u1, succ u1} ι (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (Finset.inf'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.of_dual_sup' Finset.ofDual_sup'ₓ'. -/
@[simp]
theorem ofDual_sup' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
ofDual (s.sup' hs f) = s.inf' hs (ofDual ∘ f) :=
rfl
#align finset.of_dual_sup' Finset.ofDual_sup'
-/- warning: finset.of_dual_inf' -> Finset.ofDual_inf' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeInf.{u1} α _inst_1) s hs f)) (Finset.sup'.{u1, u2} α ι _inst_1 s hs (Function.comp.{succ u2, succ u1, succ u1} ι (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (Finset.sup'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
-Case conversion may be inaccurate. Consider using '#align finset.of_dual_inf' Finset.ofDual_inf'ₓ'. -/
@[simp]
theorem ofDual_inf' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
ofDual (s.inf' hs f) = s.sup' hs (ofDual ∘ f) :=
@@ -2013,12 +1134,6 @@ section LinearOrder
variable [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ι → α} {a : α}
-/- warning: finset.le_sup'_iff -> Finset.le_sup'_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
-Case conversion may be inaccurate. Consider using '#align finset.le_sup'_iff Finset.le_sup'_iffₓ'. -/
@[simp]
theorem le_sup'_iff : a ≤ s.sup' H f ↔ ∃ b ∈ s, a ≤ f b :=
by
@@ -2026,12 +1141,6 @@ theorem le_sup'_iff : a ≤ s.sup' H f ↔ ∃ b ∈ s, a ≤ f b :=
exact bex_congr fun b hb => WithBot.coe_le_coe
#align finset.le_sup'_iff Finset.le_sup'_iff
-/- warning: finset.lt_sup'_iff -> Finset.lt_sup'_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
-Case conversion may be inaccurate. Consider using '#align finset.lt_sup'_iff Finset.lt_sup'_iffₓ'. -/
@[simp]
theorem lt_sup'_iff : a < s.sup' H f ↔ ∃ b ∈ s, a < f b :=
by
@@ -2039,12 +1148,6 @@ theorem lt_sup'_iff : a < s.sup' H f ↔ ∃ b ∈ s, a < f b :=
exact bex_congr fun b hb => WithBot.coe_lt_coe
#align finset.lt_sup'_iff Finset.lt_sup'_iff
-/- warning: finset.sup'_lt_iff -> Finset.sup'_lt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f) a) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f i) a))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_lt_iff Finset.sup'_lt_iffₓ'. -/
@[simp]
theorem sup'_lt_iff : s.sup' H f < a ↔ ∀ i ∈ s, f i < a :=
by
@@ -2052,34 +1155,16 @@ theorem sup'_lt_iff : s.sup' H f < a ↔ ∀ i ∈ s, f i < a :=
exact ball_congr fun b hb => WithBot.coe_lt_coe
#align finset.sup'_lt_iff Finset.sup'_lt_iff
-/- warning: finset.inf'_le_iff -> Finset.inf'_le_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (Exists.{succ u2} ι (fun (i : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f) a) (Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f i) a)))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_le_iff Finset.inf'_le_iffₓ'. -/
@[simp]
theorem inf'_le_iff : s.inf' H f ≤ a ↔ ∃ i ∈ s, f i ≤ a :=
@le_sup'_iff αᵒᵈ _ _ _ H f _
#align finset.inf'_le_iff Finset.inf'_le_iff
-/- warning: finset.inf'_lt_iff -> Finset.inf'_lt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (Exists.{succ u2} ι (fun (i : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f) a) (Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f i) a)))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_lt_iff Finset.inf'_lt_iffₓ'. -/
@[simp]
theorem inf'_lt_iff : s.inf' H f < a ↔ ∃ i ∈ s, f i < a :=
@lt_sup'_iff αᵒᵈ _ _ _ H f _
#align finset.inf'_lt_iff Finset.inf'_lt_iff
-/- warning: finset.lt_inf'_iff -> Finset.lt_inf'_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f i)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f)) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f i)))
-Case conversion may be inaccurate. Consider using '#align finset.lt_inf'_iff Finset.lt_inf'_iffₓ'. -/
@[simp]
theorem lt_inf'_iff : a < s.inf' H f ↔ ∀ i ∈ s, a < f i :=
@sup'_lt_iff αᵒᵈ _ _ _ H f _
@@ -2104,23 +1189,11 @@ theorem exists_mem_eq_inf' (f : ι → α) : ∃ i, i ∈ s ∧ s.inf' H f = f i
#align finset.exists_mem_eq_inf' Finset.exists_mem_eq_inf'
-/
-/- warning: finset.exists_mem_eq_sup -> Finset.exists_mem_eq_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι), (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α), Exists.{succ u2} ι (fun (i : ι) => And (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) (f i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] (s : Finset.{u1} ι), (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α), Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (Eq.{succ u2} α (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) (f i))))
-Case conversion may be inaccurate. Consider using '#align finset.exists_mem_eq_sup Finset.exists_mem_eq_supₓ'. -/
theorem exists_mem_eq_sup [OrderBot α] (s : Finset ι) (h : s.Nonempty) (f : ι → α) :
∃ i, i ∈ s ∧ s.sup f = f i :=
sup'_eq_sup h f ▸ exists_mem_eq_sup' h f
#align finset.exists_mem_eq_sup Finset.exists_mem_eq_sup
-/- warning: finset.exists_mem_eq_inf -> Finset.exists_mem_eq_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι), (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α), Exists.{succ u2} ι (fun (i : ι) => And (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) (f i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] (s : Finset.{u1} ι), (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α), Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (Eq.{succ u2} α (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) (f i))))
-Case conversion may be inaccurate. Consider using '#align finset.exists_mem_eq_inf Finset.exists_mem_eq_infₓ'. -/
theorem exists_mem_eq_inf [OrderTop α] (s : Finset ι) (h : s.Nonempty) (f : ι → α) :
∃ i, i ∈ s ∧ s.inf f = f i :=
@exists_mem_eq_sup αᵒᵈ _ _ _ _ h f
@@ -2163,12 +1236,6 @@ theorem max_empty : (∅ : Finset α).max = ⊥ :=
#align finset.max_empty Finset.max_empty
-/
-/- warning: finset.max_insert -> Finset.max_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b)) a s)) (LinearOrder.max.{u1} (WithBot.{u1} α) (WithBot.linearOrder.{u1} α _inst_1) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) a) (Finset.max.{u1} α _inst_1 s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b)) a s)) (Max.max.{u1} (WithBot.{u1} α) (LinearOrder.toMax.{u1} (WithBot.{u1} α) (WithBot.linearOrder.{u1} α _inst_1)) (WithBot.some.{u1} α a) (Finset.max.{u1} α _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align finset.max_insert Finset.max_insertₓ'. -/
@[simp]
theorem max_insert {a : α} {s : Finset α} : (insert a s).max = max a s.max :=
fold_insert_idem
@@ -2218,62 +1285,26 @@ theorem mem_of_max {s : Finset α} : ∀ {a : α}, s.max = a → a ∈ s :=
#align finset.mem_of_max Finset.mem_of_max
-/
-/- warning: finset.le_max -> Finset.le_max is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) a) (Finset.max.{u1} α _inst_1 s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (WithBot.some.{u1} α a) (Finset.max.{u1} α _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align finset.le_max Finset.le_maxₓ'. -/
theorem le_max {a : α} {s : Finset α} (as : a ∈ s) : ↑a ≤ s.max :=
le_sup as
#align finset.le_max Finset.le_max
-/- warning: finset.not_mem_of_max_lt_coe -> Finset.not_mem_of_max_lt_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithBot.{u1} α) (Preorder.toHasLt.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.max.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) a)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithBot.{u1} α) (Preorder.toLT.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.max.{u1} α _inst_1 s) (WithBot.some.{u1} α a)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
-Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_max_lt_coe Finset.not_mem_of_max_lt_coeₓ'. -/
theorem not_mem_of_max_lt_coe {a : α} {s : Finset α} (h : s.max < a) : a ∉ s :=
mt le_max h.not_le
#align finset.not_mem_of_max_lt_coe Finset.not_mem_of_max_lt_coe
-/- warning: finset.le_max_of_eq -> Finset.le_max_of_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) b)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) (WithBot.some.{u1} α b)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b)
-Case conversion may be inaccurate. Consider using '#align finset.le_max_of_eq Finset.le_max_of_eqₓ'. -/
theorem le_max_of_eq {s : Finset α} {a b : α} (h₁ : a ∈ s) (h₂ : s.max = b) : a ≤ b :=
WithBot.coe_le_coe.mp <| (le_max h₁).trans h₂.le
#align finset.le_max_of_eq Finset.le_max_of_eq
-/- warning: finset.not_mem_of_max_lt -> Finset.not_mem_of_max_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) b a) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) b)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) b a) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) (WithBot.some.{u1} α b)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
-Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_max_lt Finset.not_mem_of_max_ltₓ'. -/
theorem not_mem_of_max_lt {s : Finset α} {a b : α} (h₁ : b < a) (h₂ : s.max = ↑b) : a ∉ s :=
Finset.not_mem_of_max_lt_coe <| h₂.trans_lt <| WithBot.coe_lt_coe.mpr h₁
#align finset.not_mem_of_max_lt Finset.not_mem_of_max_lt
-/- warning: finset.max_mono -> Finset.max_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.max.{u1} α _inst_1 s) (Finset.max.{u1} α _inst_1 t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.max.{u1} α _inst_1 s) (Finset.max.{u1} α _inst_1 t))
-Case conversion may be inaccurate. Consider using '#align finset.max_mono Finset.max_monoₓ'. -/
theorem max_mono {s t : Finset α} (st : s ⊆ t) : s.max ≤ t.max :=
sup_mono st
#align finset.max_mono Finset.max_mono
-/- warning: finset.max_le -> Finset.max_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {M : WithBot.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) a) M)) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.max.{u1} α _inst_1 s) M)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {M : WithBot.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (WithBot.some.{u1} α a) M)) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.max.{u1} α _inst_1 s) M)
-Case conversion may be inaccurate. Consider using '#align finset.max_le Finset.max_leₓ'. -/
protected theorem max_le {M : WithBot α} {s : Finset α} (st : ∀ a ∈ s, (a : WithBot α) ≤ M) :
s.max ≤ M :=
Finset.sup_le st
@@ -2301,12 +1332,6 @@ theorem min_empty : (∅ : Finset α).min = ⊤ :=
#align finset.min_empty Finset.min_empty
-/
-/- warning: finset.min_insert -> Finset.min_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b)) a s)) (LinearOrder.min.{u1} (WithTop.{u1} α) (WithTop.linearOrder.{u1} α _inst_1) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a) (Finset.min.{u1} α _inst_1 s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b)) a s)) (Min.min.{u1} (WithTop.{u1} α) (LinearOrder.toMin.{u1} (WithTop.{u1} α) (WithTop.linearOrder.{u1} α _inst_1)) (WithTop.some.{u1} α a) (Finset.min.{u1} α _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align finset.min_insert Finset.min_insertₓ'. -/
@[simp]
theorem min_insert {a : α} {s : Finset α} : (insert a s).min = min (↑a) s.min :=
fold_insert_idem
@@ -2349,62 +1374,26 @@ theorem mem_of_min {s : Finset α} : ∀ {a : α}, s.min = a → a ∈ s :=
#align finset.mem_of_min Finset.mem_of_min
-/
-/- warning: finset.min_le -> Finset.min_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.min.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.min.{u1} α _inst_1 s) (WithTop.some.{u1} α a))
-Case conversion may be inaccurate. Consider using '#align finset.min_le Finset.min_leₓ'. -/
theorem min_le {a : α} {s : Finset α} (as : a ∈ s) : s.min ≤ a :=
inf_le as
#align finset.min_le Finset.min_le
-/- warning: finset.not_mem_of_coe_lt_min -> Finset.not_mem_of_coe_lt_min is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithTop.{u1} α) (Preorder.toHasLt.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a) (Finset.min.{u1} α _inst_1 s)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithTop.{u1} α) (Preorder.toLT.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (WithTop.some.{u1} α a) (Finset.min.{u1} α _inst_1 s)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
-Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_coe_lt_min Finset.not_mem_of_coe_lt_minₓ'. -/
theorem not_mem_of_coe_lt_min {a : α} {s : Finset α} (h : ↑a < s.min) : a ∉ s :=
mt min_le h.not_le
#align finset.not_mem_of_coe_lt_min Finset.not_mem_of_coe_lt_min
-/- warning: finset.min_le_of_eq -> Finset.min_le_of_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b s) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b s) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) (WithTop.some.{u1} α a)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b)
-Case conversion may be inaccurate. Consider using '#align finset.min_le_of_eq Finset.min_le_of_eqₓ'. -/
theorem min_le_of_eq {s : Finset α} {a b : α} (h₁ : b ∈ s) (h₂ : s.min = a) : a ≤ b :=
WithTop.coe_le_coe.mp <| h₂.ge.trans (min_le h₁)
#align finset.min_le_of_eq Finset.min_le_of_eq
-/- warning: finset.not_mem_of_lt_min -> Finset.not_mem_of_lt_min is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) b)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) (WithTop.some.{u1} α b)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
-Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_lt_min Finset.not_mem_of_lt_minₓ'. -/
theorem not_mem_of_lt_min {s : Finset α} {a b : α} (h₁ : a < b) (h₂ : s.min = ↑b) : a ∉ s :=
Finset.not_mem_of_coe_lt_min <| (WithTop.coe_lt_coe.mpr h₁).trans_eq h₂.symm
#align finset.not_mem_of_lt_min Finset.not_mem_of_lt_min
-/- warning: finset.min_mono -> Finset.min_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.min.{u1} α _inst_1 t) (Finset.min.{u1} α _inst_1 s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.min.{u1} α _inst_1 t) (Finset.min.{u1} α _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align finset.min_mono Finset.min_monoₓ'. -/
theorem min_mono {s t : Finset α} (st : s ⊆ t) : t.min ≤ s.min :=
inf_mono st
#align finset.min_mono Finset.min_mono
-/- warning: finset.le_min -> Finset.le_min is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {m : WithTop.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) m ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a))) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) m (Finset.min.{u1} α _inst_1 s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {m : WithTop.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) m (WithTop.some.{u1} α a))) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) m (Finset.min.{u1} α _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align finset.le_min Finset.le_minₓ'. -/
protected theorem le_min {m : WithTop α} {s : Finset α} (st : ∀ a : α, a ∈ s → m ≤ a) : m ≤ s.min :=
Finset.le_inf st
#align finset.le_min Finset.le_min
@@ -2435,22 +1424,10 @@ theorem min'_mem : s.min' H ∈ s :=
#align finset.min'_mem Finset.min'_mem
-/
-/- warning: finset.min'_le -> Finset.min'_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) x H2)) x
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) x H2)) x
-Case conversion may be inaccurate. Consider using '#align finset.min'_le Finset.min'_leₓ'. -/
theorem min'_le (x) (H2 : x ∈ s) : s.min' ⟨x, H2⟩ ≤ x :=
min_le_of_eq H2 (WithTop.coe_untop _ _).symm
#align finset.min'_le Finset.min'_le
-/- warning: finset.le_min' -> Finset.le_min' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.min'.{u1} α _inst_1 s H))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.min'.{u1} α _inst_1 s H))
-Case conversion may be inaccurate. Consider using '#align finset.le_min' Finset.le_min'ₓ'. -/
theorem le_min' (x) (H2 : ∀ y ∈ s, x ≤ y) : x ≤ s.min' H :=
H2 _ <| min'_mem _ _
#align finset.le_min' Finset.le_min'
@@ -2461,12 +1438,6 @@ theorem isLeast_min' : IsLeast (↑s) (s.min' H) :=
#align finset.is_least_min' Finset.isLeast_min'
-/
-/- warning: finset.le_min'_iff -> Finset.le_min'_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y))
-Case conversion may be inaccurate. Consider using '#align finset.le_min'_iff Finset.le_min'_iffₓ'. -/
@[simp]
theorem le_min'_iff {x} : x ≤ s.min' H ↔ ∀ y ∈ s, x ≤ y :=
le_isGLB_iff (isLeast_min' s H).IsGLB
@@ -2485,22 +1456,10 @@ theorem max'_mem : s.max' H ∈ s :=
#align finset.max'_mem Finset.max'_mem
-/
-/- warning: finset.le_max' -> Finset.le_max' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) x H2))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) x H2))
-Case conversion may be inaccurate. Consider using '#align finset.le_max' Finset.le_max'ₓ'. -/
theorem le_max' (x) (H2 : x ∈ s) : x ≤ s.max' ⟨x, H2⟩ :=
le_max_of_eq H2 (WithBot.coe_unbot _ _).symm
#align finset.le_max' Finset.le_max'
-/- warning: finset.max'_le -> Finset.max'_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) x)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) x)
-Case conversion may be inaccurate. Consider using '#align finset.max'_le Finset.max'_leₓ'. -/
theorem max'_le (x) (H2 : ∀ y ∈ s, y ≤ x) : s.max' H ≤ x :=
H2 _ <| max'_mem _ _
#align finset.max'_le Finset.max'_le
@@ -2511,34 +1470,16 @@ theorem isGreatest_max' : IsGreatest (↑s) (s.max' H) :=
#align finset.is_greatest_max' Finset.isGreatest_max'
-/
-/- warning: finset.max'_le_iff -> Finset.max'_le_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x))
-Case conversion may be inaccurate. Consider using '#align finset.max'_le_iff Finset.max'_le_iffₓ'. -/
@[simp]
theorem max'_le_iff {x} : s.max' H ≤ x ↔ ∀ y ∈ s, y ≤ x :=
isLUB_le_iff (isGreatest_max' s H).IsLUB
#align finset.max'_le_iff Finset.max'_le_iff
-/- warning: finset.max'_lt_iff -> Finset.max'_lt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x))
-Case conversion may be inaccurate. Consider using '#align finset.max'_lt_iff Finset.max'_lt_iffₓ'. -/
@[simp]
theorem max'_lt_iff {x} : s.max' H < x ↔ ∀ y ∈ s, y < x :=
⟨fun Hlt y hy => (s.le_max' y hy).trans_lt Hlt, fun H => H _ <| s.max'_mem _⟩
#align finset.max'_lt_iff Finset.max'_lt_iff
-/- warning: finset.lt_min'_iff -> Finset.lt_min'_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y))
-Case conversion may be inaccurate. Consider using '#align finset.lt_min'_iff Finset.lt_min'_iffₓ'. -/
@[simp]
theorem lt_min'_iff : x < s.min' H ↔ ∀ y ∈ s, x < y :=
@max'_lt_iff αᵒᵈ _ _ H _
@@ -2563,23 +1504,11 @@ theorem max'_singleton (a : α) : ({a} : Finset α).max' (singleton_nonempty _)
#align finset.max'_singleton Finset.max'_singleton
-/
-/- warning: finset.min'_lt_max' -> Finset.min'_lt_max' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) {i : α} {j : α} (H1 : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i s), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) j s) -> (Ne.{succ u1} α i j) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) i H1)) (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) i H1)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) {i : α} {j : α} (H1 : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i s), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) j s) -> (Ne.{succ u1} α i j) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) i H1)) (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) i H1)))
-Case conversion may be inaccurate. Consider using '#align finset.min'_lt_max' Finset.min'_lt_max'ₓ'. -/
theorem min'_lt_max' {i j} (H1 : i ∈ s) (H2 : j ∈ s) (H3 : i ≠ j) :
s.min' ⟨i, H1⟩ < s.max' ⟨i, H1⟩ :=
isGLB_lt_isLUB_of_ne (s.isLeast_min' _).IsGLB (s.isGreatest_max' _).IsLUB H1 H2 H3
#align finset.min'_lt_max' Finset.min'_lt_max'
-/- warning: finset.min'_lt_max'_of_card -> Finset.min'_lt_max'_of_card is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (h₂ : LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) (Finset.card.{u1} α s)), LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat Nat.hasZero Nat.hasOne (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.one.{0} Nat (NonAssocSemiring.toMulZeroOneClass.{0} Nat (Semiring.toNonAssocSemiring.{0} Nat Nat.semiring)) Nat.nontrivial)) h₂))) (Finset.max'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat Nat.hasZero Nat.hasOne (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.one.{0} Nat (NonAssocSemiring.toMulZeroOneClass.{0} Nat (Semiring.toNonAssocSemiring.{0} Nat Nat.semiring)) Nat.nontrivial)) h₂)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (h₂ : LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) (Finset.card.{u1} α s)), LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{0} Nat 1 (One.toOfNat1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat (LinearOrderedCommMonoidWithZero.toZero.{0} Nat Nat.linearOrderedCommMonoidWithZero) (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.succ Nat.zero)) h₂))) (Finset.max'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{0} Nat 1 (One.toOfNat1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat (LinearOrderedCommMonoidWithZero.toZero.{0} Nat Nat.linearOrderedCommMonoidWithZero) (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.succ Nat.zero)) h₂)))
-Case conversion may be inaccurate. Consider using '#align finset.min'_lt_max'_of_card Finset.min'_lt_max'_of_cardₓ'. -/
/-- If there's more than 1 element, the min' is less than the max'. An alternate version of
`min'_lt_max'` which is sometimes more convenient.
-/
@@ -2639,68 +1568,32 @@ theorem toDual_max' {s : Finset α} (hs : s.Nonempty) :
#align finset.to_dual_max' Finset.toDual_max'
-/
-/- warning: finset.max'_subset -> Finset.max'_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) (Finset.max'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) (Finset.max'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H))
-Case conversion may be inaccurate. Consider using '#align finset.max'_subset Finset.max'_subsetₓ'. -/
theorem max'_subset {s t : Finset α} (H : s.Nonempty) (hst : s ⊆ t) :
s.max' H ≤ t.max' (H.mono hst) :=
le_max' _ _ (hst (s.max'_mem H))
#align finset.max'_subset Finset.max'_subset
-/- warning: finset.min'_subset -> Finset.min'_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H)) (Finset.min'.{u1} α _inst_1 s H)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H)) (Finset.min'.{u1} α _inst_1 s H)
-Case conversion may be inaccurate. Consider using '#align finset.min'_subset Finset.min'_subsetₓ'. -/
theorem min'_subset {s t : Finset α} (H : s.Nonempty) (hst : s ⊆ t) :
t.min' (H.mono hst) ≤ s.min' H :=
min'_le _ _ (hst (s.min'_mem H))
#align finset.min'_subset Finset.min'_subset
-/- warning: finset.max'_insert -> Finset.max'_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (a : α) (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s), Eq.{succ u1} α (Finset.max'.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b)) a s) (Finset.insert_nonempty.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a s)) (LinearOrder.max.{u1} α _inst_1 (Finset.max'.{u1} α _inst_1 s H) a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (a : α) (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s), Eq.{succ u1} α (Finset.max'.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b)) a s) (Finset.insert_nonempty.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a s)) (Max.max.{u1} α (LinearOrder.toMax.{u1} α _inst_1) (Finset.max'.{u1} α _inst_1 s H) a)
-Case conversion may be inaccurate. Consider using '#align finset.max'_insert Finset.max'_insertₓ'. -/
theorem max'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(insert a s).max' (s.insert_nonempty a) = max (s.max' H) a :=
(isGreatest_max' _ _).unique <| by rw [coe_insert, max_comm];
exact (is_greatest_max' _ _).insert _
#align finset.max'_insert Finset.max'_insert
-/- warning: finset.min'_insert -> Finset.min'_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (a : α) (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s), Eq.{succ u1} α (Finset.min'.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b)) a s) (Finset.insert_nonempty.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a s)) (LinearOrder.min.{u1} α _inst_1 (Finset.min'.{u1} α _inst_1 s H) a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (a : α) (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s), Eq.{succ u1} α (Finset.min'.{u1} α _inst_1 (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b)) a s) (Finset.insert_nonempty.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a s)) (Min.min.{u1} α (LinearOrder.toMin.{u1} α _inst_1) (Finset.min'.{u1} α _inst_1 s H) a)
-Case conversion may be inaccurate. Consider using '#align finset.min'_insert Finset.min'_insertₓ'. -/
theorem min'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(insert a s).min' (s.insert_nonempty a) = min (s.min' H) a :=
(isLeast_min' _ _).unique <| by rw [coe_insert, min_comm]; exact (is_least_min' _ _).insert _
#align finset.min'_insert Finset.min'_insert
-/- warning: finset.lt_max'_of_mem_erase_max' -> Finset.lt_max'_of_mem_erase_max' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.max'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.max'.{u1} α _inst_1 s H))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.max'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a (Finset.max'.{u1} α _inst_1 s H))
-Case conversion may be inaccurate. Consider using '#align finset.lt_max'_of_mem_erase_max' Finset.lt_max'_of_mem_erase_max'ₓ'. -/
theorem lt_max'_of_mem_erase_max' [DecidableEq α] {a : α} (ha : a ∈ s.eraseₓ (s.max' H)) :
a < s.max' H :=
lt_of_le_of_ne (le_max' _ _ (mem_of_mem_erase ha)) <| ne_of_mem_of_not_mem ha <| not_mem_erase _ _
#align finset.lt_max'_of_mem_erase_max' Finset.lt_max'_of_mem_erase_max'
-/- warning: finset.min'_lt_of_mem_erase_min' -> Finset.min'_lt_of_mem_erase_min' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.min'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s H) a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.min'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s H) a)
-Case conversion may be inaccurate. Consider using '#align finset.min'_lt_of_mem_erase_min' Finset.min'_lt_of_mem_erase_min'ₓ'. -/
theorem min'_lt_of_mem_erase_min' [DecidableEq α] {a : α} (ha : a ∈ s.eraseₓ (s.min' H)) :
s.min' H < a :=
@lt_max'_of_mem_erase_max' αᵒᵈ _ s H _ a ha
@@ -2741,45 +1634,21 @@ theorem coe_min' {s : Finset α} (hs : s.Nonempty) : ↑(s.min' hs) = s.min :=
#align finset.coe_min' Finset.coe_min'
-/
-/- warning: finset.max_mem_image_coe -> Finset.max_mem_image_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.Mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.hasMem.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instMembershipFinset.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => WithBot.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithBot.some.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.max_mem_image_coe Finset.max_mem_image_coeₓ'. -/
theorem max_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
s.max ∈ (s.image coe : Finset (WithBot α)) :=
mem_image.2 ⟨max' s hs, max'_mem _ _, coe_max' hs⟩
#align finset.max_mem_image_coe Finset.max_mem_image_coe
-/- warning: finset.min_mem_image_coe -> Finset.min_mem_image_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.Mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.hasMem.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α)))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instMembershipFinset.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => WithTop.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithTop.some.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.min_mem_image_coe Finset.min_mem_image_coeₓ'. -/
theorem min_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
s.min ∈ (s.image coe : Finset (WithTop α)) :=
mem_image.2 ⟨min' s hs, min'_mem _ _, coe_min' hs⟩
#align finset.min_mem_image_coe Finset.min_mem_image_coe
-/- warning: finset.max_mem_insert_bot_image_coe -> Finset.max_mem_insert_bot_image_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.Mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.hasMem.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.hasInsert.{u1} (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b)) (Bot.bot.{u1} (WithBot.{u1} α) (WithBot.hasBot.{u1} α)) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instMembershipFinset.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instInsertFinset.{u1} (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => WithBot.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b)) (Bot.bot.{u1} (WithBot.{u1} α) (WithBot.bot.{u1} α)) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => WithBot.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithBot.some.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.max_mem_insert_bot_image_coe Finset.max_mem_insert_bot_image_coeₓ'. -/
theorem max_mem_insert_bot_image_coe (s : Finset α) :
s.max ∈ (insert ⊥ (s.image coe) : Finset (WithBot α)) :=
mem_insert.2 <| s.eq_empty_or_nonempty.imp max_eq_bot.2 max_mem_image_coe
#align finset.max_mem_insert_bot_image_coe Finset.max_mem_insert_bot_image_coe
-/- warning: finset.min_mem_insert_top_image_coe -> Finset.min_mem_insert_top_image_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.Mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.hasMem.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.hasInsert.{u1} (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b)) (Top.top.{u1} (WithTop.{u1} α) (WithTop.hasTop.{u1} α)) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α)))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instMembershipFinset.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instInsertFinset.{u1} (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => WithTop.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b)) (Top.top.{u1} (WithTop.{u1} α) (WithTop.top.{u1} α)) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => WithTop.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithTop.some.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.min_mem_insert_top_image_coe Finset.min_mem_insert_top_image_coeₓ'. -/
theorem min_mem_insert_top_image_coe (s : Finset α) :
s.min ∈ (insert ⊤ (s.image coe) : Finset (WithTop α)) :=
mem_insert.2 <| s.eq_empty_or_nonempty.imp min_eq_top.2 min_mem_image_coe
@@ -2814,12 +1683,6 @@ theorem min_erase_ne_self {s : Finset α} : (s.eraseₓ x).min ≠ x := by
#align finset.min_erase_ne_self Finset.min_erase_ne_self
-/
-/- warning: finset.exists_next_right -> Finset.exists_next_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y z)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y))) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y z)))))
-Case conversion may be inaccurate. Consider using '#align finset.exists_next_right Finset.exists_next_rightₓ'. -/
theorem exists_next_right {x : α} {s : Finset α} (h : ∃ y ∈ s, x < y) :
∃ y ∈ s, x < y ∧ ∀ z ∈ s, x < z → y ≤ z :=
have Hne : (s.filterₓ ((· < ·) x)).Nonempty := h.imp fun y hy => mem_filter.2 ⟨hy.fst, hy.snd⟩
@@ -2827,23 +1690,11 @@ theorem exists_next_right {x : α} {s : Finset α} (h : ∃ y ∈ s, x < y) :
min'_le _ _ <| mem_filter.2 ⟨hzs, hz⟩⟩
#align finset.exists_next_right Finset.exists_next_right
-/- warning: finset.exists_next_left -> Finset.exists_next_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x) (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z x) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x))) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x) (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z x) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))
-Case conversion may be inaccurate. Consider using '#align finset.exists_next_left Finset.exists_next_leftₓ'. -/
theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
∃ y ∈ s, y < x ∧ ∀ z ∈ s, z < x → z ≤ y :=
@exists_next_right αᵒᵈ _ x s h
#align finset.exists_next_left Finset.exists_next_left
-/- warning: finset.card_le_of_interleaved -> Finset.card_le_of_interleaved is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α t) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z t) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α t) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))
-Case conversion may be inaccurate. Consider using '#align finset.card_le_of_interleaved Finset.card_le_of_interleavedₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card t + 1`. -/
@@ -2879,12 +1730,6 @@ theorem card_le_of_interleaved {s t : Finset α}
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
-/- warning: finset.card_le_diff_of_interleaved -> Finset.card_le_diff_of_interleaved is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.hasSdiff.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b)) t s)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z t) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b)) t s)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))
-Case conversion may be inaccurate. Consider using '#align finset.card_le_diff_of_interleaved Finset.card_le_diff_of_interleavedₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
@@ -2897,12 +1742,6 @@ theorem card_le_diff_of_interleaved {s t : Finset α}
⟨z, mem_sdiff.2 ⟨hzt, fun hzs => hs z hzs ⟨hxz, hzy⟩⟩, hxz, hzy⟩
#align finset.card_le_diff_of_interleaved Finset.card_le_diff_of_interleaved
-/- warning: finset.induction_on_max -> Finset.induction_on_max is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x a)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x a)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
-Case conversion may be inaccurate. Consider using '#align finset.induction_on_max Finset.induction_on_maxₓ'. -/
/-- Induction principle for `finset`s in a linearly ordered type: a predicate is true on all
`s : finset α` provided that:
@@ -2921,12 +1760,6 @@ theorem induction_on_max [DecidableEq α] {p : Finset α → Prop} (s : Finset
exact step _ _ (fun x => s.lt_max'_of_mem_erase_max' hne) (ihs _ <| erase_ssubset H)
#align finset.induction_on_max Finset.induction_on_max
-/- warning: finset.induction_on_min -> Finset.induction_on_min is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a x)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a x)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
-Case conversion may be inaccurate. Consider using '#align finset.induction_on_min Finset.induction_on_minₓ'. -/
/-- Induction principle for `finset`s in a linearly ordered type: a predicate is true on all
`s : finset α` provided that:
@@ -2945,12 +1778,6 @@ section MaxMinInductionValue
variable [LinearOrder α] [LinearOrder β]
-/- warning: finset.induction_on_max_value -> Finset.induction_on_max_value is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.hasEmptyc.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s)) -> (forall (x : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x) (f a))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.hasInsert.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.instEmptyCollectionFinset.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s)) -> (forall (x : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f x) (f a))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.instInsertFinset.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
-Case conversion may be inaccurate. Consider using '#align finset.induction_on_max_value Finset.induction_on_max_valueₓ'. -/
/-- Induction principle for `finset`s in any type from which a given function `f` maps to a linearly
ordered type : a predicate is true on all `s : finset α` provided that:
@@ -2974,12 +1801,6 @@ theorem induction_on_max_value [DecidableEq ι] (f : ι → α) {p : Finset ι
exact le_max' _ _ (mem_image_of_mem _ <| mem_of_mem_erase hx)
#align finset.induction_on_max_value Finset.induction_on_max_value
-/- warning: finset.induction_on_min_value -> Finset.induction_on_min_value is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.hasEmptyc.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s)) -> (forall (x : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f a) (f x))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.hasInsert.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.instEmptyCollectionFinset.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s)) -> (forall (x : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f a) (f x))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.instInsertFinset.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
-Case conversion may be inaccurate. Consider using '#align finset.induction_on_min_value Finset.induction_on_min_valueₓ'. -/
/-- Induction principle for `finset`s in any type from which a given function `f` maps to a linearly
ordered type : a predicate is true on all `s : finset α` provided that:
@@ -2998,12 +1819,6 @@ section ExistsMaxMin
variable [LinearOrder α]
-/- warning: finset.exists_max_image -> Finset.exists_max_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => Exists.{0} (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) (fun (H : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) => forall (x' : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x') (f x)))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => And (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) (forall (x' : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f x') (f x)))))
-Case conversion may be inaccurate. Consider using '#align finset.exists_max_image Finset.exists_max_imageₓ'. -/
theorem exists_max_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
∃ x ∈ s, ∀ x' ∈ s, f x' ≤ f x :=
by
@@ -3012,12 +1827,6 @@ theorem exists_max_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
exact ⟨x, hx, fun x' hx' => le_max_of_eq (mem_image_of_mem f hx') hy⟩
#align finset.exists_max_image Finset.exists_max_image
-/- warning: finset.exists_min_image -> Finset.exists_min_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => Exists.{0} (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) (fun (H : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) => forall (x' : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x) (f x')))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => And (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) (forall (x' : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f x) (f x')))))
-Case conversion may be inaccurate. Consider using '#align finset.exists_min_image Finset.exists_min_imageₓ'. -/
theorem exists_min_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
∃ x ∈ s, ∀ x' ∈ s, f x ≤ f x' :=
@exists_max_image αᵒᵈ β _ s f h
@@ -3060,23 +1869,11 @@ end Finset
namespace Multiset
-/- warning: multiset.map_finset_sup -> Multiset.map_finset_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (f : γ -> (Multiset.{u2} β)) (g : β -> α), (Function.Injective.{succ u2, succ u1} β α g) -> (Eq.{succ u1} (Multiset.{u1} α) (Multiset.map.{u2, u1} β α g (Finset.sup.{u2, u3} (Multiset.{u2} β) γ (Lattice.toSemilatticeSup.{u2} (Multiset.{u2} β) (Multiset.lattice.{u2} β (fun (a : β) (b : β) => _inst_2 a b))) (Multiset.orderBot.{u2} β) s f)) (Finset.sup.{u1, u3} (Multiset.{u1} α) γ (Lattice.toSemilatticeSup.{u1} (Multiset.{u1} α) (Multiset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b))) (Multiset.orderBot.{u1} α) s (Function.comp.{succ u3, succ u2, succ u1} γ (Multiset.{u2} β) (Multiset.{u1} α) (Multiset.map.{u2, u1} β α g) f)))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : DecidableEq.{succ u3} α] [_inst_2 : DecidableEq.{succ u2} β] (s : Finset.{u1} γ) (f : γ -> (Multiset.{u2} β)) (g : β -> α), (Function.Injective.{succ u2, succ u3} β α g) -> (Eq.{succ u3} (Multiset.{u3} α) (Multiset.map.{u2, u3} β α g (Finset.sup.{u2, u1} (Multiset.{u2} β) γ (Lattice.toSemilatticeSup.{u2} (Multiset.{u2} β) (Multiset.instLatticeMultiset.{u2} β (fun (a : β) (b : β) => _inst_2 a b))) (Multiset.instOrderBotMultisetToLEToPreorderInstPartialOrderMultiset.{u2} β) s f)) (Finset.sup.{u3, u1} (Multiset.{u3} α) γ (Lattice.toSemilatticeSup.{u3} (Multiset.{u3} α) (Multiset.instLatticeMultiset.{u3} α (fun (a : α) (b : α) => _inst_1 a b))) (Multiset.instOrderBotMultisetToLEToPreorderInstPartialOrderMultiset.{u3} α) s (Function.comp.{succ u1, succ u2, succ u3} γ (Multiset.{u2} β) (Multiset.{u3} α) (Multiset.map.{u2, u3} β α g) f)))
-Case conversion may be inaccurate. Consider using '#align multiset.map_finset_sup Multiset.map_finset_supₓ'. -/
theorem map_finset_sup [DecidableEq α] [DecidableEq β] (s : Finset γ) (f : γ → Multiset β)
(g : β → α) (hg : Function.Injective g) : map g (s.sup f) = s.sup (map g ∘ f) :=
Finset.comp_sup_eq_sup_comp _ (fun _ _ => map_union hg) (map_zero _)
#align multiset.map_finset_sup Multiset.map_finset_sup
-/- warning: multiset.count_finset_sup -> Multiset.count_finset_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (f : α -> (Multiset.{u2} β)) (b : β), Eq.{1} Nat (Multiset.count.{u2} β (fun (a : β) (b : β) => _inst_1 a b) b (Finset.sup.{u2, u1} (Multiset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Multiset.{u2} β) (Multiset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b))) (Multiset.orderBot.{u2} β) s f)) (Finset.sup.{0, u1} Nat α (CanonicallyLinearOrderedAddMonoid.semilatticeSup.{0} Nat Nat.canonicallyLinearOrderedAddMonoid) Nat.orderBot s (fun (a : α) => Multiset.count.{u2} β (fun (a : β) (b : β) => _inst_1 a b) b (f a)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (f : α -> (Multiset.{u2} β)) (b : β), Eq.{1} Nat (Multiset.count.{u2} β (fun (a : β) (b : β) => _inst_1 a b) b (Finset.sup.{u2, u1} (Multiset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Multiset.{u2} β) (Multiset.instLatticeMultiset.{u2} β (fun (a : β) (b : β) => _inst_1 a b))) (Multiset.instOrderBotMultisetToLEToPreorderInstPartialOrderMultiset.{u2} β) s f)) (Finset.sup.{0, u1} Nat α (Lattice.toSemilatticeSup.{0} Nat (DistribLattice.toLattice.{0} Nat instDistribLatticeNat)) Nat.orderBot s (fun (a : α) => Multiset.count.{u2} β (fun (a : β) (b : β) => _inst_1 a b) b (f a)))
-Case conversion may be inaccurate. Consider using '#align multiset.count_finset_sup Multiset.count_finset_supₓ'. -/
theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset β) (b : β) :
count b (s.sup f) = s.sup fun a => count b (f a) :=
by
@@ -3088,12 +1885,6 @@ theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset
rfl
#align multiset.count_finset_sup Multiset.count_finset_sup
-/- warning: multiset.mem_sup -> Multiset.mem_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] {s : Finset.{u1} α} {f : α -> (Multiset.{u2} β)} {x : β}, Iff (Membership.Mem.{u2, u2} β (Multiset.{u2} β) (Multiset.hasMem.{u2} β) x (Finset.sup.{u2, u1} (Multiset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Multiset.{u2} β) (Multiset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b))) (Multiset.orderBot.{u2} β) s f)) (Exists.{succ u1} α (fun (v : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) v s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) v s) => Membership.Mem.{u2, u2} β (Multiset.{u2} β) (Multiset.hasMem.{u2} β) x (f v))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] {s : Finset.{u2} α} {f : α -> (Multiset.{u1} β)} {x : β}, Iff (Membership.mem.{u1, u1} β (Multiset.{u1} β) (Multiset.instMembershipMultiset.{u1} β) x (Finset.sup.{u1, u2} (Multiset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Multiset.{u1} β) (Multiset.instLatticeMultiset.{u1} β (fun (a : β) (b : β) => _inst_1 a b))) (Multiset.instOrderBotMultisetToLEToPreorderInstPartialOrderMultiset.{u1} β) s f)) (Exists.{succ u2} α (fun (v : α) => And (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) v s) (Membership.mem.{u1, u1} β (Multiset.{u1} β) (Multiset.instMembershipMultiset.{u1} β) x (f v))))
-Case conversion may be inaccurate. Consider using '#align multiset.mem_sup Multiset.mem_supₓ'. -/
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β} {x : β} :
x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by
classical
@@ -3120,12 +1911,6 @@ end Multiset
namespace Finset
-/- warning: finset.mem_sup -> Finset.mem_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] {s : Finset.{u1} α} {f : α -> (Finset.{u2} β)} {x : β}, Iff (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x (Finset.sup.{u2, u1} (Finset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.orderBot.{u2} β) s f)) (Exists.{succ u1} α (fun (v : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) v s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) v s) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x (f v))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] {s : Finset.{u2} α} {f : α -> (Finset.{u1} β)} {x : β}, Iff (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) x (Finset.sup.{u1, u2} (Finset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} β) s f)) (Exists.{succ u2} α (fun (v : α) => And (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) v s) (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) x (f v))))
-Case conversion may be inaccurate. Consider using '#align finset.mem_sup Finset.mem_supₓ'. -/
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Finset β} {x : β} :
x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v :=
by
@@ -3134,34 +1919,16 @@ theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Finset β}
simp_rw [val_to_finset]
#align finset.mem_sup Finset.mem_sup
-/- warning: finset.sup_eq_bUnion -> Finset.sup_eq_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : α -> (Finset.{u2} β)), Eq.{succ u2} (Finset.{u2} β) (Finset.sup.{u2, u1} (Finset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.orderBot.{u2} β) s t) (Finset.biUnion.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] (s : Finset.{u2} α) (t : α -> (Finset.{u1} β)), Eq.{succ u1} (Finset.{u1} β) (Finset.sup.{u1, u2} (Finset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} β) s t) (Finset.biUnion.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s t)
-Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bUnion Finset.sup_eq_biUnionₓ'. -/
theorem sup_eq_biUnion {α β} [DecidableEq β] (s : Finset α) (t : α → Finset β) :
s.sup t = s.biUnion t := by ext; rw [mem_sup, mem_bUnion]
#align finset.sup_eq_bUnion Finset.sup_eq_biUnion
-/- warning: finset.sup_singleton'' -> Finset.sup_singleton'' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (Finset.{u1} α) (Finset.sup.{u1, u2} (Finset.{u1} α) β (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b))) (Finset.orderBot.{u1} α) s (fun (b : β) => Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (f b))) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) f s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} (Finset.{u2} α) (Finset.sup.{u2, u1} (Finset.{u2} α) β (Lattice.toSemilatticeSup.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) s (fun (b : β) => Singleton.singleton.{u2, u2} α (Finset.{u2} α) (Finset.instSingletonFinset.{u2} α) (f b))) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_1 a b) f s)
-Case conversion may be inaccurate. Consider using '#align finset.sup_singleton'' Finset.sup_singleton''ₓ'. -/
@[simp]
theorem sup_singleton'' [DecidableEq α] (s : Finset β) (f : β → α) :
(s.sup fun b => {f b}) = s.image f := by ext a; rw [mem_sup, mem_image];
simp only [mem_singleton, eq_comm]
#align finset.sup_singleton'' Finset.sup_singleton''
-/- warning: finset.sup_singleton' -> Finset.sup_singleton' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.sup.{u1, u1} (Finset.{u1} α) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b))) (Finset.orderBot.{u1} α) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α))) s
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.sup.{u1, u1} (Finset.{u1} α) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))) s
-Case conversion may be inaccurate. Consider using '#align finset.sup_singleton' Finset.sup_singleton'ₓ'. -/
@[simp]
theorem sup_singleton' [DecidableEq α] (s : Finset α) : s.sup singleton = s :=
(s.sup_singleton'' _).trans image_id
@@ -3173,12 +1940,6 @@ section Lattice
variable {ι' : Sort _} [CompleteLattice α]
-/- warning: supr_eq_supr_finset -> iSup_eq_iSup_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι -> α), Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι (fun (i : ι) => s i)) (iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι -> α), Eq.{succ u2} α (iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι (fun (i : ι) => s i)) (iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι (fun (i : ι) => iSup.{u2, 0} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align supr_eq_supr_finset iSup_eq_iSup_finsetₓ'. -/
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `supr_eq_supr_finset'` for a version
that works for `ι : Sort*`. -/
@@ -3189,12 +1950,6 @@ theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι,
(iSup_le fun t => iSup_le fun b => iSup_le fun hb => le_iSup _ _)
#align supr_eq_supr_finset iSup_eq_iSup_finset
-/- warning: supr_eq_supr_finset' -> iSup_eq_iSup_finset' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι' -> α), Eq.{succ u1} α (iSup.{u1, u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι' (fun (i : ι') => s i)) (iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => iSup.{u1, 0} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι' -> α), Eq.{succ u2} α (iSup.{u2, u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι' (fun (i : ι') => s i)) (iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => iSup.{u2, 0} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align supr_eq_supr_finset' iSup_eq_iSup_finset'ₓ'. -/
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `supr_eq_supr_finset` for a version
that assumes `ι : Type*` but has no `plift`s. -/
@@ -3203,12 +1958,6 @@ theorem iSup_eq_iSup_finset' (s : ι' → α) :
rw [← iSup_eq_iSup_finset, ← equiv.plift.surjective.supr_comp] <;> rfl
#align supr_eq_supr_finset' iSup_eq_iSup_finset'
-/- warning: infi_eq_infi_finset -> iInf_eq_iInf_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι -> α), Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι (fun (i : ι) => s i)) (iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι -> α), Eq.{succ u2} α (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (i : ι) => s i)) (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (i : ι) => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align infi_eq_infi_finset iInf_eq_iInf_finsetₓ'. -/
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : finset ι` of infima
`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `infi_eq_infi_finset'` for a version
that works for `ι : Sort*`. -/
@@ -3216,12 +1965,6 @@ theorem iInf_eq_iInf_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι)
@iSup_eq_iSup_finset αᵒᵈ _ _ _
#align infi_eq_infi_finset iInf_eq_iInf_finset
-/- warning: infi_eq_infi_finset' -> iInf_eq_iInf_finset' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι' -> α), Eq.{succ u1} α (iInf.{u1, u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι' (fun (i : ι') => s i)) (iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => iInf.{u1, 0} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι' -> α), Eq.{succ u2} α (iInf.{u2, u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι' (fun (i : ι') => s i)) (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align infi_eq_infi_finset' iInf_eq_iInf_finset'ₓ'. -/
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : finset ι` of infima
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `infi_eq_infi_finset` for a version
that assumes `ι : Type*` but has no `plift`s. -/
@@ -3236,12 +1979,6 @@ namespace Set
variable {ι' : Sort _}
-/- warning: set.Union_eq_Union_finset -> Set.iUnion_eq_iUnion_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => s i)) (Set.iUnion.{u1, succ u2} α (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} (s : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => s i)) (Set.iUnion.{u2, succ u1} α (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finsetₓ'. -/
/-- Union of an indexed family of sets `s : ι → set α` is equal to the union of the unions
of finite subfamilies. This version assumes `ι : Type*`. See also `Union_eq_Union_finset'` for
a version that works for `ι : Sort*`. -/
@@ -3249,12 +1986,6 @@ theorem iUnion_eq_iUnion_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Fin
iSup_eq_iSup_finset s
#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finset
-/- warning: set.Union_eq_Union_finset' -> Set.iUnion_eq_iUnion_finset' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} (s : ι' -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, u2} α ι' (fun (i : ι') => s i)) (Set.iUnion.{u1, succ u2} α (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => Set.iUnion.{u1, succ u2} α (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} (s : ι' -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iUnion.{u2, u1} α ι' (fun (i : ι') => s i)) (Set.iUnion.{u2, succ u1} α (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => Set.iUnion.{u2, succ u1} α (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'ₓ'. -/
/-- Union of an indexed family of sets `s : ι → set α` is equal to the union of the unions
of finite subfamilies. This version works for `ι : Sort*`. See also `Union_eq_Union_finset` for
a version that assumes `ι : Type*` but avoids `plift`s in the right hand side. -/
@@ -3263,12 +1994,6 @@ theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
iSup_eq_iSup_finset' s
#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'
-/- warning: set.Inter_eq_Inter_finset -> Set.iInter_eq_iInter_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι (fun (i : ι) => s i)) (Set.iInter.{u1, succ u2} α (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} (s : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iInter.{u2, succ u1} α ι (fun (i : ι) => s i)) (Set.iInter.{u2, succ u1} α (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => Set.iInter.{u2, succ u1} α ι (fun (i : ι) => Set.iInter.{u2, 0} α (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finsetₓ'. -/
/-- Intersection of an indexed family of sets `s : ι → set α` is equal to the intersection of the
intersections of finite subfamilies. This version assumes `ι : Type*`. See also
`Inter_eq_Inter_finset'` for a version that works for `ι : Sort*`. -/
@@ -3276,12 +2001,6 @@ theorem iInter_eq_iInter_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Fin
iInf_eq_iInf_finset s
#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finset
-/- warning: set.Inter_eq_Inter_finset' -> Set.iInter_eq_iInter_finset' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} (s : ι' -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, u2} α ι' (fun (i : ι') => s i)) (Set.iInter.{u1, succ u2} α (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => Set.iInter.{u1, succ u2} α (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} (s : ι' -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iInter.{u2, u1} α ι' (fun (i : ι') => s i)) (Set.iInter.{u2, succ u1} α (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => Set.iInter.{u2, succ u1} α (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => Set.iInter.{u2, 0} α (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_eq_Inter_finset' Set.iInter_eq_iInter_finset'ₓ'. -/
/-- Intersection of an indexed family of sets `s : ι → set α` is equal to the intersection of the
intersections of finite subfamilies. This version works for `ι : Sort*`. See also
`Inter_eq_Inter_finset` for a version that assumes `ι : Type*` but avoids `plift`s in the right
@@ -3298,12 +2017,6 @@ namespace Finset
/-! ### Interaction with ordered algebra structures -/
-/- warning: finset.sup_mul_le_mul_sup_of_nonneg -> Finset.sup_mul_le_mul_sup_of_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s b)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s a) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s b)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_mul_le_mul_sup_of_nonneg Finset.sup_mul_le_mul_sup_of_nonnegₓ'. -/
theorem sup_mul_le_mul_sup_of_nonneg [LinearOrderedSemiring α] [OrderBot α] {a b : ι → α}
(s : Finset ι) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.sup (a * b) ≤ s.sup a * s.sup b :=
@@ -3311,24 +2024,12 @@ theorem sup_mul_le_mul_sup_of_nonneg [LinearOrderedSemiring α] [OrderBot α] {a
mul_le_mul (le_sup hi) (le_sup hi) (hb _ hi) ((ha _ hi).trans <| le_sup hi)
#align finset.sup_mul_le_mul_sup_of_nonneg Finset.sup_mul_le_mul_sup_of_nonneg
-/- warning: finset.mul_inf_le_inf_mul_of_nonneg -> Finset.mul_inf_le_inf_mul_of_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s b)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s a) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s b)) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)))
-Case conversion may be inaccurate. Consider using '#align finset.mul_inf_le_inf_mul_of_nonneg Finset.mul_inf_le_inf_mul_of_nonnegₓ'. -/
theorem mul_inf_le_inf_mul_of_nonneg [LinearOrderedSemiring α] [OrderTop α] {a b : ι → α}
(s : Finset ι) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.inf a * s.inf b ≤ s.inf (a * b) :=
Finset.le_inf fun i hi => mul_le_mul (inf_le hi) (inf_le hi) (Finset.le_inf hb) (ha i hi)
#align finset.mul_inf_le_inf_mul_of_nonneg Finset.mul_inf_le_inf_mul_of_nonneg
-/- warning: finset.sup'_mul_le_mul_sup'_of_nonneg -> Finset.sup'_mul_le_mul_sup'_of_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι s), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H a) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H b)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι s), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H a) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H b)))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_mul_le_mul_sup'_of_nonneg Finset.sup'_mul_le_mul_sup'_of_nonnegₓ'. -/
theorem sup'_mul_le_mul_sup'_of_nonneg [LinearOrderedSemiring α] {a b : ι → α} (s : Finset ι)
(H : s.Nonempty) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.sup' H (a * b) ≤ s.sup' H a * s.sup' H b :=
@@ -3336,12 +2037,6 @@ theorem sup'_mul_le_mul_sup'_of_nonneg [LinearOrderedSemiring α] {a b : ι →
mul_le_mul (le_sup' _ hi) (le_sup' _ hi) (hb _ hi) ((ha _ hi).trans <| le_sup' _ hi)
#align finset.sup'_mul_le_mul_sup'_of_nonneg Finset.sup'_mul_le_mul_sup'_of_nonneg
-/- warning: finset.inf'_mul_le_mul_inf'_of_nonneg -> Finset.inf'_mul_le_mul_inf'_of_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι s), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H a) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H b)) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι s), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H a) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H b)) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_mul_le_mul_inf'_of_nonneg Finset.inf'_mul_le_mul_inf'_of_nonnegₓ'. -/
theorem inf'_mul_le_mul_inf'_of_nonneg [LinearOrderedSemiring α] {a b : ι → α} (s : Finset ι)
(H : s.Nonempty) (ha : ∀ i ∈ s, 0 ≤ a i) (hb : ∀ i ∈ s, 0 ≤ b i) :
s.inf' H a * s.inf' H b ≤ s.inf' H (a * b) :=
@@ -3369,115 +2064,49 @@ theorem iInf_coe [InfSet β] (f : α → β) (s : Finset α) : (⨅ x ∈ (↑s
variable [CompleteLattice β]
-/- warning: finset.supr_singleton -> Finset.iSup_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) => s x))) (s a)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (x : α) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) => s x))) (s a)
-Case conversion may be inaccurate. Consider using '#align finset.supr_singleton Finset.iSup_singletonₓ'. -/
theorem iSup_singleton (a : α) (s : α → β) : (⨆ x ∈ ({a} : Finset α), s x) = s a := by simp
#align finset.supr_singleton Finset.iSup_singleton
-/- warning: finset.infi_singleton -> Finset.iInf_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) => s x))) (s a)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (x : α) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) => s x))) (s a)
-Case conversion may be inaccurate. Consider using '#align finset.infi_singleton Finset.iInf_singletonₓ'. -/
theorem iInf_singleton (a : α) (s : α → β) : (⨅ x ∈ ({a} : Finset α), s x) = s a := by simp
#align finset.infi_singleton Finset.iInf_singleton
-/- warning: finset.supr_option_to_finset -> Finset.iSup_option_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (o : Option.{u1} α) (f : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] (o : Option.{u2} α) (f : α -> β), Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.supr_option_to_finset Finset.iSup_option_toFinsetₓ'. -/
theorem iSup_option_toFinset (o : Option α) (f : α → β) : (⨆ x ∈ o.toFinset, f x) = ⨆ x ∈ o, f x :=
by simp
#align finset.supr_option_to_finset Finset.iSup_option_toFinset
-/- warning: finset.infi_option_to_finset -> Finset.iInf_option_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (o : Option.{u1} α) (f : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] (o : Option.{u2} α) (f : α -> β), Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.infi_option_to_finset Finset.iInf_option_toFinsetₓ'. -/
theorem iInf_option_toFinset (o : Option α) (f : α → β) : (⨅ x ∈ o.toFinset, f x) = ⨅ x ∈ o, f x :=
@iSup_option_toFinset _ βᵒᵈ _ _ _
#align finset.infi_option_to_finset Finset.iInf_option_toFinset
variable [DecidableEq α]
-/- warning: finset.supr_union -> Finset.iSup_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_union Finset.iSup_unionₓ'. -/
theorem iSup_union {f : α → β} {s t : Finset α} :
(⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [iSup_or, iSup_sup_eq]
#align finset.supr_union Finset.iSup_union
-/- warning: finset.infi_union -> Finset.iInf_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_union Finset.iInf_unionₓ'. -/
theorem iInf_union {f : α → β} {s t : Finset α} :
(⨅ x ∈ s ∪ t, f x) = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
@iSup_union α βᵒᵈ _ _ _ _ _
#align finset.infi_union Finset.iInf_union
-/- warning: finset.supr_insert -> Finset.iSup_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (t a) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_insert Finset.iSup_insertₓ'. -/
theorem iSup_insert (a : α) (s : Finset α) (t : α → β) :
(⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x := by rw [insert_eq];
simp only [iSup_union, Finset.iSup_singleton]
#align finset.supr_insert Finset.iSup_insert
-/- warning: finset.infi_insert -> Finset.iInf_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (t a) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_insert Finset.iInf_insertₓ'. -/
theorem iInf_insert (a : α) (s : Finset α) (t : α → β) :
(⨅ x ∈ insert a s, t x) = t a ⊓ ⨅ x ∈ s, t x :=
@iSup_insert α βᵒᵈ _ _ _ _ _
#align finset.infi_insert Finset.iInf_insert
-/- warning: finset.supr_finset_image -> Finset.iSup_finset_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iSup.{u2, succ u3} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) γ (fun (y : γ) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (x : α) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iSup.{u2, succ u3} β (CompleteLattice.toSupSet.{u2} β _inst_1) γ (fun (y : γ) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_finset_image Finset.iSup_finset_imageₓ'. -/
theorem iSup_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
(⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← supr_coe, coe_image, iSup_image, supr_coe]
#align finset.supr_finset_image Finset.iSup_finset_image
-/- warning: finset.infi_finset_image -> Finset.iInf_finset_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iInf.{u2, succ u3} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) γ (fun (y : γ) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (x : α) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iInf.{u2, succ u3} β (CompleteLattice.toInfSet.{u2} β _inst_1) γ (fun (y : γ) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_finset_image Finset.iInf_finset_imageₓ'. -/
theorem iInf_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
(⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← infi_coe, coe_image, iInf_image, infi_coe]
#align finset.infi_finset_image Finset.iInf_finset_image
-/- warning: finset.supr_insert_update -> Finset.iSup_insert_update is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) s (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_insert_update Finset.iSup_insert_updateₓ'. -/
theorem iSup_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i :=
by
@@ -3485,33 +2114,15 @@ theorem iSup_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx
rcongr (i hi); apply update_noteq; rintro rfl; exact hx hi
#align finset.supr_insert_update Finset.iSup_insert_update
-/- warning: finset.infi_insert_update -> Finset.iInf_insert_update is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) s (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_insert_update Finset.iInf_insert_updateₓ'. -/
theorem iInf_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨅ i ∈ insert x t, update f x s i) = s ⊓ ⨅ i ∈ t, f i :=
@iSup_insert_update α βᵒᵈ _ _ _ _ f _ hx
#align finset.infi_insert_update Finset.iInf_insert_update
-/- warning: finset.supr_bUnion -> Finset.iSup_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (y : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iSup.{u2, succ u3} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) γ (fun (x : γ) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (y : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> β), Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (y : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iSup.{u1, succ u3} β (CompleteLattice.toSupSet.{u1} β _inst_1) γ (fun (x : γ) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (y : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_bUnion Finset.iSup_biUnionₓ'. -/
theorem iSup_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
(⨆ y ∈ s.biUnion t, f y) = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@iSup_comm _ α, iSup_and]
#align finset.supr_bUnion Finset.iSup_biUnion
-/- warning: finset.infi_bUnion -> Finset.iInf_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (y : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iInf.{u2, succ u3} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) γ (fun (x : γ) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (y : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> β), Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (y : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iInf.{u1, succ u3} β (CompleteLattice.toInfSet.{u1} β _inst_1) γ (fun (x : γ) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (y : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_bUnion Finset.iInf_biUnionₓ'. -/
theorem iInf_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
(⨅ y ∈ s.biUnion t, f y) = ⨅ (x ∈ s) (y ∈ t x), f y :=
@iSup_biUnion _ βᵒᵈ _ _ _ _ _ _
@@ -3519,22 +2130,10 @@ theorem iInf_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
end Lattice
-/- warning: finset.set_bUnion_coe -> Finset.set_biUnion_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) => t x))) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) (fun (H : Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) => t x))) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_coe Finset.set_biUnion_coeₓ'. -/
theorem set_biUnion_coe (s : Finset α) (t : α → Set β) : (⋃ x ∈ (↑s : Set α), t x) = ⋃ x ∈ s, t x :=
rfl
#align finset.set_bUnion_coe Finset.set_biUnion_coe
-/- warning: finset.set_bInter_coe -> Finset.set_biInter_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) => t x))) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) (fun (H : Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) => t x))) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_coe Finset.set_biInter_coeₓ'. -/
theorem set_biInter_coe (s : Finset α) (t : α → Set β) : (⋂ x ∈ (↑s : Set α), t x) = ⋂ x ∈ s, t x :=
rfl
#align finset.set_bInter_coe Finset.set_biInter_coe
@@ -3559,34 +2158,16 @@ theorem set_biUnion_preimage_singleton (f : α → β) (s : Finset β) :
#align finset.set_bUnion_preimage_singleton Finset.set_biUnion_preimage_singleton
-/
-/- warning: finset.set_bUnion_option_to_finset -> Finset.set_biUnion_option_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (o : Option.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (o : Option.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_option_to_finset Finset.set_biUnion_option_toFinsetₓ'. -/
theorem set_biUnion_option_toFinset (o : Option α) (f : α → Set β) :
(⋃ x ∈ o.toFinset, f x) = ⋃ x ∈ o, f x :=
iSup_option_toFinset o f
#align finset.set_bUnion_option_to_finset Finset.set_biUnion_option_toFinset
-/- warning: finset.set_bInter_option_to_finset -> Finset.set_biInter_option_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (o : Option.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (o : Option.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_option_to_finset Finset.set_biInter_option_toFinsetₓ'. -/
theorem set_biInter_option_toFinset (o : Option α) (f : α → Set β) :
(⋂ x ∈ o.toFinset, f x) = ⋂ x ∈ o, f x :=
iInf_option_toFinset o f
#align finset.set_bInter_option_to_finset Finset.set_biInter_option_toFinset
-/- warning: finset.subset_set_bUnion_of_mem -> Finset.subset_set_biUnion_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {s : Finset.{u1} α} {f : α -> (Set.{u2} β)} {x : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (f x) (Set.iUnion.{u2, succ u1} β α (fun (y : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => f y))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {s : Finset.{u2} α} {f : α -> (Set.{u1} β)} {x : α}, (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) -> (HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (f x) (Set.iUnion.{u1, succ u2} β α (fun (y : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y s) => f y))))
-Case conversion may be inaccurate. Consider using '#align finset.subset_set_bUnion_of_mem Finset.subset_set_biUnion_of_memₓ'. -/
theorem subset_set_biUnion_of_mem {s : Finset α} {f : α → Set β} {x : α} (h : x ∈ s) :
f x ⊆ ⋃ y ∈ s, f y :=
show f x ≤ ⨆ y ∈ s, f y from le_iSup_of_le x <| le_iSup _ h
@@ -3594,111 +2175,51 @@ theorem subset_set_biUnion_of_mem {s : Finset α} {f : α → Set β} {x : α} (
variable [DecidableEq α]
-/- warning: finset.set_bUnion_union -> Finset.set_biUnion_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => u x))) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => u x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u2} α) (t : Finset.{u2} α) (u : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => u x))) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => u x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_union Finset.set_biUnion_unionₓ'. -/
theorem set_biUnion_union (s t : Finset α) (u : α → Set β) :
(⋃ x ∈ s ∪ t, u x) = (⋃ x ∈ s, u x) ∪ ⋃ x ∈ t, u x :=
iSup_union
#align finset.set_bUnion_union Finset.set_biUnion_union
-/- warning: finset.set_bInter_inter -> Finset.set_biInter_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => u x))) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => u x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u2} α) (t : Finset.{u2} α) (u : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => u x))) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => u x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_inter Finset.set_biInter_interₓ'. -/
theorem set_biInter_inter (s t : Finset α) (u : α → Set β) :
(⋂ x ∈ s ∪ t, u x) = (⋂ x ∈ s, u x) ∩ ⋂ x ∈ t, u x :=
iInf_union
#align finset.set_bInter_inter Finset.set_biInter_inter
-/- warning: finset.set_bUnion_insert -> Finset.set_biUnion_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) (t a) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) (t a) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_insert Finset.set_biUnion_insertₓ'. -/
theorem set_biUnion_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋃ x ∈ insert a s, t x) = t a ∪ ⋃ x ∈ s, t x :=
iSup_insert a s t
#align finset.set_bUnion_insert Finset.set_biUnion_insert
-/- warning: finset.set_bInter_insert -> Finset.set_biInter_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (t a) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (t a) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_insert Finset.set_biInter_insertₓ'. -/
theorem set_biInter_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋂ x ∈ insert a s, t x) = t a ∩ ⋂ x ∈ s, t x :=
iInf_insert a s t
#align finset.set_bInter_insert Finset.set_biInter_insert
-/- warning: finset.set_bUnion_finset_image -> Finset.set_biUnion_finset_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u2} β)} {s : Finset.{u3} γ}, Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iUnion.{u2, succ u3} β γ (fun (y : γ) => Set.iUnion.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u3} β)} {s : Finset.{u2} γ}, Eq.{succ u3} (Set.{u3} β) (Set.iUnion.{u3, succ u1} β α (fun (x : α) => Set.iUnion.{u3, 0} β (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iUnion.{u3, succ u2} β γ (fun (y : γ) => Set.iUnion.{u3, 0} β (Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) (fun (H : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_finset_image Finset.set_biUnion_finset_imageₓ'. -/
theorem set_biUnion_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋃ x ∈ s.image f, g x) = ⋃ y ∈ s, g (f y) :=
iSup_finset_image
#align finset.set_bUnion_finset_image Finset.set_biUnion_finset_image
-/- warning: finset.set_bInter_finset_image -> Finset.set_biInter_finset_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u2} β)} {s : Finset.{u3} γ}, Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iInter.{u2, succ u3} β γ (fun (y : γ) => Set.iInter.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u3} β)} {s : Finset.{u2} γ}, Eq.{succ u3} (Set.{u3} β) (Set.iInter.{u3, succ u1} β α (fun (x : α) => Set.iInter.{u3, 0} β (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iInter.{u3, succ u2} β γ (fun (y : γ) => Set.iInter.{u3, 0} β (Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) (fun (H : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_finset_image Finset.set_biInter_finset_imageₓ'. -/
theorem set_biInter_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋂ x ∈ s.image f, g x) = ⋂ y ∈ s, g (f y) :=
iInf_finset_image
#align finset.set_bInter_finset_image Finset.set_biInter_finset_image
-/- warning: finset.set_bUnion_insert_update -> Finset.set_biUnion_insert_update is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> (Set.{u2} β)) {s : Set.{u2} β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (i : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => Set.{u2} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) s (Set.iUnion.{u2, succ u1} β α (fun (i : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> (Set.{u1} β)) {s : Set.{u1} β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (i : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => Set.{u1} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) s (Set.iUnion.{u1, succ u2} β α (fun (i : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_insert_update Finset.set_biUnion_insert_updateₓ'. -/
theorem set_biUnion_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋃ i ∈ insert x t, @update _ _ _ f x s i) = s ∪ ⋃ i ∈ t, f i :=
iSup_insert_update f hx
#align finset.set_bUnion_insert_update Finset.set_biUnion_insert_update
-/- warning: finset.set_bInter_insert_update -> Finset.set_biInter_insert_update is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> (Set.{u2} β)) {s : Set.{u2} β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (i : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => Set.{u2} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) s (Set.iInter.{u2, succ u1} β α (fun (i : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> (Set.{u1} β)) {s : Set.{u1} β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (i : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => Set.{u1} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) s (Set.iInter.{u1, succ u2} β α (fun (i : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_insert_update Finset.set_biInter_insert_updateₓ'. -/
theorem set_biInter_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋂ i ∈ insert x t, @update _ _ _ f x s i) = s ∩ ⋂ i ∈ t, f i :=
iInf_insert_update f hx
#align finset.set_bInter_insert_update Finset.set_biInter_insert_update
-/- warning: finset.set_bUnion_bUnion -> Finset.set_biUnion_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (y : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iUnion.{u2, succ u3} β γ (fun (x : γ) => Set.iUnion.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => Set.iUnion.{u2, succ u1} β α (fun (y : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (y : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iUnion.{u1, succ u3} β γ (fun (x : γ) => Set.iUnion.{u1, 0} β (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => Set.iUnion.{u1, succ u2} β α (fun (y : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_bUnion Finset.set_biUnion_biUnionₓ'. -/
theorem set_biUnion_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
(⋃ y ∈ s.biUnion t, f y) = ⋃ (x ∈ s) (y ∈ t x), f y :=
iSup_biUnion s t f
#align finset.set_bUnion_bUnion Finset.set_biUnion_biUnion
-/- warning: finset.set_bInter_bUnion -> Finset.set_biInter_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (y : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iInter.{u2, succ u3} β γ (fun (x : γ) => Set.iInter.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => Set.iInter.{u2, succ u1} β α (fun (y : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (y : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iInter.{u1, succ u3} β γ (fun (x : γ) => Set.iInter.{u1, 0} β (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => Set.iInter.{u1, succ u2} β α (fun (y : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_bUnion Finset.set_biInter_biUnionₓ'. -/
theorem set_biInter_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
(⋂ y ∈ s.biUnion t, f y) = ⋂ (x ∈ s) (y ∈ t x), f y :=
iInf_biUnion s t f
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -474,9 +474,7 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
simpa only [forall_prop_of_true, and_true_iff, forall_prop_of_false, bot_le, not_false_iff,
sup_empty, forall_true_iff, not_mem_empty]
· intro a r har ih h
- have incs : ↑r ⊆ ↑(insert a r) := by
- rw [Finset.coe_subset]
- apply Finset.subset_insert
+ have incs : ↑r ⊆ ↑(insert a r) := by rw [Finset.coe_subset]; apply Finset.subset_insert
-- x ∈ s is above the sup of r
obtain ⟨x, ⟨hxs, hsx_sup⟩⟩ := ih fun x hx => h x <| incs hx
-- y ∈ s is above a
@@ -1018,9 +1016,7 @@ but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_rightₓ'. -/
theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
- s.sup f ⊓ a = s.sup fun i => f i ⊓ a :=
- by
- rw [_root_.inf_comm, s.sup_inf_distrib_left]
+ s.sup f ⊓ a = s.sup fun i => f i ⊓ a := by rw [_root_.inf_comm, s.sup_inf_distrib_left];
simp_rw [_root_.inf_comm]
#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_right
@@ -1478,9 +1474,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.sup'_cons Finset.sup'_consₓ'. -/
@[simp]
theorem sup'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
- (cons b s hb).sup' h f = f b ⊔ s.sup' H f :=
- by
- rw [← WithBot.coe_eq_coe]
+ (cons b s hb).sup' h f = f b ⊔ s.sup' H f := by rw [← WithBot.coe_eq_coe];
simp only [coe_sup', sup_cons, WithBot.coe_sup]
#align finset.sup'_cons Finset.sup'_cons
@@ -1492,9 +1486,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.sup'_insert Finset.sup'_insertₓ'. -/
@[simp]
theorem sup'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
- (insert b s).sup' h f = f b ⊔ s.sup' H f :=
- by
- rw [← WithBot.coe_eq_coe]
+ (insert b s).sup' h f = f b ⊔ s.sup' H f := by rw [← WithBot.coe_eq_coe];
simp only [coe_sup', sup_insert, WithBot.coe_sup]
#align finset.sup'_insert Finset.sup'_insert
@@ -1523,10 +1515,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) b h) f)
Case conversion may be inaccurate. Consider using '#align finset.le_sup' Finset.le_sup'ₓ'. -/
-theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f :=
- by
- rw [← WithBot.coe_le_coe, coe_sup']
- exact le_sup h
+theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f := by
+ rw [← WithBot.coe_le_coe, coe_sup']; exact le_sup h
#align finset.le_sup' Finset.le_sup'
/- warning: finset.le_sup'_of_le -> Finset.le_sup'_of_le is a dubious translation:
@@ -1549,9 +1539,7 @@ Case conversion may be inaccurate. Consider using '#align finset.sup'_const Fins
theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
by
apply le_antisymm
- · apply sup'_le
- intros
- exact le_rfl
+ · apply sup'_le; intros ; exact le_rfl
· apply le_sup' (fun b => a) H.some_spec
#align finset.sup'_const Finset.sup'_const
@@ -1594,8 +1582,7 @@ theorem comp_sup'_eq_sup'_comp [SemilatticeSup γ] {s : Finset β} (H : s.Nonemp
refine' comp_sup_eq_sup_comp g' _ rfl
intro f₁ f₂
induction f₁ using WithBot.recBotCoe
- · rw [bot_sup_eq]
- exact bot_sup_eq.symm
+ · rw [bot_sup_eq]; exact bot_sup_eq.symm
· induction f₂ using WithBot.recBotCoe
· rfl
· exact congr_arg coe (g_sup f₁ f₂)
@@ -1614,8 +1601,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
rw [coe_sup']
refine' sup_induction trivial _ hs
rintro (_ | a₁) h₁ a₂ h₂
- · rw [WithBot.none_eq_bot, bot_sup_eq]
- exact h₂
+ · rw [WithBot.none_eq_bot, bot_sup_eq]; exact h₂
cases a₂
exacts[h₁, hp a₁ h₁ a₂ h₂]
#align finset.sup'_induction Finset.sup'_induction
@@ -2190,9 +2176,7 @@ theorem max_insert {a : α} {s : Finset α} : (insert a s).max = max a s.max :=
#print Finset.max_singleton /-
@[simp]
-theorem max_singleton {a : α} : Finset.max {a} = (a : WithBot α) :=
- by
- rw [← insert_emptyc_eq]
+theorem max_singleton {a : α} : Finset.max {a} = (a : WithBot α) := by rw [← insert_emptyc_eq];
exact max_insert
#align finset.max_singleton Finset.max_singleton
-/
@@ -2227,11 +2211,9 @@ theorem mem_of_max {s : Finset α} : ∀ {a : α}, s.max = a → a ∈ s :=
fun b s _ (ih : ∀ {a : α}, s.max = a → a ∈ s) a (h : (insert b s).max = a) =>
by
by_cases p : b = a
- · induction p
- exact mem_insert_self b s
+ · induction p; exact mem_insert_self b s
· cases' max_choice (↑b) s.max with q q <;> rw [max_insert, q] at h
- · cases h
- cases p rfl
+ · cases h; cases p rfl
· exact mem_insert_of_mem (ih h)
#align finset.mem_of_max Finset.mem_of_max
-/
@@ -2332,9 +2314,7 @@ theorem min_insert {a : α} {s : Finset α} : (insert a s).min = min (↑a) s.mi
#print Finset.min_singleton /-
@[simp]
-theorem min_singleton {a : α} : Finset.min {a} = (a : WithTop α) :=
- by
- rw [← insert_emptyc_eq]
+theorem min_singleton {a : α} : Finset.min {a} = (a : WithTop α) := by rw [← insert_emptyc_eq];
exact min_insert
#align finset.min_singleton Finset.min_singleton
-/
@@ -2612,70 +2592,50 @@ theorem min'_lt_max'_of_card (h₂ : 1 < card s) :
#align finset.min'_lt_max'_of_card Finset.min'_lt_max'_of_card
#print Finset.map_ofDual_min /-
-theorem map_ofDual_min (s : Finset αᵒᵈ) : s.min.map ofDual = (s.image ofDual).max :=
- by
- rw [max_eq_sup_with_bot, sup_image]
- exact congr_fun Option.map_id _
+theorem map_ofDual_min (s : Finset αᵒᵈ) : s.min.map ofDual = (s.image ofDual).max := by
+ rw [max_eq_sup_with_bot, sup_image]; exact congr_fun Option.map_id _
#align finset.map_of_dual_min Finset.map_ofDual_min
-/
#print Finset.map_ofDual_max /-
-theorem map_ofDual_max (s : Finset αᵒᵈ) : s.max.map ofDual = (s.image ofDual).min :=
- by
- rw [min_eq_inf_with_top, inf_image]
- exact congr_fun Option.map_id _
+theorem map_ofDual_max (s : Finset αᵒᵈ) : s.max.map ofDual = (s.image ofDual).min := by
+ rw [min_eq_inf_with_top, inf_image]; exact congr_fun Option.map_id _
#align finset.map_of_dual_max Finset.map_ofDual_max
-/
#print Finset.map_toDual_min /-
-theorem map_toDual_min (s : Finset α) : s.min.map toDual = (s.image toDual).max :=
- by
- rw [max_eq_sup_with_bot, sup_image]
- exact congr_fun Option.map_id _
+theorem map_toDual_min (s : Finset α) : s.min.map toDual = (s.image toDual).max := by
+ rw [max_eq_sup_with_bot, sup_image]; exact congr_fun Option.map_id _
#align finset.map_to_dual_min Finset.map_toDual_min
-/
#print Finset.map_toDual_max /-
-theorem map_toDual_max (s : Finset α) : s.max.map toDual = (s.image toDual).min :=
- by
- rw [min_eq_inf_with_top, inf_image]
- exact congr_fun Option.map_id _
+theorem map_toDual_max (s : Finset α) : s.max.map toDual = (s.image toDual).min := by
+ rw [min_eq_inf_with_top, inf_image]; exact congr_fun Option.map_id _
#align finset.map_to_dual_max Finset.map_toDual_max
-/
#print Finset.ofDual_min' /-
theorem ofDual_min' {s : Finset αᵒᵈ} (hs : s.Nonempty) :
- ofDual (min' s hs) = max' (s.image ofDual) (hs.image _) :=
- by
- convert rfl
- exact image_id
+ ofDual (min' s hs) = max' (s.image ofDual) (hs.image _) := by convert rfl; exact image_id
#align finset.of_dual_min' Finset.ofDual_min'
-/
#print Finset.ofDual_max' /-
theorem ofDual_max' {s : Finset αᵒᵈ} (hs : s.Nonempty) :
- ofDual (max' s hs) = min' (s.image ofDual) (hs.image _) :=
- by
- convert rfl
- exact image_id
+ ofDual (max' s hs) = min' (s.image ofDual) (hs.image _) := by convert rfl; exact image_id
#align finset.of_dual_max' Finset.ofDual_max'
-/
#print Finset.toDual_min' /-
theorem toDual_min' {s : Finset α} (hs : s.Nonempty) :
- toDual (min' s hs) = max' (s.image toDual) (hs.image _) :=
- by
- convert rfl
- exact image_id
+ toDual (min' s hs) = max' (s.image toDual) (hs.image _) := by convert rfl; exact image_id
#align finset.to_dual_min' Finset.toDual_min'
-/
#print Finset.toDual_max' /-
theorem toDual_max' {s : Finset α} (hs : s.Nonempty) :
- toDual (max' s hs) = min' (s.image toDual) (hs.image _) :=
- by
- convert rfl
- exact image_id
+ toDual (max' s hs) = min' (s.image toDual) (hs.image _) := by convert rfl; exact image_id
#align finset.to_dual_max' Finset.toDual_max'
-/
@@ -2709,8 +2669,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.max'_insert Finset.max'_insertₓ'. -/
theorem max'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(insert a s).max' (s.insert_nonempty a) = max (s.max' H) a :=
- (isGreatest_max' _ _).unique <| by
- rw [coe_insert, max_comm]
+ (isGreatest_max' _ _).unique <| by rw [coe_insert, max_comm];
exact (is_greatest_max' _ _).insert _
#align finset.max'_insert Finset.max'_insert
@@ -2722,9 +2681,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.min'_insert Finset.min'_insertₓ'. -/
theorem min'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
(insert a s).min' (s.insert_nonempty a) = min (s.min' H) a :=
- (isLeast_min' _ _).unique <| by
- rw [coe_insert, min_comm]
- exact (is_least_min' _ _).insert _
+ (isLeast_min' _ _).unique <| by rw [coe_insert, min_comm]; exact (is_least_min' _ _).insert _
#align finset.min'_insert Finset.min'_insert
/- warning: finset.lt_max'_of_mem_erase_max' -> Finset.lt_max'_of_mem_erase_max' is a dubious translation:
@@ -3073,9 +3030,7 @@ theorem is_glb_iff_is_least [LinearOrder α] (i : α) (s : Finset α) (hs : s.No
IsGLB (s : Set α) i ↔ IsLeast (↑s) i :=
by
refine' ⟨fun his => _, IsLeast.isGLB⟩
- suffices i = min' s hs by
- rw [this]
- exact is_least_min' s hs
+ suffices i = min' s hs by rw [this]; exact is_least_min' s hs
rw [IsGLB, IsGreatest, mem_lowerBounds, mem_upperBounds] at his
exact le_antisymm (his.1 (Finset.min' s hs) (Finset.min'_mem s hs)) (his.2 _ (Finset.min'_le s))
#align finset.is_glb_iff_is_least Finset.is_glb_iff_is_least
@@ -3090,9 +3045,7 @@ theorem is_lub_iff_is_greatest [LinearOrder α] (i : α) (s : Finset α) (hs : s
#print Finset.is_glb_mem /-
theorem is_glb_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsGLB (s : Set α) i)
- (hs : s.Nonempty) : i ∈ s := by
- rw [← mem_coe]
- exact ((is_glb_iff_is_least i s hs).mp his).1
+ (hs : s.Nonempty) : i ∈ s := by rw [← mem_coe]; exact ((is_glb_iff_is_least i s hs).mp his).1
#align finset.is_glb_mem Finset.is_glb_mem
-/
@@ -3188,9 +3141,7 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] (s : Finset.{u2} α) (t : α -> (Finset.{u1} β)), Eq.{succ u1} (Finset.{u1} β) (Finset.sup.{u1, u2} (Finset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} β) s t) (Finset.biUnion.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s t)
Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bUnion Finset.sup_eq_biUnionₓ'. -/
theorem sup_eq_biUnion {α β} [DecidableEq β] (s : Finset α) (t : α → Finset β) :
- s.sup t = s.biUnion t := by
- ext
- rw [mem_sup, mem_bUnion]
+ s.sup t = s.biUnion t := by ext; rw [mem_sup, mem_bUnion]
#align finset.sup_eq_bUnion Finset.sup_eq_biUnion
/- warning: finset.sup_singleton'' -> Finset.sup_singleton'' is a dubious translation:
@@ -3201,9 +3152,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.sup_singleton'' Finset.sup_singleton''ₓ'. -/
@[simp]
theorem sup_singleton'' [DecidableEq α] (s : Finset β) (f : β → α) :
- (s.sup fun b => {f b}) = s.image f := by
- ext a
- rw [mem_sup, mem_image]
+ (s.sup fun b => {f b}) = s.image f := by ext a; rw [mem_sup, mem_image];
simp only [mem_singleton, eq_comm]
#align finset.sup_singleton'' Finset.sup_singleton''
@@ -3488,9 +3437,7 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (t a) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
Case conversion may be inaccurate. Consider using '#align finset.supr_insert Finset.iSup_insertₓ'. -/
theorem iSup_insert (a : α) (s : Finset α) (t : α → β) :
- (⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x :=
- by
- rw [insert_eq]
+ (⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x := by rw [insert_eq];
simp only [iSup_union, Finset.iSup_singleton]
#align finset.supr_insert Finset.iSup_insert
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -1125,10 +1125,7 @@ section BoundedOrder
variable [BoundedOrder α] [DecidableEq ι]
/- warning: finset.inf_sup -> Finset.inf_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.sup.{u1, u3} α (κ i) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.sup.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.inf.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (g ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (Subtype.prop.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.sup.{u1, u3} α (κ i) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.sup.{u1, max u2 u3} α (forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u3, u2} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) => Finset.inf.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i)))))
+<too large>
Case conversion may be inaccurate. Consider using '#align finset.inf_sup Finset.inf_supₓ'. -/
--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
@@ -1917,10 +1914,7 @@ section Sup
variable {C : β → Type _} [∀ b : β, SemilatticeSup (C b)] [∀ b : β, OrderBot (C b)]
/- warning: finset.sup_apply -> Finset.sup_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeSup.{u3} (C b)] [_inst_2 : forall (b : β), OrderBot.{u3} (C b) (Preorder.toHasLe.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeSup.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u1} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.sup.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeSup.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderBot.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toHasLe.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => PartialOrder.mk.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) (SemilatticeSup.Le.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (SemilatticeSup.Lt.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (Pi.SemilatticeSup._proof_1.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_2.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_3.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_4.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.sup.{u3, u1} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeSup.{u3} (C b)] [_inst_2 : forall (b : β), OrderBot.{u3} (C b) (Preorder.toLE.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeSup.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u2} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.sup.{max u1 u3, u2} (forall (b : β), C b) α (Pi.semilatticeSup.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderBot.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toLE.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => C i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => SemilatticeSup.toPartialOrder.{u3} ((fun (b : β) => C b) _x) ((fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.sup.{u3, u2} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
+<too large>
Case conversion may be inaccurate. Consider using '#align finset.sup_apply Finset.sup_applyₓ'. -/
@[simp]
protected theorem sup_apply (s : Finset α) (f : α → ∀ b : β, C b) (b : β) :
@@ -1935,10 +1929,7 @@ section Inf
variable {C : β → Type _} [∀ b : β, SemilatticeInf (C b)] [∀ b : β, OrderTop (C b)]
/- warning: finset.inf_apply -> Finset.inf_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeInf.{u3} (C b)] [_inst_2 : forall (b : β), OrderTop.{u3} (C b) (Preorder.toHasLe.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeInf.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u1} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.inf.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeInf.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderTop.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toHasLe.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => PartialOrder.mk.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) (SemilatticeInf.Le.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (SemilatticeInf.Lt.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (Pi.SemilatticeInf._proof_1.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_2.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_3.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_4.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.inf.{u3, u1} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeInf.{u3} (C b)] [_inst_2 : forall (b : β), OrderTop.{u3} (C b) (Preorder.toLE.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeInf.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u2} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.inf.{max u1 u3, u2} (forall (b : β), C b) α (Pi.semilatticeInf.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderTop.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toLE.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => C i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => SemilatticeInf.toPartialOrder.{u3} ((fun (b : β) => C b) _x) ((fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.inf.{u3, u2} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
+<too large>
Case conversion may be inaccurate. Consider using '#align finset.inf_apply Finset.inf_applyₓ'. -/
@[simp]
protected theorem inf_apply (s : Finset α) (f : α → ∀ b : β, C b) (b : β) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -945,7 +945,7 @@ end Inf
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_sup Finset.toDual_supₓ'. -/
@[simp]
theorem toDual_sup [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → α) :
@@ -957,7 +957,7 @@ theorem toDual_sup [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β →
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_inf Finset.toDual_infₓ'. -/
@[simp]
theorem toDual_inf [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → α) :
@@ -969,7 +969,7 @@ theorem toDual_inf [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β →
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_sup Finset.ofDual_supₓ'. -/
@[simp]
theorem ofDual_sup [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → αᵒᵈ) :
@@ -981,7 +981,7 @@ theorem ofDual_sup [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β →
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_inf Finset.ofDual_infₓ'. -/
@[simp]
theorem ofDual_inf [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → αᵒᵈ) :
@@ -1988,7 +1988,7 @@ end Inf'
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup'.{u1, u2} α ι _inst_1 s hs f)) (Finset.inf'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeInf.{u1} α _inst_1) s hs (Function.comp.{succ u2, succ u1, succ u1} ι α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_sup' Finset.toDual_sup'ₓ'. -/
@[simp]
theorem toDual_sup' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
@@ -2000,7 +2000,7 @@ theorem toDual_sup' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf'.{u1, u2} α ι _inst_1 s hs f)) (Finset.sup'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeSup.{u1} α _inst_1) s hs (Function.comp.{succ u2, succ u1, succ u1} ι α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_inf' Finset.toDual_inf'ₓ'. -/
@[simp]
theorem toDual_inf' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
@@ -2012,7 +2012,7 @@ theorem toDual_inf' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeSup.{u1} α _inst_1) s hs f)) (Finset.inf'.{u1, u2} α ι _inst_1 s hs (Function.comp.{succ u2, succ u1, succ u1} ι (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (Finset.inf'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (Finset.inf'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_sup' Finset.ofDual_sup'ₓ'. -/
@[simp]
theorem ofDual_sup' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
@@ -2024,7 +2024,7 @@ theorem ofDual_sup' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeInf.{u1} α _inst_1) s hs f)) (Finset.sup'.{u1, u2} α ι _inst_1 s hs (Function.comp.{succ u2, succ u1, succ u1} ι (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (Finset.sup'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (Finset.sup'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_inf' Finset.ofDual_inf'ₓ'. -/
@[simp]
theorem ofDual_inf' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -38,18 +38,22 @@ section Sup
-- TODO: define with just `[has_bot α]` where some lemmas hold without requiring `[order_bot α]`
variable [SemilatticeSup α] [OrderBot α]
-#print Finset.sup /-
+/- warning: finset.sup -> Finset.sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
+Case conversion may be inaccurate. Consider using '#align finset.sup Finset.supₓ'. -/
/-- Supremum of a finite set: `sup {a, b, c} f = f a ⊔ f b ⊔ f c` -/
def sup (s : Finset β) (f : β → α) : α :=
s.fold (· ⊔ ·) ⊥ f
#align finset.sup Finset.sup
--/
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
/- warning: finset.sup_def -> Finset.sup_def is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Multiset.sup.{u1} α _inst_1 _inst_2 (Multiset.map.{u2, u1} β α f (Finset.val.{u2} β s)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Multiset.sup.{u1} α _inst_1 _inst_2 (Multiset.map.{u2, u1} β α f (Finset.val.{u2} β s)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) (Multiset.sup.{u2} α _inst_1 _inst_2 (Multiset.map.{u1, u2} β α f (Finset.val.{u1} β s)))
Case conversion may be inaccurate. Consider using '#align finset.sup_def Finset.sup_defₓ'. -/
@@ -59,7 +63,7 @@ theorem sup_def : s.sup f = (s.1.map f).sup :=
/- warning: finset.sup_empty -> Finset.sup_empty is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β)) f) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β)) f) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {f : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β)) f) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))
Case conversion may be inaccurate. Consider using '#align finset.sup_empty Finset.sup_emptyₓ'. -/
@@ -70,7 +74,7 @@ theorem sup_empty : (∅ : Finset β).sup f = ⊥ :=
/- warning: finset.sup_cons -> Finset.sup_cons is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.sup_cons Finset.sup_consₓ'. -/
@@ -81,7 +85,7 @@ theorem sup_cons {b : β} (h : b ∉ s) : (cons b s h).sup f = f b ⊔ s.sup f :
/- warning: finset.sup_insert -> Finset.sup_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.sup_insert Finset.sup_insertₓ'. -/
@@ -92,7 +96,7 @@ theorem sup_insert [DecidableEq β] {b : β} : (insert b s : Finset β).sup f =
/- warning: finset.sup_image -> Finset.sup_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.image.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.image.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 (Finset.image.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 s (Function.comp.{succ u2, succ u3, succ u1} γ β α g f))
Case conversion may be inaccurate. Consider using '#align finset.sup_image Finset.sup_imageₓ'. -/
@@ -101,16 +105,20 @@ theorem sup_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β →
fold_image_idem
#align finset.sup_image Finset.sup_image
-#print Finset.sup_map /-
+/- warning: finset.sup_map -> Finset.sup_map is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (coeFn.{max 1 (succ u3) (succ u2), max (succ u3) (succ u2)} (Function.Embedding.{succ u3, succ u2} γ β) (fun (_x : Function.Embedding.{succ u3, succ u2} γ β) => γ -> β) (Function.Embedding.hasCoeToFun.{succ u3, succ u2} γ β) f)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ (fun (_x : γ) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : γ) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ β (Function.instEmbeddingLikeEmbedding.{succ u3, succ u2} γ β)) f)))
+Case conversion may be inaccurate. Consider using '#align finset.sup_map Finset.sup_mapₓ'. -/
@[simp]
theorem sup_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).sup g = s.sup (g ∘ f) :=
fold_map
#align finset.sup_map Finset.sup_map
--/
/- warning: finset.sup_singleton -> Finset.sup_singleton is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b) f) (f b)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b) f) (f b)
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) b) f) (f b)
Case conversion may be inaccurate. Consider using '#align finset.sup_singleton Finset.sup_singletonₓ'. -/
@@ -121,7 +129,7 @@ theorem sup_singleton {b : β} : ({b} : Finset β).sup f = f b :=
/- warning: finset.sup_union -> Finset.sup_union is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.instUnionFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
Case conversion may be inaccurate. Consider using '#align finset.sup_union Finset.sup_unionₓ'. -/
@@ -132,7 +140,7 @@ theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂
/- warning: finset.sup_sup -> Finset.sup_sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Sup.sup.{max u2 u1} (β -> α) (Pi.hasSup.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toHasSup.{u1} α _inst_1)) f g)) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Sup.sup.{max u2 u1} (β -> α) (Pi.hasSup.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toHasSup.{u1} α _inst_1)) f g)) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Sup.sup.{max u1 u2} (β -> α) (Pi.instSupForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toSup.{u2} α _inst_1)) f g)) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s g))
Case conversion may be inaccurate. Consider using '#align finset.sup_sup Finset.sup_supₓ'. -/
@@ -144,15 +152,19 @@ theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
exact sup_sup_sup_comm _ _ _ _
#align finset.sup_sup Finset.sup_sup
-#print Finset.sup_congr /-
+/- warning: finset.sup_congr -> Finset.sup_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ g))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ g))
+Case conversion may be inaccurate. Consider using '#align finset.sup_congr Finset.sup_congrₓ'. -/
theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.sup f = s₂.sup g :=
by subst hs <;> exact Finset.fold_congr hfg
#align finset.sup_congr Finset.sup_congr
--/
/- warning: map_finset_sup -> map_finset_sup is a dubious translation:
lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : SupBotHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.sup.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : SupBotHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.sup.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
but is expected to have type
forall {F : Type.{u3}} {α : Type.{u2}} {β : Type.{u4}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u4} β] [_inst_4 : OrderBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3)))] [_inst_5 : SupBotHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} ι) (g : ι -> α), Eq.{succ u4} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 s g)) (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) _x) (SupHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (SupBotHomClass.toSupHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u4, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u4} ι α β (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) _x) (SupHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (SupBotHomClass.toSupHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f) g))
Case conversion may be inaccurate. Consider using '#align map_finset_sup map_finset_supₓ'. -/
@@ -164,7 +176,7 @@ theorem map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β
/- warning: finset.sup_le_iff -> Finset.sup_le_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) a) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) a) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) a) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (f b) a))
Case conversion may be inaccurate. Consider using '#align finset.sup_le_iff Finset.sup_le_iffₓ'. -/
@@ -178,7 +190,7 @@ protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a
/- warning: finset.sup_le -> Finset.sup_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) a)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) a)
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (f b) a)) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) a)
Case conversion may be inaccurate. Consider using '#align finset.sup_le Finset.sup_leₓ'. -/
@@ -189,7 +201,7 @@ attribute [protected] sup_le
/- warning: finset.sup_const_le -> Finset.sup_const_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {a : α}, LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => a)) a
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {a : α}, LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => a)) a
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {a : α}, LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (fun (_x : β) => a)) a
Case conversion may be inaccurate. Consider using '#align finset.sup_const_le Finset.sup_const_leₓ'. -/
@@ -197,21 +209,29 @@ theorem sup_const_le : (s.sup fun _ => a) ≤ a :=
Finset.sup_le fun _ _ => le_rfl
#align finset.sup_const_le Finset.sup_const_le
-#print Finset.le_sup /-
+/- warning: finset.le_sup -> Finset.le_sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+Case conversion may be inaccurate. Consider using '#align finset.le_sup Finset.le_supₓ'. -/
theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
Finset.sup_le_iff.1 le_rfl _ hb
#align finset.le_sup Finset.le_sup
--/
-#print Finset.le_sup_of_le /-
+/- warning: finset.le_sup_of_le -> Finset.le_sup_of_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+Case conversion may be inaccurate. Consider using '#align finset.le_sup_of_le Finset.le_sup_of_leₓ'. -/
theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
h.trans <| le_sup hb
#align finset.le_sup_of_le Finset.le_sup_of_le
--/
/- warning: finset.sup_bUnion -> Finset.sup_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 (t x) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 (t x) f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 (t x) f))
Case conversion may be inaccurate. Consider using '#align finset.sup_bUnion Finset.sup_biUnionₓ'. -/
@@ -221,15 +241,19 @@ theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup_bUnion Finset.sup_biUnion
-#print Finset.sup_const /-
+/- warning: finset.sup_const -> Finset.sup_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
+Case conversion may be inaccurate. Consider using '#align finset.sup_const Finset.sup_constₓ'. -/
theorem sup_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.sup fun _ => c) = c :=
eq_of_forall_ge_iff fun b => Finset.sup_le_iff.trans h.forall_const
#align finset.sup_const Finset.sup_const
--/
/- warning: finset.sup_bot -> Finset.sup_bot is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))
Case conversion may be inaccurate. Consider using '#align finset.sup_bot Finset.sup_botₓ'. -/
@@ -243,7 +267,7 @@ theorem sup_bot (s : Finset β) : (s.sup fun _ => ⊥) = (⊥ : α) :=
/- warning: finset.sup_ite -> Finset.sup_ite is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α} (p : β -> Prop) [_inst_3 : DecidablePred.{succ u2} β p], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => ite.{succ u1} α (p i) (_inst_3 i) (f i) (g i))) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β p (fun (a : β) => _inst_3 a) s) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β (fun (i : β) => Not (p i)) (fun (a : β) => Not.decidable (p a) (_inst_3 a)) s) g))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α} (p : β -> Prop) [_inst_3 : DecidablePred.{succ u2} β p], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => ite.{succ u1} α (p i) (_inst_3 i) (f i) (g i))) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β p (fun (a : β) => _inst_3 a) s) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β (fun (i : β) => Not (p i)) (fun (a : β) => Not.decidable (p a) (_inst_3 a)) s) g))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α} (p : β -> Prop) [_inst_3 : DecidablePred.{succ u2} β p], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => ite.{succ u1} α (p i) (_inst_3 i) (f i) (g i))) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β p (fun (a : β) => _inst_3 a) s) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β (fun (i : β) => Not (p i)) (fun (a : β) => instDecidableNot (p a) (_inst_3 a)) s) g))
Case conversion may be inaccurate. Consider using '#align finset.sup_ite Finset.sup_iteₓ'. -/
@@ -253,21 +277,29 @@ theorem sup_ite (p : β → Prop) [DecidablePred p] :
fold_ite _
#align finset.sup_ite Finset.sup_ite
-#print Finset.sup_mono_fun /-
+/- warning: finset.sup_mono_fun -> Finset.sup_mono_fun is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
+Case conversion may be inaccurate. Consider using '#align finset.sup_mono_fun Finset.sup_mono_funₓ'. -/
theorem sup_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.sup f ≤ s.sup g :=
Finset.sup_le fun b hb => le_trans (h b hb) (le_sup hb)
#align finset.sup_mono_fun Finset.sup_mono_fun
--/
-#print Finset.sup_mono /-
+/- warning: finset.sup_mono -> Finset.sup_mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+Case conversion may be inaccurate. Consider using '#align finset.sup_mono Finset.sup_monoₓ'. -/
theorem sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f :=
Finset.sup_le fun b hb => le_sup <| h hb
#align finset.sup_mono Finset.sup_mono
--/
/- warning: finset.sup_comm -> Finset.sup_comm is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (f b))) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (f b))) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (f b))) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
Case conversion may be inaccurate. Consider using '#align finset.sup_comm Finset.sup_commₓ'. -/
@@ -279,16 +311,20 @@ protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α
exact ⟨fun h c hc b hb => h b hb c hc, fun h b hb c hc => h c hc b hb⟩
#align finset.sup_comm Finset.sup_comm
-#print Finset.sup_attach /-
+/- warning: finset.sup_attach -> Finset.sup_attach is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeBase.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeSubtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s))))) x))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) => f (Subtype.val.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) x))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
+Case conversion may be inaccurate. Consider using '#align finset.sup_attach Finset.sup_attachₓ'. -/
@[simp]
theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x) = s.sup f :=
(s.attach.sup_map (Function.Embedding.subtype _) f).symm.trans <| congr_arg _ attach_map_val
#align finset.sup_attach Finset.sup_attach
--/
/- warning: finset.sup_product_left -> Finset.sup_product_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u2, u3} β γ i i'))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u2, u3} β γ i i'))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u3, u2} β γ i i'))))
Case conversion may be inaccurate. Consider using '#align finset.sup_product_left Finset.sup_product_leftₓ'. -/
@@ -305,7 +341,7 @@ theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
/- warning: finset.sup_product_right -> Finset.sup_product_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u2, u3} β γ i i'))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u2, u3} β γ i i'))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.sup.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u3, u2} β γ i i'))))
Case conversion may be inaccurate. Consider using '#align finset.sup_product_right Finset.sup_product_rightₓ'. -/
@@ -317,7 +353,7 @@ theorem sup_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α)
/- warning: finset.sup_erase_bot -> Finset.sup_erase_bot is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align finset.sup_erase_bot Finset.sup_erase_botₓ'. -/
@@ -346,7 +382,7 @@ theorem sup_sdiff_right {α β : Type _} [GeneralizedBooleanAlgebra α] (s : Fin
/- warning: finset.comp_sup_eq_sup_comp -> Finset.comp_sup_eq_sup_comp is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toHasBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toHasBot.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
Case conversion may be inaccurate. Consider using '#align finset.comp_sup_eq_sup_comp Finset.comp_sup_eq_sup_compₓ'. -/
@@ -357,7 +393,7 @@ theorem comp_sup_eq_sup_comp [SemilatticeSup γ] [OrderBot γ] {s : Finset β} {
/- warning: finset.sup_coe -> Finset.sup_coe is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.sup.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u1} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u1} α (fun (x : α) => P x) (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.sup.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u1} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u1} α (fun (x : α) => P x) (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.sup.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u2} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
Case conversion may be inaccurate. Consider using '#align finset.sup_coe Finset.sup_coeₓ'. -/
@@ -382,7 +418,7 @@ theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multis
/- warning: list.foldr_sup_eq_sup_to_finset -> List.foldr_sup_eq_sup_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2519 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2521 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2519 x._@.Mathlib.Data.Finset.Lattice._hyg.2521) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
@@ -408,7 +444,7 @@ theorem exists_nat_subset_range (s : Finset ℕ) : ∃ n : ℕ, s ⊆ range n :=
/- warning: finset.sup_induction -> Finset.sup_induction is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.sup_induction Finset.sup_inductionₓ'. -/
@@ -425,7 +461,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
/- warning: finset.sup_le_of_le_directed -> Finset.sup_le_of_le_directed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
+ forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
but is expected to have type
forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2877 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2879 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2877 x._@.Mathlib.Data.Finset.Lattice._hyg.2879) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
Case conversion may be inaccurate. Consider using '#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directedₓ'. -/
@@ -454,7 +490,7 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
/- warning: finset.sup_mem -> Finset.sup_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u2} α ι _inst_1 _inst_2 t p) s))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u2} α ι _inst_1 _inst_2 t p) s))
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 t p) s))
Case conversion may be inaccurate. Consider using '#align finset.sup_mem Finset.sup_memₓ'. -/
@@ -468,7 +504,7 @@ theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y
/- warning: finset.sup_eq_bot_iff -> Finset.sup_eq_bot_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iffₓ'. -/
@@ -481,7 +517,7 @@ end Sup
/- warning: finset.sup_eq_supr -> Finset.sup_eq_iSup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (a : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (a : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iSup.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (a : α) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
Case conversion may be inaccurate. Consider using '#align finset.sup_eq_supr Finset.sup_eq_iSupₓ'. -/
@@ -492,7 +528,7 @@ theorem sup_eq_iSup [CompleteLattice β] (s : Finset α) (f : α → β) : s.sup
/- warning: finset.sup_id_eq_Sup -> Finset.sup_id_eq_sSup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.sSup.{u1} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.sSup.{u1} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.sSup.{u1} α (CompleteLattice.toSupSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
Case conversion may be inaccurate. Consider using '#align finset.sup_id_eq_Sup Finset.sup_id_eq_sSupₓ'. -/
@@ -523,7 +559,7 @@ theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x
/- warning: finset.sup_eq_Sup_image -> Finset.sup_eq_sSup_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.sSup.{u2} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.sSup.{u2} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.sSup.{u2} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
Case conversion may be inaccurate. Consider using '#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_imageₓ'. -/
@@ -540,18 +576,22 @@ section Inf
-- TODO: define with just `[has_top α]` where some lemmas hold without requiring `[order_top α]`
variable [SemilatticeInf α] [OrderTop α]
-#print Finset.inf /-
+/- warning: finset.inf -> Finset.inf is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))], (Finset.{u2} β) -> (β -> α) -> α
+Case conversion may be inaccurate. Consider using '#align finset.inf Finset.infₓ'. -/
/-- Infimum of a finite set: `inf {a, b, c} f = f a ⊓ f b ⊓ f c` -/
def inf (s : Finset β) (f : β → α) : α :=
s.fold (· ⊓ ·) ⊤ f
#align finset.inf Finset.inf
--/
variable {s s₁ s₂ : Finset β} {f g : β → α} {a : α}
/- warning: finset.inf_def -> Finset.inf_def is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Multiset.inf.{u1} α _inst_1 _inst_2 (Multiset.map.{u2, u1} β α f (Finset.val.{u2} β s)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Multiset.inf.{u1} α _inst_1 _inst_2 (Multiset.map.{u2, u1} β α f (Finset.val.{u2} β s)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f) (Multiset.inf.{u2} α _inst_1 _inst_2 (Multiset.map.{u1, u2} β α f (Finset.val.{u1} β s)))
Case conversion may be inaccurate. Consider using '#align finset.inf_def Finset.inf_defₓ'. -/
@@ -561,7 +601,7 @@ theorem inf_def : s.inf f = (s.1.map f).inf :=
/- warning: finset.inf_empty -> Finset.inf_empty is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β)) f) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β)) f) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {f : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β)) f) (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))
Case conversion may be inaccurate. Consider using '#align finset.inf_empty Finset.inf_emptyₓ'. -/
@@ -572,7 +612,7 @@ theorem inf_empty : (∅ : Finset β).inf f = ⊤ :=
/- warning: finset.inf_cons -> Finset.inf_cons is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.inf_cons Finset.inf_consₓ'. -/
@@ -583,7 +623,7 @@ theorem inf_cons {b : β} (h : b ∉ s) : (cons b s h).inf f = f b ⊓ s.inf f :
/- warning: finset.inf_insert -> Finset.inf_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.inf_insert Finset.inf_insertₓ'. -/
@@ -594,7 +634,7 @@ theorem inf_insert [DecidableEq β] {b : β} : (insert b s : Finset β).inf f =
/- warning: finset.inf_image -> Finset.inf_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.image.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.image.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (f : γ -> β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 (Finset.image.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) f s) g) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 s (Function.comp.{succ u2, succ u3, succ u1} γ β α g f))
Case conversion may be inaccurate. Consider using '#align finset.inf_image Finset.inf_imageₓ'. -/
@@ -603,16 +643,20 @@ theorem inf_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β →
fold_image_idem
#align finset.inf_image Finset.inf_image
-#print Finset.inf_map /-
+/- warning: finset.inf_map -> Finset.inf_map is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (coeFn.{max 1 (succ u3) (succ u2), max (succ u3) (succ u2)} (Function.Embedding.{succ u3, succ u2} γ β) (fun (_x : Function.Embedding.{succ u3, succ u2} γ β) => γ -> β) (Function.Embedding.hasCoeToFun.{succ u3, succ u2} γ β) f)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} γ) (f : Function.Embedding.{succ u3, succ u2} γ β) (g : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.map.{u3, u2} γ β f s) g) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (Function.comp.{succ u3, succ u2, succ u1} γ β α g (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ (fun (_x : γ) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : γ) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u3, succ u2} (Function.Embedding.{succ u3, succ u2} γ β) γ β (Function.instEmbeddingLikeEmbedding.{succ u3, succ u2} γ β)) f)))
+Case conversion may be inaccurate. Consider using '#align finset.inf_map Finset.inf_mapₓ'. -/
@[simp]
theorem inf_map (s : Finset γ) (f : γ ↪ β) (g : β → α) : (s.map f).inf g = s.inf (g ∘ f) :=
fold_map
#align finset.inf_map Finset.inf_map
--/
/- warning: finset.inf_singleton -> Finset.inf_singleton is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b) f) (f b)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b) f) (f b)
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {f : β -> α} {b : β}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) b) f) (f b)
Case conversion may be inaccurate. Consider using '#align finset.inf_singleton Finset.inf_singletonₓ'. -/
@@ -623,7 +667,7 @@ theorem inf_singleton {b : β} : ({b} : Finset β).inf f = f b :=
/- warning: finset.inf_union -> Finset.inf_union is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.instUnionFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f))
Case conversion may be inaccurate. Consider using '#align finset.inf_union Finset.inf_unionₓ'. -/
@@ -633,7 +677,7 @@ theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂
/- warning: finset.inf_inf -> Finset.inf_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Inf.inf.{max u2 u1} (β -> α) (Pi.hasInf.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toHasInf.{u1} α _inst_1)) f g)) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Inf.inf.{max u2 u1} (β -> α) (Pi.hasInf.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toHasInf.{u1} α _inst_1)) f g)) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Inf.inf.{max u1 u2} (β -> α) (Pi.instInfForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toInf.{u2} α _inst_1)) f g)) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s g))
Case conversion may be inaccurate. Consider using '#align finset.inf_inf Finset.inf_infₓ'. -/
@@ -641,15 +685,19 @@ theorem inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
#align finset.inf_inf Finset.inf_inf
-#print Finset.inf_congr /-
+/- warning: finset.inf_congr -> Finset.inf_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ g))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} {g : β -> α}, (Eq.{succ u2} (Finset.{u2} β) s₁ s₂) -> (forall (a : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) a s₂) -> (Eq.{succ u1} α (f a) (g a))) -> (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ g))
+Case conversion may be inaccurate. Consider using '#align finset.inf_congr Finset.inf_congrₓ'. -/
theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f a = g a) : s₁.inf f = s₂.inf g :=
by subst hs <;> exact Finset.fold_congr hfg
#align finset.inf_congr Finset.inf_congr
--/
/- warning: map_finset_inf -> map_finset_inf is a dubious translation:
lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} β] [_inst_4 : OrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : InfTopHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.inf.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} β] [_inst_4 : OrderTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : InfTopHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.inf.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toHasLe.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toHasLe.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
but is expected to have type
forall {F : Type.{u3}} {α : Type.{u2}} {β : Type.{u4}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u4} β] [_inst_4 : OrderTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3)))] [_inst_5 : InfTopHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} ι) (g : ι -> α), Eq.{succ u4} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 s g)) (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (InfTopHomClass.toInfHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u4, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u4} ι α β (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (InfTopHomClass.toInfHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f) g))
Case conversion may be inaccurate. Consider using '#align map_finset_inf map_finset_infₓ'. -/
@@ -661,7 +709,7 @@ theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β
/- warning: finset.inf_bUnion -> Finset.inf_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 (t x) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 (t x) f))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 (t x) f))
Case conversion may be inaccurate. Consider using '#align finset.inf_bUnion Finset.inf_biUnionₓ'. -/
@@ -671,15 +719,19 @@ theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
@sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
#align finset.inf_bUnion Finset.inf_biUnion
-#print Finset.inf_const /-
+/- warning: finset.inf_const -> Finset.inf_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (c : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => c)) c)
+Case conversion may be inaccurate. Consider using '#align finset.inf_const Finset.inf_constₓ'. -/
theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c :=
@sup_const αᵒᵈ _ _ _ _ h _
#align finset.inf_const Finset.inf_const
--/
/- warning: finset.inf_top -> Finset.inf_top is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))
Case conversion may be inaccurate. Consider using '#align finset.inf_top Finset.inf_topₓ'. -/
@@ -690,7 +742,7 @@ theorem inf_top (s : Finset β) : (s.inf fun _ => ⊤) = (⊤ : α) :=
/- warning: finset.le_inf_iff -> Finset.le_inf_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (f b)))
Case conversion may be inaccurate. Consider using '#align finset.le_inf_iff Finset.le_inf_iffₓ'. -/
@@ -700,7 +752,7 @@ protected theorem le_inf_iff {a : α} : a ≤ s.inf f ↔ ∀ b ∈ s, a ≤ f b
/- warning: finset.le_inf -> Finset.le_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {a : α}, (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (f b))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.le_inf Finset.le_infₓ'. -/
@@ -711,7 +763,7 @@ attribute [protected] le_inf
/- warning: finset.le_inf_const_le -> Finset.le_inf_const_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {a : α}, LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => a))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {a : α}, LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (_x : β) => a))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {a : α}, LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (fun (_x : β) => a))
Case conversion may be inaccurate. Consider using '#align finset.le_inf_const_le Finset.le_inf_const_leₓ'. -/
@@ -719,39 +771,59 @@ theorem le_inf_const_le : a ≤ s.inf fun _ => a :=
Finset.le_inf fun _ _ => le_rfl
#align finset.le_inf_const_le Finset.le_inf_const_le
-#print Finset.inf_le /-
+/- warning: finset.inf_le -> Finset.inf_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (f b))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (f b))
+Case conversion may be inaccurate. Consider using '#align finset.inf_le Finset.inf_leₓ'. -/
theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
Finset.le_inf_iff.1 le_rfl _ hb
#align finset.inf_le Finset.inf_le
--/
-#print Finset.inf_le_of_le /-
+/- warning: finset.inf_le_of_le -> Finset.inf_le_of_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) a)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α} {b : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) a)
+Case conversion may be inaccurate. Consider using '#align finset.inf_le_of_le Finset.inf_le_of_leₓ'. -/
theorem inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a :=
(inf_le hb).trans h
#align finset.inf_le_of_le Finset.inf_le_of_le
--/
-#print Finset.inf_mono_fun /-
+/- warning: finset.inf_mono_fun -> Finset.inf_mono_fun is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) (g b))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
+Case conversion may be inaccurate. Consider using '#align finset.inf_mono_fun Finset.inf_mono_funₓ'. -/
theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
Finset.le_inf fun b hb => le_trans (inf_le hb) (h b hb)
#align finset.inf_mono_fun Finset.inf_mono_fun
--/
-#print Finset.inf_mono /-
+/- warning: finset.inf_mono -> Finset.inf_mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s₁ s₂) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f))
+Case conversion may be inaccurate. Consider using '#align finset.inf_mono Finset.inf_monoₓ'. -/
theorem inf_mono (h : s₁ ⊆ s₂) : s₂.inf f ≤ s₁.inf f :=
Finset.le_inf fun b hb => inf_le <| h hb
#align finset.inf_mono Finset.inf_mono
--/
-#print Finset.inf_attach /-
+/- warning: finset.inf_attach -> Finset.inf_attach is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeBase.{succ u2, succ u2} (Subtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s)) β (coeSubtype.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s))))) x))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α (Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) _inst_1 _inst_2 (Finset.attach.{u2} β s) (fun (x : Subtype.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s)) => f (Subtype.val.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) x))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
+Case conversion may be inaccurate. Consider using '#align finset.inf_attach Finset.inf_attachₓ'. -/
theorem inf_attach (s : Finset β) (f : β → α) : (s.attach.inf fun x => f x) = s.inf f :=
@sup_attach αᵒᵈ _ _ _ _ _
#align finset.inf_attach Finset.inf_attach
--/
/- warning: finset.inf_comm -> Finset.inf_comm is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (f b))) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (f b))) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : β -> γ -> α), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (f b))) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (fun (c : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (b : β) => f b c)))
Case conversion may be inaccurate. Consider using '#align finset.inf_comm Finset.inf_commₓ'. -/
@@ -762,7 +834,7 @@ protected theorem inf_comm (s : Finset β) (t : Finset γ) (f : β → γ → α
/- warning: finset.inf_product_left -> Finset.inf_product_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u2, u3} β γ i i'))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u2, u3} β γ i i'))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => f (Prod.mk.{u3, u2} β γ i i'))))
Case conversion may be inaccurate. Consider using '#align finset.inf_product_left Finset.inf_product_leftₓ'. -/
@@ -774,7 +846,7 @@ theorem inf_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
/- warning: finset.inf_product_right -> Finset.inf_product_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u2, u3} β γ i i'))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (t : Finset.{u3} γ) (f : (Prod.{u2, u3} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} β γ) _inst_1 _inst_2 (Finset.product.{u2, u3} β γ s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u2, u3} β γ i i'))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u3} β) (t : Finset.{u2} γ) (f : (Prod.{u3, u2} β γ) -> α), Eq.{succ u1} α (Finset.inf.{u1, max u3 u2} α (Prod.{u3, u2} β γ) _inst_1 _inst_2 (Finset.product.{u3, u2} β γ s t) f) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 t (fun (i' : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 s (fun (i : β) => f (Prod.mk.{u3, u2} β γ i i'))))
Case conversion may be inaccurate. Consider using '#align finset.inf_product_right Finset.inf_product_rightₓ'. -/
@@ -786,7 +858,7 @@ theorem inf_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α)
/- warning: finset.inf_erase_top -> Finset.inf_erase_top is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) s (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (id.{succ u1} α)) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 s (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align finset.inf_erase_top Finset.inf_erase_topₓ'. -/
@@ -797,7 +869,7 @@ theorem inf_erase_top [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊤).inf id
/- warning: finset.comp_inf_eq_inf_comp -> Finset.comp_inf_eq_inf_comp is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toHasTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toHasTop.{u3} γ (Preorder.toHasLe.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
Case conversion may be inaccurate. Consider using '#align finset.comp_inf_eq_inf_comp Finset.comp_inf_eq_inf_compₓ'. -/
@@ -808,7 +880,7 @@ theorem comp_inf_eq_inf_comp [SemilatticeInf γ] [OrderTop γ] {s : Finset β} {
/- warning: finset.inf_coe -> Finset.inf_coe is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.inf.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u1} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u1} α (fun (x : α) => P x) (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.inf.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u1} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u1} α (fun (x : α) => P x) (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.inf.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u2} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
Case conversion may be inaccurate. Consider using '#align finset.inf_coe Finset.inf_coeₓ'. -/
@@ -821,7 +893,7 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
/- warning: list.foldr_inf_eq_inf_to_finset -> List.foldr_inf_eq_inf_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5388 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5390 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5388 x._@.Mathlib.Data.Finset.Lattice._hyg.5390) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
@@ -835,7 +907,7 @@ theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
/- warning: finset.inf_induction -> Finset.inf_induction is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.inf_induction Finset.inf_inductionₓ'. -/
@@ -846,7 +918,7 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
/- warning: finset.inf_mem -> Finset.inf_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u2} α ι _inst_1 _inst_2 t p) s))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u2} α ι _inst_1 _inst_2 t p) s))
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 t p) s))
Case conversion may be inaccurate. Consider using '#align finset.inf_mem Finset.inf_memₓ'. -/
@@ -858,7 +930,7 @@ theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y
/- warning: finset.inf_eq_top_iff -> Finset.inf_eq_top_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.inf_eq_top_iff Finset.inf_eq_top_iffₓ'. -/
@@ -871,7 +943,7 @@ end Inf
/- warning: finset.to_dual_sup -> Finset.toDual_sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_sup Finset.toDual_supₓ'. -/
@@ -883,7 +955,7 @@ theorem toDual_sup [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β →
/- warning: finset.to_dual_inf -> Finset.toDual_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_inf Finset.toDual_infₓ'. -/
@@ -895,7 +967,7 @@ theorem toDual_inf [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β →
/- warning: finset.of_dual_sup -> Finset.ofDual_sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_sup Finset.ofDual_supₓ'. -/
@@ -907,7 +979,7 @@ theorem ofDual_sup [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β →
/- warning: finset.of_dual_inf -> Finset.ofDual_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_inf Finset.ofDual_infₓ'. -/
@@ -927,7 +999,7 @@ variable [OrderBot α] {s : Finset ι} {t : Finset κ} {f : ι → α} {g : κ
/- warning: finset.sup_inf_distrib_left -> Finset.sup_inf_distrib_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.sup_inf_distrib_left Finset.sup_inf_distrib_leftₓ'. -/
@@ -941,7 +1013,7 @@ theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
/- warning: finset.sup_inf_distrib_right -> Finset.sup_inf_distrib_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_rightₓ'. -/
@@ -954,7 +1026,7 @@ theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
/- warning: finset.disjoint_sup_right -> Finset.disjoint_sup_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_right Finset.disjoint_sup_rightₓ'. -/
@@ -964,7 +1036,7 @@ protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i
/- warning: finset.disjoint_sup_left -> Finset.disjoint_sup_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_left Finset.disjoint_sup_leftₓ'. -/
@@ -974,7 +1046,7 @@ protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i
/- warning: finset.sup_inf_sup -> Finset.sup_inf_sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.sup.{u1, u3} α κ (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.sup.{u1, u3} α κ (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u3}} {κ : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u3} ι) (t : Finset.{u2} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Finset.sup.{u1, u3} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.sup.{u1, u2} α κ (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.sup.{u1, max u3 u2} α (Prod.{u3, u2} ι κ) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u3, u2} ι κ s t) (fun (i : Prod.{u3, u2} ι κ) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (f (Prod.fst.{u3, u2} ι κ i)) (g (Prod.snd.{u3, u2} ι κ i))))
Case conversion may be inaccurate. Consider using '#align finset.sup_inf_sup Finset.sup_inf_supₓ'. -/
@@ -992,7 +1064,7 @@ variable [OrderTop α] {f : ι → α} {g : κ → α} {s : Finset ι} {t : Fins
/- warning: finset.inf_sup_distrib_left -> Finset.inf_sup_distrib_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.inf_sup_distrib_left Finset.inf_sup_distrib_leftₓ'. -/
@@ -1003,7 +1075,7 @@ theorem inf_sup_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
/- warning: finset.inf_sup_distrib_right -> Finset.inf_sup_distrib_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_rightₓ'. -/
@@ -1014,7 +1086,7 @@ theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
/- warning: finset.codisjoint_inf_right -> Finset.codisjoint_inf_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {f : ι -> α} {s : Finset.{u1} ι} {a : α}, Iff (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.codisjoint_inf_right Finset.codisjoint_inf_rightₓ'. -/
@@ -1025,7 +1097,7 @@ protected theorem codisjoint_inf_right :
/- warning: finset.codisjoint_inf_left -> Finset.codisjoint_inf_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {f : ι -> α} {s : Finset.{u1} ι} {a : α}, Iff (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.codisjoint_inf_left Finset.codisjoint_inf_leftₓ'. -/
@@ -1036,7 +1108,7 @@ protected theorem codisjoint_inf_left :
/- warning: finset.inf_sup_inf -> Finset.inf_sup_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.inf.{u1, u3} α κ (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.inf.{u1, u3} α κ (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u3}} {κ : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u3} ι) (t : Finset.{u2} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u3} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.inf.{u1, u2} α κ (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.inf.{u1, max u3 u2} α (Prod.{u3, u2} ι κ) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u3, u2} ι κ s t) (fun (i : Prod.{u3, u2} ι κ) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u3, u2} ι κ i)) (g (Prod.snd.{u3, u2} ι κ i))))
Case conversion may be inaccurate. Consider using '#align finset.inf_sup_inf Finset.inf_sup_infₓ'. -/
@@ -1054,7 +1126,7 @@ variable [BoundedOrder α] [DecidableEq ι]
/- warning: finset.inf_sup -> Finset.inf_sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.sup.{u1, u3} α (κ i) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.sup.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.inf.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (g ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (Subtype.prop.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.sup.{u1, u3} α (κ i) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.sup.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.inf.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (g ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (Subtype.prop.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.sup.{u1, u3} α (κ i) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.sup.{u1, max u2 u3} α (forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u3, u2} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) => Finset.inf.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i)))))
Case conversion may be inaccurate. Consider using '#align finset.inf_sup Finset.inf_supₓ'. -/
@@ -1090,7 +1162,7 @@ theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i))
/- warning: finset.sup_inf -> Finset.sup_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.inf.{u1, u3} α (κ i) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.inf.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.sup.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.inf.{u1, u3} α (κ i) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.inf.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.sup.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.inf.{u1, u3} α (κ i) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.inf.{u1, max u2 u3} α (forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u3, u2} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) => Finset.sup.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i)))))
Case conversion may be inaccurate. Consider using '#align finset.sup_inf Finset.sup_infₓ'. -/
@@ -1208,7 +1280,7 @@ variable [OrderBot α] {s : Finset ι} {f : ι → α} {a : α}
/- warning: finset.comp_sup_eq_sup_comp_of_is_total -> Finset.comp_sup_eq_sup_comp_of_is_total is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u3} ι} {f : ι -> α} [_inst_3 : SemilatticeSup.{u2} β] [_inst_4 : OrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3)))] (g : α -> β), (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3)) g) -> (Eq.{succ u2} β (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) (Bot.bot.{u2} β (OrderBot.toHasBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3))) _inst_4))) -> (Eq.{succ u2} β (g (Finset.sup.{u1, u3} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u2, u3} β ι _inst_3 _inst_4 s (Function.comp.{succ u3, succ u1, succ u2} ι α β g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u3} ι} {f : ι -> α} [_inst_3 : SemilatticeSup.{u2} β] [_inst_4 : OrderBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3)))] (g : α -> β), (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3)) g) -> (Eq.{succ u2} β (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) (Bot.bot.{u2} β (OrderBot.toHasBot.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3))) _inst_4))) -> (Eq.{succ u2} β (g (Finset.sup.{u1, u3} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u2, u3} β ι _inst_3 _inst_4 s (Function.comp.{succ u3, succ u1, succ u2} ι α β g f)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] (g : α -> β), (Monotone.{u2, u3} α β (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))) (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)) g) -> (Eq.{succ u3} β (g (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) (Bot.bot.{u3} β (OrderBot.toBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4))) -> (Eq.{succ u3} β (g (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Finset.sup.{u3, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u3} ι α β g f)))
Case conversion may be inaccurate. Consider using '#align finset.comp_sup_eq_sup_comp_of_is_total Finset.comp_sup_eq_sup_comp_of_is_totalₓ'. -/
@@ -1219,7 +1291,7 @@ theorem comp_sup_eq_sup_comp_of_is_total [SemilatticeSup β] [OrderBot β] (g :
/- warning: finset.le_sup_iff -> Finset.le_sup_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2)) a) -> (Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2)) a) -> (Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b)))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2)) a) -> (Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b)))))
Case conversion may be inaccurate. Consider using '#align finset.le_sup_iff Finset.le_sup_iffₓ'. -/
@@ -1235,7 +1307,7 @@ protected theorem le_sup_iff (ha : ⊥ < a) : a ≤ s.sup f ↔ ∃ b ∈ s, a
/- warning: finset.lt_sup_iff -> Finset.lt_sup_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
Case conversion may be inaccurate. Consider using '#align finset.lt_sup_iff Finset.lt_sup_iffₓ'. -/
@@ -1251,7 +1323,7 @@ protected theorem lt_sup_iff : a < s.sup f ↔ ∃ b ∈ s, a < f b :=
/- warning: finset.sup_lt_iff -> Finset.sup_lt_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2)) a) -> (Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall (b : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2)) a) -> (Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall (b : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2)) a) -> (Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) a) (forall (b : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f b) a)))
Case conversion may be inaccurate. Consider using '#align finset.sup_lt_iff Finset.sup_lt_iffₓ'. -/
@@ -1270,7 +1342,7 @@ variable [OrderTop α] {s : Finset ι} {f : ι → α} {a : α}
/- warning: finset.comp_inf_eq_inf_comp_of_is_total -> Finset.comp_inf_eq_inf_comp_of_is_total is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u3} ι} {f : ι -> α} [_inst_3 : SemilatticeInf.{u2} β] [_inst_4 : OrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3)))] (g : α -> β), (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3)) g) -> (Eq.{succ u2} β (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) (Top.top.{u2} β (OrderTop.toHasTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3))) _inst_4))) -> (Eq.{succ u2} β (g (Finset.inf.{u1, u3} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u2, u3} β ι _inst_3 _inst_4 s (Function.comp.{succ u3, succ u1, succ u2} ι α β g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u3} ι} {f : ι -> α} [_inst_3 : SemilatticeInf.{u2} β] [_inst_4 : OrderTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3)))] (g : α -> β), (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3)) g) -> (Eq.{succ u2} β (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) (Top.top.{u2} β (OrderTop.toHasTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β _inst_3))) _inst_4))) -> (Eq.{succ u2} β (g (Finset.inf.{u1, u3} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u2, u3} β ι _inst_3 _inst_4 s (Function.comp.{succ u3, succ u1, succ u2} ι α β g f)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} [_inst_3 : SemilatticeInf.{u3} β] [_inst_4 : OrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)))] (g : α -> β), (Monotone.{u2, u3} α β (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))) (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)) g) -> (Eq.{succ u3} β (g (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) (Top.top.{u3} β (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4))) -> (Eq.{succ u3} β (g (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (Finset.inf.{u3, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u3} ι α β g f)))
Case conversion may be inaccurate. Consider using '#align finset.comp_inf_eq_inf_comp_of_is_total Finset.comp_inf_eq_inf_comp_of_is_totalₓ'. -/
@@ -1281,7 +1353,7 @@ theorem comp_inf_eq_inf_comp_of_is_total [SemilatticeInf β] [OrderTop β] (g :
/- warning: finset.inf_le_iff -> Finset.inf_le_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) -> (Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) a) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f b) a))))
Case conversion may be inaccurate. Consider using '#align finset.inf_le_iff Finset.inf_le_iffₓ'. -/
@@ -1292,7 +1364,7 @@ protected theorem inf_le_iff (ha : a < ⊤) : s.inf f ≤ a ↔ ∃ b ∈ s, f b
/- warning: finset.inf_lt_iff -> Finset.inf_lt_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f b) a)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) a) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f b) a)))
Case conversion may be inaccurate. Consider using '#align finset.inf_lt_iff Finset.inf_lt_iffₓ'. -/
@@ -1303,7 +1375,7 @@ protected theorem inf_lt_iff : s.inf f < a ↔ ∃ b ∈ s, f b < a :=
/- warning: finset.lt_inf_iff -> Finset.lt_inf_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall (b : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall (b : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) _inst_2))) -> (Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f)) (forall (b : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
Case conversion may be inaccurate. Consider using '#align finset.lt_inf_iff Finset.lt_inf_iffₓ'. -/
@@ -1318,7 +1390,7 @@ end LinearOrder
/- warning: finset.inf_eq_infi -> Finset.inf_eq_iInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (a : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (a : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iInf.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (a : α) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
Case conversion may be inaccurate. Consider using '#align finset.inf_eq_infi Finset.inf_eq_iInfₓ'. -/
@@ -1328,7 +1400,7 @@ theorem inf_eq_iInf [CompleteLattice β] (s : Finset α) (f : α → β) : s.inf
/- warning: finset.inf_id_eq_Inf -> Finset.inf_id_eq_sInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.sInf.{u1} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.sInf.{u1} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.sInf.{u1} α (CompleteLattice.toInfSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
Case conversion may be inaccurate. Consider using '#align finset.inf_id_eq_Inf Finset.inf_id_eq_sInfₓ'. -/
@@ -1359,7 +1431,7 @@ theorem inf_set_eq_iInter (s : Finset α) (f : α → Set β) : s.inf f = ⋂ x
/- warning: finset.inf_eq_Inf_image -> Finset.inf_eq_sInf_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.sInf.{u2} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.sInf.{u2} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.sInf.{u2} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
Case conversion may be inaccurate. Consider using '#align finset.inf_eq_Inf_image Finset.inf_eq_sInf_imageₓ'. -/
@@ -1392,7 +1464,7 @@ variable {s : Finset β} (H : s.Nonempty) (f : β → α)
/- warning: finset.coe_sup' -> Finset.coe_sup' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) (Finset.sup'.{u1, u2} α β _inst_1 s H f)) (Finset.sup.{u1, u2} (WithBot.{u1} α) β (WithBot.semilatticeSup.{u1} α _inst_1) (WithBot.orderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) (Finset.sup'.{u1, u2} α β _inst_1 s H f)) (Finset.sup.{u1, u2} (WithBot.{u1} α) β (WithBot.semilatticeSup.{u1} α _inst_1) (WithBot.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α), Eq.{succ u2} (WithBot.{u2} α) (WithBot.some.{u2} α (Finset.sup'.{u2, u1} α β _inst_1 s H f)) (Finset.sup.{u2, u1} (WithBot.{u2} α) β (WithBot.semilatticeSup.{u2} α _inst_1) (WithBot.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))) s (Function.comp.{succ u1, succ u2, succ u2} β α (WithBot.{u2} α) (WithBot.some.{u2} α) f))
Case conversion may be inaccurate. Consider using '#align finset.coe_sup' Finset.coe_sup'ₓ'. -/
@@ -1436,27 +1508,39 @@ theorem sup'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset
#align finset.sup'_singleton Finset.sup'_singleton
-/
-#print Finset.sup'_le /-
+/- warning: finset.sup'_le -> Finset.sup'_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup'.{u1, u2} α β _inst_1 s H f) a)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup'.{u1, u2} α β _inst_1 s H f) a)
+Case conversion may be inaccurate. Consider using '#align finset.sup'_le Finset.sup'_leₓ'. -/
theorem sup'_le {a : α} (hs : ∀ b ∈ s, f b ≤ a) : s.sup' H f ≤ a :=
by
rw [← WithBot.coe_le_coe, coe_sup']
exact Finset.sup_le fun b h => WithBot.coe_le_coe.2 <| hs b h
#align finset.sup'_le Finset.sup'_le
--/
-#print Finset.le_sup' /-
+/- warning: finset.le_sup' -> Finset.le_sup' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b h) f)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) b h) f)
+Case conversion may be inaccurate. Consider using '#align finset.le_sup' Finset.le_sup'ₓ'. -/
theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f :=
by
rw [← WithBot.coe_le_coe, coe_sup']
exact le_sup h
#align finset.le_sup' Finset.le_sup'
--/
-#print Finset.le_sup'_of_le /-
+/- warning: finset.le_sup'_of_le -> Finset.le_sup'_of_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b hb) f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s), (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (f b)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) a (Finset.sup'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) b hb) f))
+Case conversion may be inaccurate. Consider using '#align finset.le_sup'_of_le Finset.le_sup'_of_leₓ'. -/
theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
h.trans <| le_sup' _ hb
#align finset.le_sup'_of_le Finset.le_sup'_of_le
--/
/- warning: finset.sup'_const -> Finset.sup'_const is a dubious translation:
lean 3 declaration is
@@ -1476,7 +1560,7 @@ theorem sup'_const (a : α) : (s.sup' H fun b => a) = a :=
/- warning: finset.sup'_le_iff -> Finset.sup'_le_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup'.{u1, u2} α β _inst_1 s H f) a) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup'.{u1, u2} α β _inst_1 s H f) a) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (Finset.sup'.{u2, u1} α β _inst_1 s H f) a) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) (f b) a))
Case conversion may be inaccurate. Consider using '#align finset.sup'_le_iff Finset.sup'_le_iffₓ'. -/
@@ -1595,7 +1679,7 @@ variable {s : Finset β} (H : s.Nonempty) (f : β → α) {a : α} {b : β}
/- warning: finset.coe_inf' -> Finset.coe_inf' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (Finset.inf.{u1, u2} (WithTop.{u1} α) β (WithTop.semilatticeInf.{u1} α _inst_1) (WithTop.orderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α)))) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (Finset.inf.{u1, u2} (WithTop.{u1} α) β (WithTop.semilatticeInf.{u1} α _inst_1) (WithTop.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α)))) f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α), Eq.{succ u2} (WithTop.{u2} α) (WithTop.some.{u2} α (Finset.inf'.{u2, u1} α β _inst_1 s H f)) (Finset.inf.{u2, u1} (WithTop.{u2} α) β (WithTop.semilatticeInf.{u2} α _inst_1) (WithTop.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))) s (Function.comp.{succ u1, succ u2, succ u2} β α (WithTop.{u2} α) (WithTop.some.{u2} α) f))
Case conversion may be inaccurate. Consider using '#align finset.coe_inf' Finset.coe_inf'ₓ'. -/
@@ -1635,21 +1719,29 @@ theorem inf'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset
#align finset.inf'_singleton Finset.inf'_singleton
-/
-#print Finset.le_inf' /-
+/- warning: finset.le_inf' -> Finset.le_inf' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf'.{u1, u2} α β _inst_1 s H f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, (forall (b : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf'.{u1, u2} α β _inst_1 s H f))
+Case conversion may be inaccurate. Consider using '#align finset.le_inf' Finset.le_inf'ₓ'. -/
theorem le_inf' (hs : ∀ b ∈ s, a ≤ f b) : a ≤ s.inf' H f :=
@sup'_le αᵒᵈ _ _ _ H f _ hs
#align finset.le_inf' Finset.le_inf'
--/
-#print Finset.inf'_le /-
+/- warning: finset.inf'_le -> Finset.inf'_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b h) f) (f b)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {b : β} (h : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) b h) f) (f b)
+Case conversion may be inaccurate. Consider using '#align finset.inf'_le Finset.inf'_leₓ'. -/
theorem inf'_le (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
@le_sup' αᵒᵈ _ _ _ f _ h
#align finset.inf'_le Finset.inf'_le
--/
/- warning: finset.inf'_le_of_le -> Finset.inf'_le_of_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b hb) f) a)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b hb) f) a)
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : β} {b : α} (hb : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) a s), (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f a) b) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) a hb) f) b)
Case conversion may be inaccurate. Consider using '#align finset.inf'_le_of_le Finset.inf'_le_of_leₓ'. -/
@@ -1670,7 +1762,7 @@ theorem inf'_const (a : α) : (s.inf' H fun b => a) = a :=
/- warning: finset.le_inf'_iff -> Finset.le_inf'_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) a (f b)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (Finset.inf'.{u2, u1} α β _inst_1 s H f)) (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) a (f b)))
Case conversion may be inaccurate. Consider using '#align finset.le_inf'_iff Finset.le_inf'_iffₓ'. -/
@@ -1747,15 +1839,19 @@ section Sup
variable [SemilatticeSup α] [OrderBot α]
-#print Finset.sup'_eq_sup /-
+/- warning: finset.sup'_eq_sup -> Finset.sup'_eq_sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 s H f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 s H f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)
+Case conversion may be inaccurate. Consider using '#align finset.sup'_eq_sup Finset.sup'_eq_supₓ'. -/
theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H f = s.sup f :=
le_antisymm (sup'_le H f fun b => le_sup) (Finset.sup_le fun b => le_sup' f)
#align finset.sup'_eq_sup Finset.sup'_eq_sup
--/
/- warning: finset.sup_closed_of_sup_closed -> Finset.sup_closed_of_sup_closed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
Case conversion may be inaccurate. Consider using '#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closedₓ'. -/
@@ -1765,11 +1861,15 @@ theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closed
-#print Finset.coe_sup_of_nonempty /-
+/- warning: finset.coe_sup_of_nonempty -> Finset.coe_sup_of_nonempty is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (WithBot.{u1} α) β (WithBot.semilatticeSup.{u1} α _inst_1) (WithBot.orderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithBot.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) f)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithBot.{u1} α) (WithBot.some.{u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (WithBot.{u1} α) β (WithBot.semilatticeSup.{u1} α _inst_1) (WithBot.orderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithBot.{u1} α) (WithBot.some.{u1} α) f)))
+Case conversion may be inaccurate. Consider using '#align finset.coe_sup_of_nonempty Finset.coe_sup_of_nonemptyₓ'. -/
theorem coe_sup_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.sup f) : WithBot α) = s.sup (coe ∘ f) := by simp only [← sup'_eq_sup h, coe_sup' h]
#align finset.coe_sup_of_nonempty Finset.coe_sup_of_nonempty
--/
end Sup
@@ -1777,15 +1877,19 @@ section Inf
variable [SemilatticeInf α] [OrderTop α]
-#print Finset.inf'_eq_inf /-
+/- warning: finset.inf'_eq_inf -> Finset.inf'_eq_inf is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 s H f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 s H f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)
+Case conversion may be inaccurate. Consider using '#align finset.inf'_eq_inf Finset.inf'_eq_infₓ'. -/
theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H f = s.inf f :=
@sup'_eq_sup αᵒᵈ _ _ _ _ H f
#align finset.inf'_eq_inf Finset.inf'_eq_inf
--/
/- warning: finset.inf_closed_of_inf_closed -> Finset.inf_closed_of_inf_closed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
Case conversion may be inaccurate. Consider using '#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closedₓ'. -/
@@ -1795,12 +1899,16 @@ theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty
@sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
-#print Finset.coe_inf_of_nonempty /-
+/- warning: finset.coe_inf_of_nonempty -> Finset.coe_inf_of_nonempty is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithTop.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (WithTop.{u1} α) β (WithTop.semilatticeInf.{u1} α _inst_1) (WithTop.orderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))) s (fun (i : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) (f i))))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α), Eq.{succ u1} (WithTop.{u1} α) (WithTop.some.{u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (WithTop.{u1} α) β (WithTop.semilatticeInf.{u1} α _inst_1) (WithTop.orderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))) s (Function.comp.{succ u2, succ u1, succ u1} β α (WithTop.{u1} α) (WithTop.some.{u1} α) f)))
+Case conversion may be inaccurate. Consider using '#align finset.coe_inf_of_nonempty Finset.coe_inf_of_nonemptyₓ'. -/
theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.inf f) : WithTop α) = s.inf fun i => f i :=
@coe_sup_of_nonempty αᵒᵈ _ _ _ _ h f
#align finset.coe_inf_of_nonempty Finset.coe_inf_of_nonempty
--/
end Inf
@@ -1810,7 +1918,7 @@ variable {C : β → Type _} [∀ b : β, SemilatticeSup (C b)] [∀ b : β, Ord
/- warning: finset.sup_apply -> Finset.sup_apply is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeSup.{u3} (C b)] [_inst_2 : forall (b : β), OrderBot.{u3} (C b) (Preorder.toLE.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeSup.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u1} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.sup.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeSup.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderBot.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toLE.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => PartialOrder.mk.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) (SemilatticeSup.Le.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (SemilatticeSup.Lt.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (Pi.SemilatticeSup._proof_1.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_2.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_3.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_4.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.sup.{u3, u1} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
+ forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeSup.{u3} (C b)] [_inst_2 : forall (b : β), OrderBot.{u3} (C b) (Preorder.toHasLe.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeSup.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u1} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.sup.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeSup.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderBot.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toHasLe.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => PartialOrder.mk.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) (SemilatticeSup.Le.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (SemilatticeSup.Lt.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (Pi.SemilatticeSup._proof_1.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_2.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_3.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeSup._proof_4.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.sup.{u3, u1} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeSup.{u3} (C b)] [_inst_2 : forall (b : β), OrderBot.{u3} (C b) (Preorder.toLE.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeSup.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u2} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.sup.{max u1 u3, u2} (forall (b : β), C b) α (Pi.semilatticeSup.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderBot.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toLE.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => C i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => SemilatticeSup.toPartialOrder.{u3} ((fun (b : β) => C b) _x) ((fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.sup.{u3, u2} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
Case conversion may be inaccurate. Consider using '#align finset.sup_apply Finset.sup_applyₓ'. -/
@@ -1828,7 +1936,7 @@ variable {C : β → Type _} [∀ b : β, SemilatticeInf (C b)] [∀ b : β, Ord
/- warning: finset.inf_apply -> Finset.inf_apply is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeInf.{u3} (C b)] [_inst_2 : forall (b : β), OrderTop.{u3} (C b) (Preorder.toLE.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeInf.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u1} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.inf.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeInf.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderTop.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toLE.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => PartialOrder.mk.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) (SemilatticeInf.Le.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (SemilatticeInf.Lt.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (Pi.SemilatticeInf._proof_1.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_2.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_3.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_4.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.inf.{u3, u1} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
+ forall {α : Type.{u1}} {β : Type.{u2}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeInf.{u3} (C b)] [_inst_2 : forall (b : β), OrderTop.{u3} (C b) (Preorder.toHasLe.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeInf.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u1} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.inf.{max u2 u3, u1} (forall (b : β), C b) α (Pi.semilatticeInf.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderTop.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toHasLe.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => PartialOrder.mk.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) (SemilatticeInf.Le.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (SemilatticeInf.Lt.{u3} ((fun (i : β) => (fun (i : β) => (fun (b : β) => C b) i) i) _x) ((fun (i : β) => _inst_1 i) _x)) (Pi.SemilatticeInf._proof_1.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_2.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_3.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x) (Pi.SemilatticeInf._proof_4.{u2, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.inf.{u3, u1} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} {C : β -> Type.{u3}} [_inst_1 : forall (b : β), SemilatticeInf.{u3} (C b)] [_inst_2 : forall (b : β), OrderTop.{u3} (C b) (Preorder.toLE.{u3} (C b) (PartialOrder.toPreorder.{u3} (C b) (SemilatticeInf.toPartialOrder.{u3} (C b) (_inst_1 b))))] (s : Finset.{u2} α) (f : α -> (forall (b : β), C b)) (b : β), Eq.{succ u3} (C b) (Finset.inf.{max u1 u3, u2} (forall (b : β), C b) α (Pi.semilatticeInf.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => _inst_1 i)) (Pi.orderTop.{u1, u3} β (fun (b : β) => C b) (fun (i : β) => Preorder.toLE.{u3} ((fun (i : β) => (fun (i : β) => (fun (i : β) => C i) i) i) i) ((fun (i : β) => PartialOrder.toPreorder.{u3} ((fun (i : β) => (fun (b : β) => C b) i) i) ((fun (_x : β) => SemilatticeInf.toPartialOrder.{u3} ((fun (b : β) => C b) _x) ((fun (i : β) => _inst_1 i) _x)) i)) i)) (fun (i : β) => _inst_2 i)) s f b) (Finset.inf.{u3, u2} (C b) α (_inst_1 b) (_inst_2 b) s (fun (a : α) => f a b))
Case conversion may be inaccurate. Consider using '#align finset.inf_apply Finset.inf_applyₓ'. -/
@@ -1930,7 +2038,7 @@ variable [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ι → α} {a :
/- warning: finset.le_sup'_iff -> Finset.le_sup'_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
Case conversion may be inaccurate. Consider using '#align finset.le_sup'_iff Finset.le_sup'_iffₓ'. -/
@@ -1943,7 +2051,7 @@ theorem le_sup'_iff : a ≤ s.sup' H f ↔ ∃ b ∈ s, a ≤ f b :=
/- warning: finset.lt_sup'_iff -> Finset.lt_sup'_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (Exists.{succ u2} ι (fun (b : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f b))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f)) (Exists.{succ u1} ι (fun (b : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) b s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f b))))
Case conversion may be inaccurate. Consider using '#align finset.lt_sup'_iff Finset.lt_sup'_iffₓ'. -/
@@ -1956,7 +2064,7 @@ theorem lt_sup'_iff : a < s.sup' H f ↔ ∃ b ∈ s, a < f b :=
/- warning: finset.sup'_lt_iff -> Finset.sup'_lt_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f) a) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.sup'_lt_iff Finset.sup'_lt_iffₓ'. -/
@@ -1969,7 +2077,7 @@ theorem sup'_lt_iff : s.sup' H f < a ↔ ∀ i ∈ s, f i < a :=
/- warning: finset.inf'_le_iff -> Finset.inf'_le_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (Exists.{succ u2} ι (fun (i : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (Exists.{succ u2} ι (fun (i : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f) a) (Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f i) a)))
Case conversion may be inaccurate. Consider using '#align finset.inf'_le_iff Finset.inf'_le_iffₓ'. -/
@@ -1980,7 +2088,7 @@ theorem inf'_le_iff : s.inf' H f ≤ a ↔ ∃ i ∈ s, f i ≤ a :=
/- warning: finset.inf'_lt_iff -> Finset.inf'_lt_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (Exists.{succ u2} ι (fun (i : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) => LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f) a) (Exists.{succ u2} ι (fun (i : ι) => Exists.{0} (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f i) a)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f) a) (Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) (f i) a)))
Case conversion may be inaccurate. Consider using '#align finset.inf'_lt_iff Finset.inf'_lt_iffₓ'. -/
@@ -1991,7 +2099,7 @@ theorem inf'_lt_iff : s.inf' H f < a ↔ ∃ i ∈ s, f i < a :=
/- warning: finset.lt_inf'_iff -> Finset.lt_inf'_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u2} ι} (H : Finset.Nonempty.{u2} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) s H f)) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (f i)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] {s : Finset.{u1} ι} (H : Finset.Nonempty.{u1} ι s) {f : ι -> α} {a : α}, Iff (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) s H f)) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LT.lt.{u2} α (Preorder.toLT.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1)))))) a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.lt_inf'_iff Finset.lt_inf'_iffₓ'. -/
@@ -2021,7 +2129,7 @@ theorem exists_mem_eq_inf' (f : ι → α) : ∃ i, i ∈ s ∧ s.inf' H f = f i
/- warning: finset.exists_mem_eq_sup -> Finset.exists_mem_eq_sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι), (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α), Exists.{succ u2} ι (fun (i : ι) => And (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) (f i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι), (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α), Exists.{succ u2} ι (fun (i : ι) => And (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) (f i))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] (s : Finset.{u1} ι), (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α), Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (Eq.{succ u2} α (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) (f i))))
Case conversion may be inaccurate. Consider using '#align finset.exists_mem_eq_sup Finset.exists_mem_eq_supₓ'. -/
@@ -2032,7 +2140,7 @@ theorem exists_mem_eq_sup [OrderBot α] (s : Finset ι) (h : s.Nonempty) (f : ι
/- warning: finset.exists_mem_eq_inf -> Finset.exists_mem_eq_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι), (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α), Exists.{succ u2} ι (fun (i : ι) => And (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) (f i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι), (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α), Exists.{succ u2} ι (fun (i : ι) => And (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) (Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)) _inst_2 s f) (f i))))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrder.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))))))] (s : Finset.{u1} ι), (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α), Exists.{succ u1} ι (fun (i : ι) => And (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) (Eq.{succ u2} α (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α _inst_1))) _inst_2 s f) (f i))))
Case conversion may be inaccurate. Consider using '#align finset.exists_mem_eq_inf Finset.exists_mem_eq_infₓ'. -/
@@ -2137,42 +2245,66 @@ theorem mem_of_max {s : Finset α} : ∀ {a : α}, s.max = a → a ∈ s :=
#align finset.mem_of_max Finset.mem_of_max
-/
-#print Finset.le_max /-
+/- warning: finset.le_max -> Finset.le_max is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) a) (Finset.max.{u1} α _inst_1 s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (WithBot.some.{u1} α a) (Finset.max.{u1} α _inst_1 s))
+Case conversion may be inaccurate. Consider using '#align finset.le_max Finset.le_maxₓ'. -/
theorem le_max {a : α} {s : Finset α} (as : a ∈ s) : ↑a ≤ s.max :=
le_sup as
#align finset.le_max Finset.le_max
--/
-#print Finset.not_mem_of_max_lt_coe /-
+/- warning: finset.not_mem_of_max_lt_coe -> Finset.not_mem_of_max_lt_coe is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithBot.{u1} α) (Preorder.toHasLt.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.max.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) a)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithBot.{u1} α) (Preorder.toLT.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.max.{u1} α _inst_1 s) (WithBot.some.{u1} α a)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
+Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_max_lt_coe Finset.not_mem_of_max_lt_coeₓ'. -/
theorem not_mem_of_max_lt_coe {a : α} {s : Finset α} (h : s.max < a) : a ∉ s :=
mt le_max h.not_le
#align finset.not_mem_of_max_lt_coe Finset.not_mem_of_max_lt_coe
--/
-#print Finset.le_max_of_eq /-
+/- warning: finset.le_max_of_eq -> Finset.le_max_of_eq is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) b)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) (WithBot.some.{u1} α b)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b)
+Case conversion may be inaccurate. Consider using '#align finset.le_max_of_eq Finset.le_max_of_eqₓ'. -/
theorem le_max_of_eq {s : Finset α} {a b : α} (h₁ : a ∈ s) (h₂ : s.max = b) : a ≤ b :=
WithBot.coe_le_coe.mp <| (le_max h₁).trans h₂.le
#align finset.le_max_of_eq Finset.le_max_of_eq
--/
-#print Finset.not_mem_of_max_lt /-
+/- warning: finset.not_mem_of_max_lt -> Finset.not_mem_of_max_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) b a) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) b)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) b a) -> (Eq.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 s) (WithBot.some.{u1} α b)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
+Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_max_lt Finset.not_mem_of_max_ltₓ'. -/
theorem not_mem_of_max_lt {s : Finset α} {a b : α} (h₁ : b < a) (h₂ : s.max = ↑b) : a ∉ s :=
Finset.not_mem_of_max_lt_coe <| h₂.trans_lt <| WithBot.coe_lt_coe.mpr h₁
#align finset.not_mem_of_max_lt Finset.not_mem_of_max_lt
--/
-#print Finset.max_mono /-
+/- warning: finset.max_mono -> Finset.max_mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.max.{u1} α _inst_1 s) (Finset.max.{u1} α _inst_1 t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.max.{u1} α _inst_1 s) (Finset.max.{u1} α _inst_1 t))
+Case conversion may be inaccurate. Consider using '#align finset.max_mono Finset.max_monoₓ'. -/
theorem max_mono {s t : Finset α} (st : s ⊆ t) : s.max ≤ t.max :=
sup_mono st
#align finset.max_mono Finset.max_mono
--/
-#print Finset.max_le /-
+/- warning: finset.max_le -> Finset.max_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {M : WithBot.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) a) M)) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toHasLe.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.max.{u1} α _inst_1 s) M)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {M : WithBot.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (WithBot.some.{u1} α a) M)) -> (LE.le.{u1} (WithBot.{u1} α) (Preorder.toLE.{u1} (WithBot.{u1} α) (WithBot.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.max.{u1} α _inst_1 s) M)
+Case conversion may be inaccurate. Consider using '#align finset.max_le Finset.max_leₓ'. -/
protected theorem max_le {M : WithBot α} {s : Finset α} (st : ∀ a ∈ s, (a : WithBot α) ≤ M) :
s.max ≤ M :=
Finset.sup_le st
#align finset.max_le Finset.max_le
--/
#print Finset.min /-
/-- Let `s` be a finset in a linear order. Then `s.min` is the minimum of `s` if `s` is not empty,
@@ -2246,41 +2378,65 @@ theorem mem_of_min {s : Finset α} : ∀ {a : α}, s.min = a → a ∈ s :=
#align finset.mem_of_min Finset.mem_of_min
-/
-#print Finset.min_le /-
+/- warning: finset.min_le -> Finset.min_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.min.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.min.{u1} α _inst_1 s) (WithTop.some.{u1} α a))
+Case conversion may be inaccurate. Consider using '#align finset.min_le Finset.min_leₓ'. -/
theorem min_le {a : α} {s : Finset α} (as : a ∈ s) : s.min ≤ a :=
inf_le as
#align finset.min_le Finset.min_le
--/
-#print Finset.not_mem_of_coe_lt_min /-
+/- warning: finset.not_mem_of_coe_lt_min -> Finset.not_mem_of_coe_lt_min is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithTop.{u1} α) (Preorder.toHasLt.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a) (Finset.min.{u1} α _inst_1 s)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {a : α} {s : Finset.{u1} α}, (LT.lt.{u1} (WithTop.{u1} α) (Preorder.toLT.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (WithTop.some.{u1} α a) (Finset.min.{u1} α _inst_1 s)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
+Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_coe_lt_min Finset.not_mem_of_coe_lt_minₓ'. -/
theorem not_mem_of_coe_lt_min {a : α} {s : Finset α} (h : ↑a < s.min) : a ∉ s :=
mt min_le h.not_le
#align finset.not_mem_of_coe_lt_min Finset.not_mem_of_coe_lt_min
--/
-#print Finset.min_le_of_eq /-
+/- warning: finset.min_le_of_eq -> Finset.min_le_of_eq is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b s) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b s) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) (WithTop.some.{u1} α a)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b)
+Case conversion may be inaccurate. Consider using '#align finset.min_le_of_eq Finset.min_le_of_eqₓ'. -/
theorem min_le_of_eq {s : Finset α} {a b : α} (h₁ : b ∈ s) (h₂ : s.min = a) : a ≤ b :=
WithTop.coe_le_coe.mp <| h₂.ge.trans (min_le h₁)
#align finset.min_le_of_eq Finset.min_le_of_eq
--/
-#print Finset.not_mem_of_lt_min /-
+/- warning: finset.not_mem_of_lt_min -> Finset.not_mem_of_lt_min is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) b)) -> (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {a : α} {b : α}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b) -> (Eq.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 s) (WithTop.some.{u1} α b)) -> (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s))
+Case conversion may be inaccurate. Consider using '#align finset.not_mem_of_lt_min Finset.not_mem_of_lt_minₓ'. -/
theorem not_mem_of_lt_min {s : Finset α} {a b : α} (h₁ : a < b) (h₂ : s.min = ↑b) : a ∉ s :=
Finset.not_mem_of_coe_lt_min <| (WithTop.coe_lt_coe.mpr h₁).trans_eq h₂.symm
#align finset.not_mem_of_lt_min Finset.not_mem_of_lt_min
--/
-#print Finset.min_mono /-
+/- warning: finset.min_mono -> Finset.min_mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) (Finset.min.{u1} α _inst_1 t) (Finset.min.{u1} α _inst_1 s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) (Finset.min.{u1} α _inst_1 t) (Finset.min.{u1} α _inst_1 s))
+Case conversion may be inaccurate. Consider using '#align finset.min_mono Finset.min_monoₓ'. -/
theorem min_mono {s t : Finset α} (st : s ⊆ t) : t.min ≤ s.min :=
inf_mono st
#align finset.min_mono Finset.min_mono
--/
-#print Finset.le_min /-
+/- warning: finset.le_min -> Finset.le_min is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {m : WithTop.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) m ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) a))) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toHasLe.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))))) m (Finset.min.{u1} α _inst_1 s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {m : WithTop.{u1} α} {s : Finset.{u1} α}, (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) m (WithTop.some.{u1} α a))) -> (LE.le.{u1} (WithTop.{u1} α) (Preorder.toLE.{u1} (WithTop.{u1} α) (WithTop.preorder.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))))) m (Finset.min.{u1} α _inst_1 s))
+Case conversion may be inaccurate. Consider using '#align finset.le_min Finset.le_minₓ'. -/
protected theorem le_min {m : WithTop α} {s : Finset α} (st : ∀ a : α, a ∈ s → m ≤ a) : m ≤ s.min :=
Finset.le_inf st
#align finset.le_min Finset.le_min
--/
#print Finset.min' /-
/-- Given a nonempty finset `s` in a linear order `α`, then `s.min' h` is its minimum, as an
@@ -2308,17 +2464,25 @@ theorem min'_mem : s.min' H ∈ s :=
#align finset.min'_mem Finset.min'_mem
-/
-#print Finset.min'_le /-
+/- warning: finset.min'_le -> Finset.min'_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) x H2)) x
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) x H2)) x
+Case conversion may be inaccurate. Consider using '#align finset.min'_le Finset.min'_leₓ'. -/
theorem min'_le (x) (H2 : x ∈ s) : s.min' ⟨x, H2⟩ ≤ x :=
min_le_of_eq H2 (WithTop.coe_untop _ _).symm
#align finset.min'_le Finset.min'_le
--/
-#print Finset.le_min' /-
+/- warning: finset.le_min' -> Finset.le_min' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.min'.{u1} α _inst_1 s H))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.min'.{u1} α _inst_1 s H))
+Case conversion may be inaccurate. Consider using '#align finset.le_min' Finset.le_min'ₓ'. -/
theorem le_min' (x) (H2 : ∀ y ∈ s, x ≤ y) : x ≤ s.min' H :=
H2 _ <| min'_mem _ _
#align finset.le_min' Finset.le_min'
--/
#print Finset.isLeast_min' /-
theorem isLeast_min' : IsLeast (↑s) (s.min' H) :=
@@ -2326,12 +2490,16 @@ theorem isLeast_min' : IsLeast (↑s) (s.min' H) :=
#align finset.is_least_min' Finset.isLeast_min'
-/
-#print Finset.le_min'_iff /-
+/- warning: finset.le_min'_iff -> Finset.le_min'_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y))
+Case conversion may be inaccurate. Consider using '#align finset.le_min'_iff Finset.le_min'_iffₓ'. -/
@[simp]
theorem le_min'_iff {x} : x ≤ s.min' H ↔ ∀ y ∈ s, x ≤ y :=
le_isGLB_iff (isLeast_min' s H).IsGLB
#align finset.le_min'_iff Finset.le_min'_iff
--/
#print Finset.min'_singleton /-
/-- `{a}.min' _` is `a`. -/
@@ -2346,17 +2514,25 @@ theorem max'_mem : s.max' H ∈ s :=
#align finset.max'_mem Finset.max'_mem
-/
-#print Finset.le_max' /-
+/- warning: finset.le_max' -> Finset.le_max' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) x H2))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (x : α) (H2 : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) x H2))
+Case conversion may be inaccurate. Consider using '#align finset.le_max' Finset.le_max'ₓ'. -/
theorem le_max' (x) (H2 : x ∈ s) : x ≤ s.max' ⟨x, H2⟩ :=
le_max_of_eq H2 (WithBot.coe_unbot _ _).symm
#align finset.le_max' Finset.le_max'
--/
-#print Finset.max'_le /-
+/- warning: finset.max'_le -> Finset.max'_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) x)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) (x : α), (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) x)
+Case conversion may be inaccurate. Consider using '#align finset.max'_le Finset.max'_leₓ'. -/
theorem max'_le (x) (H2 : ∀ y ∈ s, y ≤ x) : s.max' H ≤ x :=
H2 _ <| max'_mem _ _
#align finset.max'_le Finset.max'_le
--/
#print Finset.isGreatest_max' /-
theorem isGreatest_max' : IsGreatest (↑s) (s.max' H) :=
@@ -2364,26 +2540,38 @@ theorem isGreatest_max' : IsGreatest (↑s) (s.max' H) :=
#align finset.is_greatest_max' Finset.isGreatest_max'
-/
-#print Finset.max'_le_iff /-
+/- warning: finset.max'_le_iff -> Finset.max'_le_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x))
+Case conversion may be inaccurate. Consider using '#align finset.max'_le_iff Finset.max'_le_iffₓ'. -/
@[simp]
theorem max'_le_iff {x} : s.max' H ≤ x ↔ ∀ y ∈ s, y ≤ x :=
isLUB_le_iff (isGreatest_max' s H).IsLUB
#align finset.max'_le_iff Finset.max'_le_iff
--/
-#print Finset.max'_lt_iff /-
+/- warning: finset.max'_lt_iff -> Finset.max'_lt_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) x) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x))
+Case conversion may be inaccurate. Consider using '#align finset.max'_lt_iff Finset.max'_lt_iffₓ'. -/
@[simp]
theorem max'_lt_iff {x} : s.max' H < x ↔ ∀ y ∈ s, y < x :=
⟨fun Hlt y hy => (s.le_max' y hy).trans_lt Hlt, fun H => H _ <| s.max'_mem _⟩
#align finset.max'_lt_iff Finset.max'_lt_iff
--/
-#print Finset.lt_min'_iff /-
+/- warning: finset.lt_min'_iff -> Finset.lt_min'_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) {x : α}, Iff (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x (Finset.min'.{u1} α _inst_1 s H)) (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y))
+Case conversion may be inaccurate. Consider using '#align finset.lt_min'_iff Finset.lt_min'_iffₓ'. -/
@[simp]
theorem lt_min'_iff : x < s.min' H ↔ ∀ y ∈ s, x < y :=
@max'_lt_iff αᵒᵈ _ _ H _
#align finset.lt_min'_iff Finset.lt_min'_iff
--/
#print Finset.max'_eq_sup' /-
theorem max'_eq_sup' : s.max' H = s.sup' H id :=
@@ -2404,14 +2592,23 @@ theorem max'_singleton (a : α) : ({a} : Finset α).max' (singleton_nonempty _)
#align finset.max'_singleton Finset.max'_singleton
-/
-#print Finset.min'_lt_max' /-
+/- warning: finset.min'_lt_max' -> Finset.min'_lt_max' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) {i : α} {j : α} (H1 : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i s), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) j s) -> (Ne.{succ u1} α i j) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) i H1)) (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) i H1)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) {i : α} {j : α} (H1 : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i s), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) j s) -> (Ne.{succ u1} α i j) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) i H1)) (Finset.max'.{u1} α _inst_1 s (Exists.intro.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) i H1)))
+Case conversion may be inaccurate. Consider using '#align finset.min'_lt_max' Finset.min'_lt_max'ₓ'. -/
theorem min'_lt_max' {i j} (H1 : i ∈ s) (H2 : j ∈ s) (H3 : i ≠ j) :
s.min' ⟨i, H1⟩ < s.max' ⟨i, H1⟩ :=
isGLB_lt_isLUB_of_ne (s.isLeast_min' _).IsGLB (s.isGreatest_max' _).IsLUB H1 H2 H3
#align finset.min'_lt_max' Finset.min'_lt_max'
--/
-#print Finset.min'_lt_max'_of_card /-
+/- warning: finset.min'_lt_max'_of_card -> Finset.min'_lt_max'_of_card is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (h₂ : LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) (Finset.card.{u1} α s)), LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat Nat.hasZero Nat.hasOne (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.one.{0} Nat (NonAssocSemiring.toMulZeroOneClass.{0} Nat (Semiring.toNonAssocSemiring.{0} Nat Nat.semiring)) Nat.nontrivial)) h₂))) (Finset.max'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat Nat.hasZero Nat.hasOne (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.one.{0} Nat (NonAssocSemiring.toMulZeroOneClass.{0} Nat (Semiring.toNonAssocSemiring.{0} Nat Nat.semiring)) Nat.nontrivial)) h₂)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (h₂ : LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) (Finset.card.{u1} α s)), LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{0} Nat 1 (One.toOfNat1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat (LinearOrderedCommMonoidWithZero.toZero.{0} Nat Nat.linearOrderedCommMonoidWithZero) (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.succ Nat.zero)) h₂))) (Finset.max'.{u1} α _inst_1 s (Iff.mp (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (Finset.card.{u1} α s)) (Finset.Nonempty.{u1} α s) (Finset.card_pos.{u1} α s) (lt_trans.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{0} Nat 1 (One.toOfNat1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring))) (Finset.card.{u1} α s) (zero_lt_one.{0} Nat (LinearOrderedCommMonoidWithZero.toZero.{0} Nat Nat.linearOrderedCommMonoidWithZero) (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring) (OrderedSemiring.zeroLEOneClass.{0} Nat Nat.orderedSemiring) (NeZero.succ Nat.zero)) h₂)))
+Case conversion may be inaccurate. Consider using '#align finset.min'_lt_max'_of_card Finset.min'_lt_max'_of_cardₓ'. -/
/-- If there's more than 1 element, the min' is less than the max'. An alternate version of
`min'_lt_max'` which is sometimes more convenient.
-/
@@ -2422,7 +2619,6 @@ theorem min'_lt_max'_of_card (h₂ : 1 < card s) :
rcases one_lt_card.1 h₂ with ⟨a, ha, b, hb, hab⟩
exact s.min'_lt_max' ha hb hab
#align finset.min'_lt_max'_of_card Finset.min'_lt_max'_of_card
--/
#print Finset.map_ofDual_min /-
theorem map_ofDual_min (s : Finset αᵒᵈ) : s.min.map ofDual = (s.image ofDual).max :=
@@ -2492,19 +2688,27 @@ theorem toDual_max' {s : Finset α} (hs : s.Nonempty) :
#align finset.to_dual_max' Finset.toDual_max'
-/
-#print Finset.max'_subset /-
+/- warning: finset.max'_subset -> Finset.max'_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.max'.{u1} α _inst_1 s H) (Finset.max'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.max'.{u1} α _inst_1 s H) (Finset.max'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H))
+Case conversion may be inaccurate. Consider using '#align finset.max'_subset Finset.max'_subsetₓ'. -/
theorem max'_subset {s t : Finset α} (H : s.Nonempty) (hst : s ⊆ t) :
s.max' H ≤ t.max' (H.mono hst) :=
le_max' _ _ (hst (s.max'_mem H))
#align finset.max'_subset Finset.max'_subset
--/
-#print Finset.min'_subset /-
+/- warning: finset.min'_subset -> Finset.min'_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t), LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H)) (Finset.min'.{u1} α _inst_1 s H)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} (H : Finset.Nonempty.{u1} α s) (hst : HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t), LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 t (Finset.Nonempty.mono.{u1} α s t hst H)) (Finset.min'.{u1} α _inst_1 s H)
+Case conversion may be inaccurate. Consider using '#align finset.min'_subset Finset.min'_subsetₓ'. -/
theorem min'_subset {s t : Finset α} (H : s.Nonempty) (hst : s ⊆ t) :
t.min' (H.mono hst) ≤ s.min' H :=
min'_le _ _ (hst (s.min'_mem H))
#align finset.min'_subset Finset.min'_subset
--/
/- warning: finset.max'_insert -> Finset.max'_insert is a dubious translation:
lean 3 declaration is
@@ -2532,19 +2736,27 @@ theorem min'_insert (a : α) (s : Finset α) (H : s.Nonempty) :
exact (is_least_min' _ _).insert _
#align finset.min'_insert Finset.min'_insert
-#print Finset.lt_max'_of_mem_erase_max' /-
+/- warning: finset.lt_max'_of_mem_erase_max' -> Finset.lt_max'_of_mem_erase_max' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.max'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a (Finset.max'.{u1} α _inst_1 s H))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.max'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a (Finset.max'.{u1} α _inst_1 s H))
+Case conversion may be inaccurate. Consider using '#align finset.lt_max'_of_mem_erase_max' Finset.lt_max'_of_mem_erase_max'ₓ'. -/
theorem lt_max'_of_mem_erase_max' [DecidableEq α] {a : α} (ha : a ∈ s.eraseₓ (s.max' H)) :
a < s.max' H :=
lt_of_le_of_ne (le_max' _ _ (mem_of_mem_erase ha)) <| ne_of_mem_of_not_mem ha <| not_mem_erase _ _
#align finset.lt_max'_of_mem_erase_max' Finset.lt_max'_of_mem_erase_max'
--/
-#print Finset.min'_lt_of_mem_erase_min' /-
+/- warning: finset.min'_lt_of_mem_erase_min' -> Finset.min'_lt_of_mem_erase_min' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.min'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (Finset.min'.{u1} α _inst_1 s H) a)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α) (H : Finset.Nonempty.{u1} α s) [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_2 a b) s (Finset.min'.{u1} α _inst_1 s H))) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (Finset.min'.{u1} α _inst_1 s H) a)
+Case conversion may be inaccurate. Consider using '#align finset.min'_lt_of_mem_erase_min' Finset.min'_lt_of_mem_erase_min'ₓ'. -/
theorem min'_lt_of_mem_erase_min' [DecidableEq α] {a : α} (ha : a ∈ s.eraseₓ (s.min' H)) :
s.min' H < a :=
@lt_max'_of_mem_erase_max' αᵒᵈ _ s H _ a ha
#align finset.min'_lt_of_mem_erase_min' Finset.min'_lt_of_mem_erase_min'
--/
#print Finset.max'_image /-
@[simp]
@@ -2585,7 +2797,7 @@ theorem coe_min' {s : Finset α} (hs : s.Nonempty) : ↑(s.min' hs) = s.min :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.Mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.hasMem.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) s))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instMembershipFinset.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => instDecidableEq.{u1} (WithBot.{u1} α) (WithBot.linearOrder.{u1} α _inst_1) a b) (WithBot.some.{u1} α) s))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instMembershipFinset.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => WithBot.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithBot.some.{u1} α) s))
Case conversion may be inaccurate. Consider using '#align finset.max_mem_image_coe Finset.max_mem_image_coeₓ'. -/
theorem max_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
s.max ∈ (s.image coe : Finset (WithBot α)) :=
@@ -2596,7 +2808,7 @@ theorem max_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.Mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.hasMem.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α)))) s))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instMembershipFinset.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => instDecidableEq.{u1} (WithTop.{u1} α) (WithTop.linearOrder.{u1} α _inst_1) a b) (WithTop.some.{u1} α) s))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instMembershipFinset.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => WithTop.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithTop.some.{u1} α) s))
Case conversion may be inaccurate. Consider using '#align finset.min_mem_image_coe Finset.min_mem_image_coeₓ'. -/
theorem min_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
s.min ∈ (s.image coe : Finset (WithTop α)) :=
@@ -2607,7 +2819,7 @@ theorem min_mem_image_coe {s : Finset α} (hs : s.Nonempty) :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.Mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.hasMem.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.hasInsert.{u1} (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b)) (Bot.bot.{u1} (WithBot.{u1} α) (WithBot.hasBot.{u1} α)) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α)))) s))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instMembershipFinset.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instInsertFinset.{u1} (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => instDecidableEq.{u1} (WithBot.{u1} α) (WithBot.linearOrder.{u1} α _inst_1) a b)) (Bot.bot.{u1} (WithBot.{u1} α) (WithBot.bot.{u1} α)) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => instDecidableEq.{u1} (WithBot.{u1} α) (WithBot.linearOrder.{u1} α _inst_1) a b) (WithBot.some.{u1} α) s))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.mem.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instMembershipFinset.{u1} (WithBot.{u1} α)) (Finset.max.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithBot.{u1} α) (Finset.{u1} (WithBot.{u1} α)) (Finset.instInsertFinset.{u1} (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => WithBot.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b)) (Bot.bot.{u1} (WithBot.{u1} α) (WithBot.bot.{u1} α)) (Finset.image.{u1, u1} α (WithBot.{u1} α) (fun (a : WithBot.{u1} α) (b : WithBot.{u1} α) => WithBot.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithBot.some.{u1} α) s))
Case conversion may be inaccurate. Consider using '#align finset.max_mem_insert_bot_image_coe Finset.max_mem_insert_bot_image_coeₓ'. -/
theorem max_mem_insert_bot_image_coe (s : Finset α) :
s.max ∈ (insert ⊥ (s.image coe) : Finset (WithBot α)) :=
@@ -2618,7 +2830,7 @@ theorem max_mem_insert_bot_image_coe (s : Finset α) :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.Mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.hasMem.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.hasInsert.{u1} (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b)) (Top.top.{u1} (WithTop.{u1} α) (WithTop.hasTop.{u1} α)) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => Option.decidableEq.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α)))) s))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instMembershipFinset.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instInsertFinset.{u1} (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => instDecidableEq.{u1} (WithTop.{u1} α) (WithTop.linearOrder.{u1} α _inst_1) a b)) (Top.top.{u1} (WithTop.{u1} α) (WithTop.top.{u1} α)) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => instDecidableEq.{u1} (WithTop.{u1} α) (WithTop.linearOrder.{u1} α _inst_1) a b) (WithTop.some.{u1} α) s))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u1} α), Membership.mem.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instMembershipFinset.{u1} (WithTop.{u1} α)) (Finset.min.{u1} α _inst_1 s) (Insert.insert.{u1, u1} (WithTop.{u1} α) (Finset.{u1} (WithTop.{u1} α)) (Finset.instInsertFinset.{u1} (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => WithTop.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b)) (Top.top.{u1} (WithTop.{u1} α) (WithTop.top.{u1} α)) (Finset.image.{u1, u1} α (WithTop.{u1} α) (fun (a : WithTop.{u1} α) (b : WithTop.{u1} α) => WithTop.decidableEq.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) a b) (WithTop.some.{u1} α) s))
Case conversion may be inaccurate. Consider using '#align finset.min_mem_insert_top_image_coe Finset.min_mem_insert_top_image_coeₓ'. -/
theorem min_mem_insert_top_image_coe (s : Finset α) :
s.min ∈ (insert ⊤ (s.image coe) : Finset (WithTop α)) :=
@@ -2656,7 +2868,7 @@ theorem min_erase_ne_self {s : Finset α} : (s.eraseₓ x).min ≠ x := by
/- warning: finset.exists_next_right -> Finset.exists_next_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y z)))))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y z)))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y))) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y z)))))
Case conversion may be inaccurate. Consider using '#align finset.exists_next_right Finset.exists_next_rightₓ'. -/
@@ -2669,7 +2881,7 @@ theorem exists_next_right {x : α} {s : Finset α} (h : ∃ y ∈ s, x < y) :
/- warning: finset.exists_next_left -> Finset.exists_next_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x) (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z x) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y x) (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z x) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x))) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y x) (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z x) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))
Case conversion may be inaccurate. Consider using '#align finset.exists_next_left Finset.exists_next_leftₓ'. -/
@@ -2680,7 +2892,7 @@ theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
/- warning: finset.card_le_of_interleaved -> Finset.card_le_of_interleaved is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) => And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α t) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α t) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z t) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α t) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))
Case conversion may be inaccurate. Consider using '#align finset.card_le_of_interleaved Finset.card_le_of_interleavedₓ'. -/
@@ -2721,7 +2933,7 @@ theorem card_le_of_interleaved {s t : Finset α}
/- warning: finset.card_le_diff_of_interleaved -> Finset.card_le_diff_of_interleaved is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) => And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.hasSdiff.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b)) t s)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z s) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) z t) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x z) (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) z y)))))) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.hasSdiff.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b)) t s)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z t) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b)) t s)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))
Case conversion may be inaccurate. Consider using '#align finset.card_le_diff_of_interleaved Finset.card_le_diff_of_interleavedₓ'. -/
@@ -2737,7 +2949,12 @@ theorem card_le_diff_of_interleaved {s t : Finset α}
⟨z, mem_sdiff.2 ⟨hzt, fun hzs => hs z hzs ⟨hxz, hzy⟩⟩, hxz, hzy⟩
#align finset.card_le_diff_of_interleaved Finset.card_le_diff_of_interleaved
-#print Finset.induction_on_max /-
+/- warning: finset.induction_on_max -> Finset.induction_on_max is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x a)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x a)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
+Case conversion may be inaccurate. Consider using '#align finset.induction_on_max Finset.induction_on_maxₓ'. -/
/-- Induction principle for `finset`s in a linearly ordered type: a predicate is true on all
`s : finset α` provided that:
@@ -2755,9 +2972,13 @@ theorem induction_on_max [DecidableEq α] {p : Finset α → Prop} (s : Finset
rw [← insert_erase H]
exact step _ _ (fun x => s.lt_max'_of_mem_erase_max' hne) (ihs _ <| erase_ssubset H)
#align finset.induction_on_max Finset.induction_on_max
--/
-#print Finset.induction_on_min /-
+/- warning: finset.induction_on_min -> Finset.induction_on_min is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a x)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {p : (Finset.{u1} α) -> Prop} (s : Finset.{u1} α), (p (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) -> (forall (a : α) (s : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a x)) -> (p s) -> (p (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.instInsertFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s))) -> (p s)
+Case conversion may be inaccurate. Consider using '#align finset.induction_on_min Finset.induction_on_minₓ'. -/
/-- Induction principle for `finset`s in a linearly ordered type: a predicate is true on all
`s : finset α` provided that:
@@ -2769,7 +2990,6 @@ theorem induction_on_min [DecidableEq α] {p : Finset α → Prop} (s : Finset
(step : ∀ a s, (∀ x ∈ s, a < x) → p s → p (insert a s)) : p s :=
@induction_on_max αᵒᵈ _ _ _ s h0 step
#align finset.induction_on_min Finset.induction_on_min
--/
end MaxMin
@@ -2777,7 +2997,12 @@ section MaxMinInductionValue
variable [LinearOrder α] [LinearOrder β]
-#print Finset.induction_on_max_value /-
+/- warning: finset.induction_on_max_value -> Finset.induction_on_max_value is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.hasEmptyc.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s)) -> (forall (x : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x) (f a))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.hasInsert.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.instEmptyCollectionFinset.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s)) -> (forall (x : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f x) (f a))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.instInsertFinset.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
+Case conversion may be inaccurate. Consider using '#align finset.induction_on_max_value Finset.induction_on_max_valueₓ'. -/
/-- Induction principle for `finset`s in any type from which a given function `f` maps to a linearly
ordered type : a predicate is true on all `s : finset α` provided that:
@@ -2800,9 +3025,13 @@ theorem induction_on_max_value [DecidableEq ι] (f : ι → α) {p : Finset ι
rw [hfa]
exact le_max' _ _ (mem_image_of_mem _ <| mem_of_mem_erase hx)
#align finset.induction_on_max_value Finset.induction_on_max_value
--/
-#print Finset.induction_on_min_value /-
+/- warning: finset.induction_on_min_value -> Finset.induction_on_min_value is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.hasEmptyc.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s)) -> (forall (x : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f a) (f x))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.hasInsert.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_3 : DecidableEq.{succ u2} ι] (f : ι -> α) {p : (Finset.{u2} ι) -> Prop} (s : Finset.{u2} ι), (p (EmptyCollection.emptyCollection.{u2} (Finset.{u2} ι) (Finset.instEmptyCollectionFinset.{u2} ι))) -> (forall (a : ι) (s : Finset.{u2} ι), (Not (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s)) -> (forall (x : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f a) (f x))) -> (p s) -> (p (Insert.insert.{u2, u2} ι (Finset.{u2} ι) (Finset.instInsertFinset.{u2} ι (fun (a : ι) (b : ι) => _inst_3 a b)) a s))) -> (p s)
+Case conversion may be inaccurate. Consider using '#align finset.induction_on_min_value Finset.induction_on_min_valueₓ'. -/
/-- Induction principle for `finset`s in any type from which a given function `f` maps to a linearly
ordered type : a predicate is true on all `s : finset α` provided that:
@@ -2814,7 +3043,6 @@ theorem induction_on_min_value [DecidableEq ι] (f : ι → α) {p : Finset ι
(h0 : p ∅) (step : ∀ a s, a ∉ s → (∀ x ∈ s, f a ≤ f x) → p s → p (insert a s)) : p s :=
@induction_on_max_value αᵒᵈ ι _ _ _ _ s h0 step
#align finset.induction_on_min_value Finset.induction_on_min_value
--/
end MaxMinInductionValue
@@ -2824,7 +3052,7 @@ variable [LinearOrder α]
/- warning: finset.exists_max_image -> Finset.exists_max_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => Exists.{0} (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) (fun (H : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) => forall (x' : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x') (f x)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => Exists.{0} (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) (fun (H : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) => forall (x' : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x') (f x)))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => And (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) (forall (x' : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f x') (f x)))))
Case conversion may be inaccurate. Consider using '#align finset.exists_max_image Finset.exists_max_imageₓ'. -/
@@ -2838,7 +3066,7 @@ theorem exists_max_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
/- warning: finset.exists_min_image -> Finset.exists_min_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => Exists.{0} (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) (fun (H : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) => forall (x' : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x) (f x')))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => Exists.{0} (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) (fun (H : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) => forall (x' : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) (f x) (f x')))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] (s : Finset.{u2} β) (f : β -> α), (Finset.Nonempty.{u2} β s) -> (Exists.{succ u2} β (fun (x : β) => And (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) (forall (x' : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x' s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) (f x) (f x')))))
Case conversion may be inaccurate. Consider using '#align finset.exists_min_image Finset.exists_min_imageₓ'. -/
@@ -3132,7 +3360,7 @@ namespace Finset
/- warning: finset.sup_mul_le_mul_sup_of_nonneg -> Finset.sup_mul_le_mul_sup_of_nonneg is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s b)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s b)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s a) (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s b)))
Case conversion may be inaccurate. Consider using '#align finset.sup_mul_le_mul_sup_of_nonneg Finset.sup_mul_le_mul_sup_of_nonnegₓ'. -/
@@ -3145,7 +3373,7 @@ theorem sup_mul_le_mul_sup_of_nonneg [LinearOrderedSemiring α] [OrderBot α] {a
/- warning: finset.mul_inf_le_inf_mul_of_nonneg -> Finset.mul_inf_le_inf_mul_of_nonneg is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s b)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s b)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s a) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s b)) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) _inst_2 s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)))
Case conversion may be inaccurate. Consider using '#align finset.mul_inf_le_inf_mul_of_nonneg Finset.mul_inf_le_inf_mul_of_nonnegₓ'. -/
@@ -3157,7 +3385,7 @@ theorem mul_inf_le_inf_mul_of_nonneg [LinearOrderedSemiring α] [OrderTop α] {a
/- warning: finset.sup'_mul_le_mul_sup'_of_nonneg -> Finset.sup'_mul_le_mul_sup'_of_nonneg is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι s), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H a) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H b)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι s), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H a) (Finset.sup'.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H b)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι s), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H a) (Finset.sup'.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H b)))
Case conversion may be inaccurate. Consider using '#align finset.sup'_mul_le_mul_sup'_of_nonneg Finset.sup'_mul_le_mul_sup'_of_nonnegₓ'. -/
@@ -3170,7 +3398,7 @@ theorem sup'_mul_le_mul_sup'_of_nonneg [LinearOrderedSemiring α] {a b : ι →
/- warning: finset.inf'_mul_le_mul_inf'_of_nonneg -> Finset.inf'_mul_le_mul_inf'_of_nonneg is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι s), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H a) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H b)) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : LinearOrderedSemiring.{u1} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι s), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (a i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))))) (b i))) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (OrderedCancelAddCommMonoid.toPartialOrder.{u1} α (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1))))))) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H a) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H b)) (Finset.inf'.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α (LinearOrderedAddCommMonoid.toLinearOrder.{u1} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u1} α _inst_1)))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u2, u1} ι (fun (ᾰ : ι) => α) (fun (i : ι) => Distrib.toHasMul.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α (StrictOrderedSemiring.toSemiring.{u1} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} α _inst_1)))))))) a b)))
but is expected to have type
forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : LinearOrderedSemiring.{u2} α] {a : ι -> α} {b : ι -> α} (s : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι s), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (a i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (b i))) -> (LE.le.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (StrictOrderedSemiring.toPartialOrder.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1)))))) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H a) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H b)) (Finset.inf'.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α (instDistribLattice.{u2} α (LinearOrderedAddCommMonoid.toLinearOrder.{u2} α (LinearOrderedSemiring.toLinearOrderedAddCommMonoid.{u2} α _inst_1))))) s H (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (ι -> α) (ι -> α) (ι -> α) (instHMul.{max u2 u1} (ι -> α) (Pi.instMul.{u1, u2} ι (fun (ᾰ : ι) => α) (fun (i : ι) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α (StrictOrderedSemiring.toSemiring.{u2} α (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} α _inst_1))))))) a b)))
Case conversion may be inaccurate. Consider using '#align finset.inf'_mul_le_mul_inf'_of_nonneg Finset.inf'_mul_le_mul_inf'_of_nonnegₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ad820c4997738e2f542f8a20f32911f52020e26
@@ -2546,12 +2546,7 @@ theorem min'_lt_of_mem_erase_min' [DecidableEq α] {a : α} (ha : a ∈ s.erase
#align finset.min'_lt_of_mem_erase_min' Finset.min'_lt_of_mem_erase_min'
-/
-/- warning: finset.max'_image -> Finset.max'_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : LinearOrder.{u2} β] {f : α -> β}, (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) f) -> (forall (s : Finset.{u1} α) (h : Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) f s)), Eq.{succ u2} β (Finset.max'.{u2} β _inst_2 (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) f s) h) (f (Finset.max'.{u1} α _inst_1 s (Iff.mp (Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) f s)) (Finset.Nonempty.{u1} α s) (Finset.Nonempty.image_iff.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) s f) h))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : LinearOrder.{u2} β] {f : α -> β}, (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) f) -> (forall (s : Finset.{u1} α) (h : Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) f s)), Eq.{succ u2} β (Finset.max'.{u2} β _inst_2 (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) f s) h) (f (Finset.max'.{u1} α _inst_1 s (Iff.mp (Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) f s)) (Finset.Nonempty.{u1} α s) (Finset.Nonempty.image_iff.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) s f) h))))
-Case conversion may be inaccurate. Consider using '#align finset.max'_image Finset.max'_imageₓ'. -/
+#print Finset.max'_image /-
@[simp]
theorem max'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
(h : (s.image f).Nonempty) : (s.image f).max' h = f (s.max' ((Nonempty.image_iff f).mp h)) :=
@@ -2561,13 +2556,9 @@ theorem max'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finse
obtain ⟨x, hx, rfl⟩ := mem_image.mp hy
exact hf (le_max' _ _ hx)
#align finset.max'_image Finset.max'_image
+-/
-/- warning: finset.min'_image -> Finset.min'_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : LinearOrder.{u2} β] {f : α -> β}, (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) f) -> (forall (s : Finset.{u1} α) (h : Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) f s)), Eq.{succ u2} β (Finset.min'.{u2} β _inst_2 (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) f s) h) (f (Finset.min'.{u1} α _inst_1 s (Iff.mp (Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) f s)) (Finset.Nonempty.{u1} α s) (Finset.Nonempty.image_iff.{u1, u2} α β (fun (a : β) (b : β) => Eq.decidable.{u2} β _inst_2 a b) s f) h))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : LinearOrder.{u2} β] {f : α -> β}, (Monotone.{u1, u2} α β (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) f) -> (forall (s : Finset.{u1} α) (h : Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) f s)), Eq.{succ u2} β (Finset.min'.{u2} β _inst_2 (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) f s) h) (f (Finset.min'.{u1} α _inst_1 s (Iff.mp (Finset.Nonempty.{u2} β (Finset.image.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) f s)) (Finset.Nonempty.{u1} α s) (Finset.Nonempty.image_iff.{u1, u2} α β (fun (a : β) (b : β) => instDecidableEq.{u2} β _inst_2 a b) s f) h))))
-Case conversion may be inaccurate. Consider using '#align finset.min'_image Finset.min'_imageₓ'. -/
+#print Finset.min'_image /-
@[simp]
theorem min'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
(h : (s.image f).Nonempty) : (s.image f).min' h = f (s.min' ((Nonempty.image_iff f).mp h)) :=
@@ -2576,6 +2567,7 @@ theorem min'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finse
convert h
rw [nonempty.image_iff]
#align finset.min'_image Finset.min'_image
+-/
#print Finset.coe_max' /-
theorem coe_max' {s : Finset α} (hs : s.Nonempty) : ↑(s.max' hs) = s.max :=
@@ -2633,32 +2625,19 @@ theorem min_mem_insert_top_image_coe (s : Finset α) :
mem_insert.2 <| s.eq_empty_or_nonempty.imp min_eq_top.2 min_mem_image_coe
#align finset.min_mem_insert_top_image_coe Finset.min_mem_insert_top_image_coe
-/- warning: finset.max'_erase_ne_self -> Finset.max'_erase_ne_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α} (s0 : Finset.Nonempty.{u1} α (Finset.erase.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) s x)), Ne.{succ u1} α (Finset.max'.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) s x) s0) x
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α} (s0 : Finset.Nonempty.{u1} α (Finset.erase.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) s x)), Ne.{succ u1} α (Finset.max'.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) s x) s0) x
-Case conversion may be inaccurate. Consider using '#align finset.max'_erase_ne_self Finset.max'_erase_ne_selfₓ'. -/
+#print Finset.max'_erase_ne_self /-
theorem max'_erase_ne_self {s : Finset α} (s0 : (s.eraseₓ x).Nonempty) : (s.eraseₓ x).max' s0 ≠ x :=
ne_of_mem_erase (max'_mem _ s0)
#align finset.max'_erase_ne_self Finset.max'_erase_ne_self
+-/
-/- warning: finset.min'_erase_ne_self -> Finset.min'_erase_ne_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α} (s0 : Finset.Nonempty.{u1} α (Finset.erase.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) s x)), Ne.{succ u1} α (Finset.min'.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) s x) s0) x
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α} (s0 : Finset.Nonempty.{u1} α (Finset.erase.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) s x)), Ne.{succ u1} α (Finset.min'.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) s x) s0) x
-Case conversion may be inaccurate. Consider using '#align finset.min'_erase_ne_self Finset.min'_erase_ne_selfₓ'. -/
+#print Finset.min'_erase_ne_self /-
theorem min'_erase_ne_self {s : Finset α} (s0 : (s.eraseₓ x).Nonempty) : (s.eraseₓ x).min' s0 ≠ x :=
ne_of_mem_erase (min'_mem _ s0)
#align finset.min'_erase_ne_self Finset.min'_erase_ne_self
+-/
-/- warning: finset.max_erase_ne_self -> Finset.max_erase_ne_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, Ne.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) s x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithBot.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithBot.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithBot.{u1} α) (WithBot.hasCoeT.{u1} α))) x)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, Ne.{succ u1} (WithBot.{u1} α) (Finset.max.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) s x)) (WithBot.some.{u1} α x)
-Case conversion may be inaccurate. Consider using '#align finset.max_erase_ne_self Finset.max_erase_ne_selfₓ'. -/
+#print Finset.max_erase_ne_self /-
theorem max_erase_ne_self {s : Finset α} : (s.eraseₓ x).max ≠ x :=
by
by_cases s0 : (s.erase x).Nonempty
@@ -2667,16 +2646,13 @@ theorem max_erase_ne_self {s : Finset α} : (s.eraseₓ x).max ≠ x :=
· rw [not_nonempty_iff_eq_empty.mp s0, max_empty]
exact WithBot.bot_ne_coe
#align finset.max_erase_ne_self Finset.max_erase_ne_self
+-/
-/- warning: finset.min_erase_ne_self -> Finset.min_erase_ne_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, Ne.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => Eq.decidable.{u1} α _inst_1 a b) s x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (WithTop.{u1} α) (HasLiftT.mk.{succ u1, succ u1} α (WithTop.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} α (WithTop.{u1} α) (WithTop.hasCoeT.{u1} α))) x)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, Ne.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) s x)) (WithTop.some.{u1} α x)
-Case conversion may be inaccurate. Consider using '#align finset.min_erase_ne_self Finset.min_erase_ne_selfₓ'. -/
+#print Finset.min_erase_ne_self /-
theorem min_erase_ne_self {s : Finset α} : (s.eraseₓ x).min ≠ x := by
convert@max_erase_ne_self αᵒᵈ _ _ _
#align finset.min_erase_ne_self Finset.min_erase_ne_self
+-/
/- warning: finset.exists_next_right -> Finset.exists_next_right is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -384,7 +384,7 @@ theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multis
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2483 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2485 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2483 x._@.Mathlib.Data.Finset.Lattice._hyg.2485) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2519 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2521 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2519 x._@.Mathlib.Data.Finset.Lattice._hyg.2521) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
@@ -427,7 +427,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2837 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2839 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2837 x._@.Mathlib.Data.Finset.Lattice._hyg.2839) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
+ forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2877 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2879 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2877 x._@.Mathlib.Data.Finset.Lattice._hyg.2879) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
Case conversion may be inaccurate. Consider using '#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directedₓ'. -/
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
@@ -823,7 +823,7 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5310 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5312 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5310 x._@.Mathlib.Data.Finset.Lattice._hyg.5312) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5388 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5390 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5388 x._@.Mathlib.Data.Finset.Lattice._hyg.5390) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
@@ -956,7 +956,7 @@ theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_right Finset.disjoint_sup_rightₓ'. -/
protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → Disjoint a (f i) := by
simp only [disjoint_iff, sup_inf_distrib_left, Finset.sup_eq_bot_iff]
@@ -966,12 +966,18 @@ protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_left Finset.disjoint_sup_leftₓ'. -/
protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → Disjoint (f i) a := by
simp only [disjoint_iff, sup_inf_distrib_right, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
+/- warning: finset.sup_inf_sup -> Finset.sup_inf_sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.sup.{u1, u3} α κ (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.sup.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u3}} {κ : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u3} ι) (t : Finset.{u2} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Finset.sup.{u1, u3} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.sup.{u1, u2} α κ (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.sup.{u1, max u3 u2} α (Prod.{u3, u2} ι κ) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u3, u2} ι κ s t) (fun (i : Prod.{u3, u2} ι κ) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (f (Prod.fst.{u3, u2} ι κ i)) (g (Prod.snd.{u3, u2} ι κ i))))
+Case conversion may be inaccurate. Consider using '#align finset.sup_inf_sup Finset.sup_inf_supₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
s.sup f ⊓ t.sup g = (s ×ˢ t).sup fun i => f i.1 ⊓ g i.2 := by
@@ -1006,16 +1012,34 @@ theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
+/- warning: finset.codisjoint_inf_right -> Finset.codisjoint_inf_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
+but is expected to have type
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {f : ι -> α} {s : Finset.{u1} ι} {a : α}, Iff (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
+Case conversion may be inaccurate. Consider using '#align finset.codisjoint_inf_right Finset.codisjoint_inf_rightₓ'. -/
protected theorem codisjoint_inf_right :
Codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint a (f i) :=
@Finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
#align finset.codisjoint_inf_right Finset.codisjoint_inf_right
+/- warning: finset.codisjoint_inf_left -> Finset.codisjoint_inf_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {f : ι -> α} {s : Finset.{u2} ι} {a : α}, Iff (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Codisjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
+but is expected to have type
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {f : ι -> α} {s : Finset.{u1} ι} {a : α}, Iff (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Codisjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
+Case conversion may be inaccurate. Consider using '#align finset.codisjoint_inf_left Finset.codisjoint_inf_leftₓ'. -/
protected theorem codisjoint_inf_left :
Codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint (f i) a :=
@Finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
+/- warning: finset.inf_sup_inf -> Finset.inf_sup_inf is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} {κ : Type.{u3}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (t : Finset.{u3} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.inf.{u1, u3} α κ (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.inf.{u1, max u2 u3} α (Prod.{u2, u3} ι κ) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u2, u3} ι κ s t) (fun (i : Prod.{u2, u3} ι κ) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u2, u3} ι κ i)) (g (Prod.snd.{u2, u3} ι κ i))))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u3}} {κ : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u3} ι) (t : Finset.{u2} κ) (f : ι -> α) (g : κ -> α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u3} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) (Finset.inf.{u1, u2} α κ (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 t g)) (Finset.inf.{u1, max u3 u2} α (Prod.{u3, u2} ι κ) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 (Finset.product.{u3, u2} ι κ s t) (fun (i : Prod.{u3, u2} ι κ) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f (Prod.fst.{u3, u2} ι κ i)) (g (Prod.snd.{u3, u2} ι κ i))))
+Case conversion may be inaccurate. Consider using '#align finset.inf_sup_inf Finset.inf_sup_infₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
s.inf f ⊔ t.inf g = (s ×ˢ t).inf fun i => f i.1 ⊔ g i.2 :=
@@ -1028,6 +1052,12 @@ section BoundedOrder
variable [BoundedOrder α] [DecidableEq ι]
+/- warning: finset.inf_sup -> Finset.inf_sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.sup.{u1, u3} α (κ i) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.sup.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.inf.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (g ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (HasLiftT.mk.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (CoeTCₓ.coe.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeBase.{succ u2, succ u2} (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s))))) i) (Subtype.prop.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.sup.{u1, u3} α (κ i) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.sup.{u1, max u2 u3} α (forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u3, u2} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) => Finset.inf.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i)))))
+Case conversion may be inaccurate. Consider using '#align finset.inf_sup Finset.inf_supₓ'. -/
--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.inf fun i => (t i).sup (f i)) =
@@ -1058,6 +1088,12 @@ theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i))
· simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
#align finset.inf_sup Finset.inf_sup
+/- warning: finset.sup_inf -> Finset.sup_inf is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.inf.{u1, u3} α (κ i) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.inf.{u1, max u2 u3} α (forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u2, u3} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) a s) -> (κ a)) => Finset.sup.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) x s) i)))))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : BoundedOrder.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u2} ι] {κ : ι -> Type.{u3}} (s : Finset.{u2} ι) (t : forall (i : ι), Finset.{u3} (κ i)) (f : forall (i : ι), (κ i) -> α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) s (fun (i : ι) => Finset.inf.{u1, u3} α (κ i) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (t i) (f i))) (Finset.inf.{u1, max u2 u3} α (forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.pi.{u3, u2} ι (fun (i : ι) => κ i) (fun (a : ι) (b : ι) => _inst_3 a b) s t) (fun (g : forall (a : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) a s) -> (κ a)) => Finset.sup.{u1, u2} α (Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2) (Finset.attach.{u2} ι s) (fun (i : Subtype.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s)) => f (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (g (Subtype.val.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i) (Subtype.property.{succ u2} ι (fun (x : ι) => Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) x s) i)))))
+Case conversion may be inaccurate. Consider using '#align finset.sup_inf Finset.sup_infₓ'. -/
theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
@inf_sup αᵒᵈ _ _ _ _ _ _ _ _
@@ -1113,30 +1149,52 @@ theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [inf_cons, inf_cons, h, inf_sdiff]
#align finset.inf_sdiff_right Finset.inf_sdiff_right
+/- warning: finset.inf_himp_right -> Finset.inf_himp_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s f) a)
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f) a)
+Case conversion may be inaccurate. Consider using '#align finset.inf_himp_right Finset.inf_himp_rightₓ'. -/
theorem inf_himp_right (s : Finset ι) (f : ι → α) (a : α) :
(s.inf fun b => f b ⇨ a) = s.sup f ⇨ a :=
@sup_sdiff_left αᵒᵈ _ _ _ _ _
#align finset.inf_himp_right Finset.inf_himp_right
+/- warning: finset.sup_himp_right -> Finset.sup_himp_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f) a))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (f b) a)) (HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f) a))
+Case conversion may be inaccurate. Consider using '#align finset.sup_himp_right Finset.sup_himp_rightₓ'. -/
theorem sup_himp_right (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.sup fun b => f b ⇨ a) = s.inf f ⇨ a :=
@inf_sdiff_left αᵒᵈ _ _ _ hs _ _
#align finset.sup_himp_right Finset.sup_himp_right
+/- warning: finset.sup_himp_left -> Finset.sup_himp_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) a (f b))) (HImp.himp.{u1} α (BooleanAlgebra.toHasHimp.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s f)))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) a (f b))) (HImp.himp.{u1} α (BooleanAlgebra.toHImp.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f)))
+Case conversion may be inaccurate. Consider using '#align finset.sup_himp_left Finset.sup_himp_leftₓ'. -/
theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.sup fun b => a ⇨ f b) = a ⇨ s.sup f :=
@inf_sdiff_right αᵒᵈ _ _ _ hs _ _
#align finset.sup_himp_left Finset.sup_himp_left
+#print Finset.compl_sup /-
@[simp]
protected theorem compl_sup (s : Finset ι) (f : ι → α) : s.sup fᶜ = s.inf fun i => f iᶜ :=
map_finset_sup (OrderIso.compl α) _ _
#align finset.compl_sup Finset.compl_sup
+-/
+#print Finset.compl_inf /-
@[simp]
protected theorem compl_inf (s : Finset ι) (f : ι → α) : s.inf fᶜ = s.sup fun i => f iᶜ :=
map_finset_inf (OrderIso.compl α) _ _
#align finset.compl_inf Finset.compl_inf
+-/
end BooleanAlgebra
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -209,17 +209,17 @@ theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
#align finset.le_sup_of_le Finset.le_sup_of_le
-/
-/- warning: finset.sup_bUnion -> Finset.sup_bunionᵢ is a dubious translation:
+/- warning: finset.sup_bUnion -> Finset.sup_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 (t x) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 (t x) f))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 (Finset.bunionᵢ.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 (t x) f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_bUnion Finset.sup_bunionᵢₓ'. -/
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.sup.{u1, u3} α β _inst_1 _inst_2 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u3} α β _inst_1 _inst_2 (t x) f))
+Case conversion may be inaccurate. Consider using '#align finset.sup_bUnion Finset.sup_biUnionₓ'. -/
@[simp]
-theorem sup_bunionᵢ [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
- (s.bunionᵢ t).sup f = s.sup fun x => (t x).sup f :=
+theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
+ (s.biUnion t).sup f = s.sup fun x => (t x).sup f :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
-#align finset.sup_bUnion Finset.sup_bunionᵢ
+#align finset.sup_bUnion Finset.sup_biUnion
#print Finset.sup_const /-
theorem sup_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.sup fun _ => c) = c :=
@@ -479,58 +479,58 @@ protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥
end Sup
-/- warning: finset.sup_eq_supr -> Finset.sup_eq_supᵢ is a dubious translation:
+/- warning: finset.sup_eq_supr -> Finset.sup_eq_iSup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (a : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (a : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (supᵢ.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (a : α) => supᵢ.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_eq_supr Finset.sup_eq_supᵢₓ'. -/
-theorem sup_eq_supᵢ [CompleteLattice β] (s : Finset α) (f : α → β) : s.sup f = ⨆ a ∈ s, f a :=
- le_antisymm (Finset.sup_le fun a ha => le_supᵢ_of_le a <| le_supᵢ _ ha)
- (supᵢ_le fun a => supᵢ_le fun ha => le_sup ha)
-#align finset.sup_eq_supr Finset.sup_eq_supᵢ
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iSup.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (a : α) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
+Case conversion may be inaccurate. Consider using '#align finset.sup_eq_supr Finset.sup_eq_iSupₓ'. -/
+theorem sup_eq_iSup [CompleteLattice β] (s : Finset α) (f : α → β) : s.sup f = ⨆ a ∈ s, f a :=
+ le_antisymm (Finset.sup_le fun a ha => le_iSup_of_le a <| le_iSup _ ha)
+ (iSup_le fun a => iSup_le fun ha => le_sup ha)
+#align finset.sup_eq_supr Finset.sup_eq_iSup
-/- warning: finset.sup_id_eq_Sup -> Finset.sup_id_eq_supₛ is a dubious translation:
+/- warning: finset.sup_id_eq_Sup -> Finset.sup_id_eq_sSup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.supₛ.{u1} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.sSup.{u1} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.supₛ.{u1} α (CompleteLattice.toSupSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
-Case conversion may be inaccurate. Consider using '#align finset.sup_id_eq_Sup Finset.sup_id_eq_supₛₓ'. -/
-theorem sup_id_eq_supₛ [CompleteLattice α] (s : Finset α) : s.sup id = supₛ s := by
- simp [supₛ_eq_supᵢ, sup_eq_supᵢ]
-#align finset.sup_id_eq_Sup Finset.sup_id_eq_supₛ
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (SupSet.sSup.{u1} α (CompleteLattice.toSupSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
+Case conversion may be inaccurate. Consider using '#align finset.sup_id_eq_Sup Finset.sup_id_eq_sSupₓ'. -/
+theorem sup_id_eq_sSup [CompleteLattice α] (s : Finset α) : s.sup id = sSup s := by
+ simp [sSup_eq_iSup, sup_eq_iSup]
+#align finset.sup_id_eq_Sup Finset.sup_id_eq_sSup
-/- warning: finset.sup_id_set_eq_sUnion -> Finset.sup_id_set_eq_unionₛ is a dubious translation:
+/- warning: finset.sup_id_set_eq_sUnion -> Finset.sup_id_set_eq_sUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.sup.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s (id.{succ u1} (Set.{u1} α))) (Set.unionₛ.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) s))
+ forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.sup.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s (id.{succ u1} (Set.{u1} α))) (Set.sUnion.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) s))
but is expected to have type
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.sup.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (SemilatticeSup.toPartialOrder.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s (id.{succ u1} (Set.{u1} α))) (Set.unionₛ.{u1} α (Finset.toSet.{u1} (Set.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_unionₛₓ'. -/
-theorem sup_id_set_eq_unionₛ (s : Finset (Set α)) : s.sup id = ⋃₀ ↑s :=
- sup_id_eq_supₛ _
-#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_unionₛ
+ forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.sup.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (SemilatticeSup.toPartialOrder.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s (id.{succ u1} (Set.{u1} α))) (Set.sUnion.{u1} α (Finset.toSet.{u1} (Set.{u1} α) s))
+Case conversion may be inaccurate. Consider using '#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_sUnionₓ'. -/
+theorem sup_id_set_eq_sUnion (s : Finset (Set α)) : s.sup id = ⋃₀ ↑s :=
+ sup_id_eq_sSup _
+#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_sUnion
-/- warning: finset.sup_set_eq_bUnion -> Finset.sup_set_eq_bunionᵢ is a dubious translation:
+/- warning: finset.sup_set_eq_bUnion -> Finset.sup_set_eq_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Finset.sup.{u2, u1} (Set.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Set.{u2} β) (CompleteLattice.toLattice.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u2} (Set.{u2} β) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u2} (Set.{u2} β) (Set.booleanAlgebra.{u2} β))) s f) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Finset.sup.{u2, u1} (Set.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Set.{u2} β) (CompleteLattice.toLattice.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u2} (Set.{u2} β) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u2} (Set.{u2} β) (Set.booleanAlgebra.{u2} β))) s f) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Finset.sup.{u1, u2} (Set.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} β) (Preorder.toLE.{u1} (Set.{u1} β) (PartialOrder.toPreorder.{u1} (Set.{u1} β) (SemilatticeSup.toPartialOrder.{u1} (Set.{u1} β) (Lattice.toSemilatticeSup.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β))))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) s f) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_set_eq_bUnion Finset.sup_set_eq_bunionᵢₓ'. -/
+ forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Finset.sup.{u1, u2} (Set.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} β) (Preorder.toLE.{u1} (Set.{u1} β) (PartialOrder.toPreorder.{u1} (Set.{u1} β) (SemilatticeSup.toPartialOrder.{u1} (Set.{u1} β) (Lattice.toSemilatticeSup.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β))))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) s f) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x)))
+Case conversion may be inaccurate. Consider using '#align finset.sup_set_eq_bUnion Finset.sup_set_eq_biUnionₓ'. -/
@[simp]
-theorem sup_set_eq_bunionᵢ (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x ∈ s, f x :=
- sup_eq_supᵢ _ _
-#align finset.sup_set_eq_bUnion Finset.sup_set_eq_bunionᵢ
+theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x ∈ s, f x :=
+ sup_eq_iSup _ _
+#align finset.sup_set_eq_bUnion Finset.sup_set_eq_biUnion
-/- warning: finset.sup_eq_Sup_image -> Finset.sup_eq_supₛ_image is a dubious translation:
+/- warning: finset.sup_eq_Sup_image -> Finset.sup_eq_sSup_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.supₛ.{u2} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.sSup.{u2} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.supₛ.{u2} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
-Case conversion may be inaccurate. Consider using '#align finset.sup_eq_Sup_image Finset.sup_eq_supₛ_imageₓ'. -/
-theorem sup_eq_supₛ_image [CompleteLattice β] (s : Finset α) (f : α → β) :
- s.sup f = supₛ (f '' s) := by
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.sup.{u2, u1} β α (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (SupSet.sSup.{u2} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
+Case conversion may be inaccurate. Consider using '#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_imageₓ'. -/
+theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
+ s.sup f = sSup (f '' s) := by
classical rw [← Finset.coe_image, ← sup_id_eq_Sup, sup_image, Function.comp.left_id]
-#align finset.sup_eq_Sup_image Finset.sup_eq_supₛ_image
+#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_image
/-! ### inf -/
@@ -659,17 +659,17 @@ theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β
Finset.cons_induction_on s (map_top f) fun i s _ h => by rw [inf_cons, inf_cons, map_inf, h]
#align map_finset_inf map_finset_inf
-/- warning: finset.inf_bUnion -> Finset.inf_bunionᵢ is a dubious translation:
+/- warning: finset.inf_bUnion -> Finset.inf_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 (t x) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 (t x) f))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 (Finset.bunionᵢ.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 (t x) f))
-Case conversion may be inaccurate. Consider using '#align finset.inf_bUnion Finset.inf_bunionᵢₓ'. -/
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u3} β] (s : Finset.{u2} γ) (t : γ -> (Finset.{u3} β)), Eq.{succ u1} α (Finset.inf.{u1, u3} α β _inst_1 _inst_2 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u2} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u3} α β _inst_1 _inst_2 (t x) f))
+Case conversion may be inaccurate. Consider using '#align finset.inf_bUnion Finset.inf_biUnionₓ'. -/
@[simp]
-theorem inf_bunionᵢ [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
- (s.bunionᵢ t).inf f = s.inf fun x => (t x).inf f :=
- @sup_bunionᵢ αᵒᵈ _ _ _ _ _ _ _ _
-#align finset.inf_bUnion Finset.inf_bunionᵢ
+theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
+ (s.biUnion t).inf f = s.inf fun x => (t x).inf f :=
+ @sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.inf_bUnion Finset.inf_biUnion
#print Finset.inf_const /-
theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c :=
@@ -1258,57 +1258,57 @@ end OrderTop
end LinearOrder
-/- warning: finset.inf_eq_infi -> Finset.inf_eq_infᵢ is a dubious translation:
+/- warning: finset.inf_eq_infi -> Finset.inf_eq_iInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (a : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (a : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => f a)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (infᵢ.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (a : α) => infᵢ.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_eq_infi Finset.inf_eq_infᵢₓ'. -/
-theorem inf_eq_infᵢ [CompleteLattice β] (s : Finset α) (f : α → β) : s.inf f = ⨅ a ∈ s, f a :=
- @sup_eq_supᵢ _ βᵒᵈ _ _ _
-#align finset.inf_eq_infi Finset.inf_eq_infᵢ
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (iInf.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (a : α) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) => f a)))
+Case conversion may be inaccurate. Consider using '#align finset.inf_eq_infi Finset.inf_eq_iInfₓ'. -/
+theorem inf_eq_iInf [CompleteLattice β] (s : Finset α) (f : α → β) : s.inf f = ⨅ a ∈ s, f a :=
+ @sup_eq_iSup _ βᵒᵈ _ _ _
+#align finset.inf_eq_infi Finset.inf_eq_iInf
-/- warning: finset.inf_id_eq_Inf -> Finset.inf_id_eq_infₛ is a dubious translation:
+/- warning: finset.inf_id_eq_Inf -> Finset.inf_id_eq_sInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.infₛ.{u1} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.sInf.{u1} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.infₛ.{u1} α (CompleteLattice.toInfSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
-Case conversion may be inaccurate. Consider using '#align finset.inf_id_eq_Inf Finset.inf_id_eq_infₛₓ'. -/
-theorem inf_id_eq_infₛ [CompleteLattice α] (s : Finset α) : s.inf id = infₛ s :=
- @sup_id_eq_supₛ αᵒᵈ _ _
-#align finset.inf_id_eq_Inf Finset.inf_id_eq_infₛ
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} α (Finset.inf.{u1, u1} α α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1)) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (CompleteLattice.toLattice.{u1} α _inst_1))))) (CompleteLattice.toBoundedOrder.{u1} α _inst_1)) s (id.{succ u1} α)) (InfSet.sInf.{u1} α (CompleteLattice.toInfSet.{u1} α _inst_1) (Finset.toSet.{u1} α s))
+Case conversion may be inaccurate. Consider using '#align finset.inf_id_eq_Inf Finset.inf_id_eq_sInfₓ'. -/
+theorem inf_id_eq_sInf [CompleteLattice α] (s : Finset α) : s.inf id = sInf s :=
+ @sup_id_eq_sSup αᵒᵈ _ _
+#align finset.inf_id_eq_Inf Finset.inf_id_eq_sInf
-/- warning: finset.inf_id_set_eq_sInter -> Finset.inf_id_set_eq_interₛ is a dubious translation:
+/- warning: finset.inf_id_set_eq_sInter -> Finset.inf_id_set_eq_sInter is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.inf.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (Set.orderTop.{u1} α) s (id.{succ u1} (Set.{u1} α))) (Set.interₛ.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) s))
+ forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.inf.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (Set.orderTop.{u1} α) s (id.{succ u1} (Set.{u1} α))) (Set.sInter.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) s))
but is expected to have type
- forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.inf.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Set.instOrderTopSetInstLESet.{u1} α) s (id.{succ u1} (Set.{u1} α))) (Set.interₛ.{u1} α (Finset.toSet.{u1} (Set.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_interₛₓ'. -/
-theorem inf_id_set_eq_interₛ (s : Finset (Set α)) : s.inf id = ⋂₀ ↑s :=
- inf_id_eq_infₛ _
-#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_interₛ
+ forall {α : Type.{u1}} (s : Finset.{u1} (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.inf.{u1, u1} (Set.{u1} α) (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Set.instOrderTopSetInstLESet.{u1} α) s (id.{succ u1} (Set.{u1} α))) (Set.sInter.{u1} α (Finset.toSet.{u1} (Set.{u1} α) s))
+Case conversion may be inaccurate. Consider using '#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_sInterₓ'. -/
+theorem inf_id_set_eq_sInter (s : Finset (Set α)) : s.inf id = ⋂₀ ↑s :=
+ inf_id_eq_sInf _
+#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_sInter
-/- warning: finset.inf_set_eq_bInter -> Finset.inf_set_eq_interᵢ is a dubious translation:
+/- warning: finset.inf_set_eq_bInter -> Finset.inf_set_eq_iInter is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Finset.inf.{u2, u1} (Set.{u2} β) α (Lattice.toSemilatticeInf.{u2} (Set.{u2} β) (CompleteLattice.toLattice.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (Set.orderTop.{u2} β) s f) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Finset.inf.{u2, u1} (Set.{u2} β) α (Lattice.toSemilatticeInf.{u2} (Set.{u2} β) (CompleteLattice.toLattice.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (Set.orderTop.{u2} β) s f) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Finset.inf.{u1, u2} (Set.{u1} β) α (Lattice.toSemilatticeInf.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (Set.instOrderTopSetInstLESet.{u1} β) s f) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_set_eq_bInter Finset.inf_set_eq_interᵢₓ'. -/
+ forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Finset.inf.{u1, u2} (Set.{u1} β) α (Lattice.toSemilatticeInf.{u1} (Set.{u1} β) (CompleteLattice.toLattice.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (Set.instOrderTopSetInstLESet.{u1} β) s f) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x)))
+Case conversion may be inaccurate. Consider using '#align finset.inf_set_eq_bInter Finset.inf_set_eq_iInterₓ'. -/
@[simp]
-theorem inf_set_eq_interᵢ (s : Finset α) (f : α → Set β) : s.inf f = ⋂ x ∈ s, f x :=
- inf_eq_infᵢ _ _
-#align finset.inf_set_eq_bInter Finset.inf_set_eq_interᵢ
+theorem inf_set_eq_iInter (s : Finset α) (f : α → Set β) : s.inf f = ⋂ x ∈ s, f x :=
+ inf_eq_iInf _ _
+#align finset.inf_set_eq_bInter Finset.inf_set_eq_iInter
-/- warning: finset.inf_eq_Inf_image -> Finset.inf_eq_infₛ_image is a dubious translation:
+/- warning: finset.inf_eq_Inf_image -> Finset.inf_eq_sInf_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.infₛ.{u2} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.sInf.{u2} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Set.image.{u1, u2} α β f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.infₛ.{u2} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_eq_Inf_image Finset.inf_eq_infₛ_imageₓ'. -/
-theorem inf_eq_infₛ_image [CompleteLattice β] (s : Finset α) (f : α → β) :
- s.inf f = infₛ (f '' s) :=
- @sup_eq_supₛ_image _ βᵒᵈ _ _ _
-#align finset.inf_eq_Inf_image Finset.inf_eq_infₛ_image
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (s : Finset.{u1} α) (f : α -> β), Eq.{succ u2} β (Finset.inf.{u2, u1} β α (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1)) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))))) (CompleteLattice.toBoundedOrder.{u2} β _inst_1)) s f) (InfSet.sInf.{u2} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Set.image.{u1, u2} α β f (Finset.toSet.{u1} α s)))
+Case conversion may be inaccurate. Consider using '#align finset.inf_eq_Inf_image Finset.inf_eq_sInf_imageₓ'. -/
+theorem inf_eq_sInf_image [CompleteLattice β] (s : Finset α) (f : α → β) :
+ s.inf f = sInf (f '' s) :=
+ @sup_eq_sSup_image _ βᵒᵈ _ _ _
+#align finset.inf_eq_Inf_image Finset.inf_eq_sInf_image
section Sup'
@@ -1427,17 +1427,17 @@ theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
Iff.intro (fun h b hb => trans (le_sup' f hb) h) (sup'_le H f)
#align finset.sup'_le_iff Finset.sup'_le_iff
-/- warning: finset.sup'_bUnion -> Finset.sup'_bunionᵢ is a dubious translation:
+/- warning: finset.sup'_bUnion -> Finset.sup'_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {s : Finset.{u3} γ} (Hs : Finset.Nonempty.{u3} γ s) {t : γ -> (Finset.{u2} β)} (Ht : forall (b : γ), Finset.Nonempty.{u2} β (t b)), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Finset.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) b s) => Ht b)) f) (Finset.sup'.{u1, u3} α γ _inst_1 s Hs (fun (b : γ) => Finset.sup'.{u1, u2} α β _inst_1 (t b) (Ht b) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {s : Finset.{u3} γ} (Hs : Finset.Nonempty.{u3} γ s) {t : γ -> (Finset.{u2} β)} (Ht : forall (b : γ), Finset.Nonempty.{u2} β (t b)), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) b s) => Ht b)) f) (Finset.sup'.{u1, u3} α γ _inst_1 s Hs (fun (b : γ) => Finset.sup'.{u1, u2} α β _inst_1 (t b) (Ht b) f))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u3} β] {s : Finset.{u2} γ} (Hs : Finset.Nonempty.{u2} γ s) {t : γ -> (Finset.{u3} β)} (Ht : forall (b : γ), Finset.Nonempty.{u3} β (t b)), Eq.{succ u1} α (Finset.sup'.{u1, u3} α β _inst_1 (Finset.bunionᵢ.{u2, u3} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) b s) => Ht b)) f) (Finset.sup'.{u1, u2} α γ _inst_1 s Hs (fun (b : γ) => Finset.sup'.{u1, u3} α β _inst_1 (t b) (Ht b) f))
-Case conversion may be inaccurate. Consider using '#align finset.sup'_bUnion Finset.sup'_bunionᵢₓ'. -/
-theorem sup'_bunionᵢ [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u3} β] {s : Finset.{u2} γ} (Hs : Finset.Nonempty.{u2} γ s) {t : γ -> (Finset.{u3} β)} (Ht : forall (b : γ), Finset.Nonempty.{u3} β (t b)), Eq.{succ u1} α (Finset.sup'.{u1, u3} α β _inst_1 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) b s) => Ht b)) f) (Finset.sup'.{u1, u2} α γ _inst_1 s Hs (fun (b : γ) => Finset.sup'.{u1, u3} α β _inst_1 (t b) (Ht b) f))
+Case conversion may be inaccurate. Consider using '#align finset.sup'_bUnion Finset.sup'_biUnionₓ'. -/
+theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
- (s.bunionᵢ t).sup' (Hs.bunionᵢ fun b _ => Ht b) f = s.sup' Hs fun b => (t b).sup' (Ht b) f :=
+ (s.biUnion t).sup' (Hs.biUnion fun b _ => Ht b) f = s.sup' Hs fun b => (t b).sup' (Ht b) f :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
-#align finset.sup'_bUnion Finset.sup'_bunionᵢ
+#align finset.sup'_bUnion Finset.sup'_biUnion
/- warning: finset.comp_sup'_eq_sup'_comp -> Finset.comp_sup'_eq_sup'_comp is a dubious translation:
lean 3 declaration is
@@ -1621,17 +1621,17 @@ theorem le_inf'_iff : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
@sup'_le_iff αᵒᵈ _ _ _ H f _
#align finset.le_inf'_iff Finset.le_inf'_iff
-/- warning: finset.inf'_bUnion -> Finset.inf'_bunionᵢ is a dubious translation:
+/- warning: finset.inf'_bUnion -> Finset.inf'_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {s : Finset.{u3} γ} (Hs : Finset.Nonempty.{u3} γ s) {t : γ -> (Finset.{u2} β)} (Ht : forall (b : γ), Finset.Nonempty.{u2} β (t b)), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Finset.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) b s) => Ht b)) f) (Finset.inf'.{u1, u3} α γ _inst_1 s Hs (fun (b : γ) => Finset.inf'.{u1, u2} α β _inst_1 (t b) (Ht b) f))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {s : Finset.{u3} γ} (Hs : Finset.Nonempty.{u3} γ s) {t : γ -> (Finset.{u2} β)} (Ht : forall (b : γ), Finset.Nonempty.{u2} β (t b)), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Finset.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) b s) => Ht b)) f) (Finset.inf'.{u1, u3} α γ _inst_1 s Hs (fun (b : γ) => Finset.inf'.{u1, u2} α β _inst_1 (t b) (Ht b) f))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u3} β] {s : Finset.{u2} γ} (Hs : Finset.Nonempty.{u2} γ s) {t : γ -> (Finset.{u3} β)} (Ht : forall (b : γ), Finset.Nonempty.{u3} β (t b)), Eq.{succ u1} α (Finset.inf'.{u1, u3} α β _inst_1 (Finset.bunionᵢ.{u2, u3} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) b s) => Ht b)) f) (Finset.inf'.{u1, u2} α γ _inst_1 s Hs (fun (b : γ) => Finset.inf'.{u1, u3} α β _inst_1 (t b) (Ht b) f))
-Case conversion may be inaccurate. Consider using '#align finset.inf'_bUnion Finset.inf'_bunionᵢₓ'. -/
-theorem inf'_bunionᵢ [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] (f : β -> α) [_inst_2 : DecidableEq.{succ u3} β] {s : Finset.{u2} γ} (Hs : Finset.Nonempty.{u2} γ s) {t : γ -> (Finset.{u3} β)} (Ht : forall (b : γ), Finset.Nonempty.{u3} β (t b)), Eq.{succ u1} α (Finset.inf'.{u1, u3} α β _inst_1 (Finset.biUnion.{u2, u3} γ β (fun (a : β) (b : β) => _inst_2 a b) s t) (Finset.Nonempty.biUnion.{u3, u2} γ β (fun (a : β) (b : β) => _inst_2 a b) s t Hs (fun (b : γ) (_x : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) b s) => Ht b)) f) (Finset.inf'.{u1, u2} α γ _inst_1 s Hs (fun (b : γ) => Finset.inf'.{u1, u3} α β _inst_1 (t b) (Ht b) f))
+Case conversion may be inaccurate. Consider using '#align finset.inf'_bUnion Finset.inf'_biUnionₓ'. -/
+theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
- (s.bunionᵢ t).inf' (Hs.bunionᵢ fun b _ => Ht b) f = s.inf' Hs fun b => (t b).inf' (Ht b) f :=
- @sup'_bunionᵢ αᵒᵈ _ _ _ _ _ _ Hs _ Ht
-#align finset.inf'_bUnion Finset.inf'_bunionᵢ
+ (s.biUnion t).inf' (Hs.biUnion fun b _ => Ht b) f = s.inf' Hs fun b => (t b).inf' (Ht b) f :=
+ @sup'_biUnion αᵒᵈ _ _ _ _ _ _ Hs _ Ht
+#align finset.inf'_bUnion Finset.inf'_biUnion
/- warning: finset.comp_inf'_eq_inf'_comp -> Finset.comp_inf'_eq_inf'_comp is a dubious translation:
lean 3 declaration is
@@ -2928,17 +2928,17 @@ theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Finset β}
simp_rw [val_to_finset]
#align finset.mem_sup Finset.mem_sup
-/- warning: finset.sup_eq_bUnion -> Finset.sup_eq_bunionᵢ is a dubious translation:
+/- warning: finset.sup_eq_bUnion -> Finset.sup_eq_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : α -> (Finset.{u2} β)), Eq.{succ u2} (Finset.{u2} β) (Finset.sup.{u2, u1} (Finset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.orderBot.{u2} β) s t) (Finset.bunionᵢ.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) s t)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : α -> (Finset.{u2} β)), Eq.{succ u2} (Finset.{u2} β) (Finset.sup.{u2, u1} (Finset.{u2} β) α (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.orderBot.{u2} β) s t) (Finset.biUnion.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] (s : Finset.{u2} α) (t : α -> (Finset.{u1} β)), Eq.{succ u1} (Finset.{u1} β) (Finset.sup.{u1, u2} (Finset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} β) s t) (Finset.bunionᵢ.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s t)
-Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bUnion Finset.sup_eq_bunionᵢₓ'. -/
-theorem sup_eq_bunionᵢ {α β} [DecidableEq β] (s : Finset α) (t : α → Finset β) :
- s.sup t = s.bunionᵢ t := by
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] (s : Finset.{u2} α) (t : α -> (Finset.{u1} β)), Eq.{succ u1} (Finset.{u1} β) (Finset.sup.{u1, u2} (Finset.{u1} β) α (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b))) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} β) s t) (Finset.biUnion.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s t)
+Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bUnion Finset.sup_eq_biUnionₓ'. -/
+theorem sup_eq_biUnion {α β} [DecidableEq β] (s : Finset α) (t : α → Finset β) :
+ s.sup t = s.biUnion t := by
ext
rw [mem_sup, mem_bUnion]
-#align finset.sup_eq_bUnion Finset.sup_eq_bunionᵢ
+#align finset.sup_eq_bUnion Finset.sup_eq_biUnion
/- warning: finset.sup_singleton'' -> Finset.sup_singleton'' is a dubious translation:
lean 3 declaration is
@@ -2971,62 +2971,62 @@ section Lattice
variable {ι' : Sort _} [CompleteLattice α]
-/- warning: supr_eq_supr_finset -> supᵢ_eq_supᵢ_finset is a dubious translation:
+/- warning: supr_eq_supr_finset -> iSup_eq_iSup_finset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι -> α), Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι (fun (i : ι) => s i)) (supᵢ.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => supᵢ.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι -> α), Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι (fun (i : ι) => s i)) (iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι -> α), Eq.{succ u2} α (supᵢ.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι (fun (i : ι) => s i)) (supᵢ.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => supᵢ.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι (fun (i : ι) => supᵢ.{u2, 0} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align supr_eq_supr_finset supᵢ_eq_supᵢ_finsetₓ'. -/
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι -> α), Eq.{succ u2} α (iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι (fun (i : ι) => s i)) (iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι (fun (i : ι) => iSup.{u2, 0} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
+Case conversion may be inaccurate. Consider using '#align supr_eq_supr_finset iSup_eq_iSup_finsetₓ'. -/
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `supr_eq_supr_finset'` for a version
that works for `ι : Sort*`. -/
-theorem supᵢ_eq_supᵢ_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
+theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
classical exact
le_antisymm
- (supᵢ_le fun b => le_supᵢ_of_le {b} <| le_supᵢ_of_le b <| le_supᵢ_of_le (by simp) <| le_rfl)
- (supᵢ_le fun t => supᵢ_le fun b => supᵢ_le fun hb => le_supᵢ _ _)
-#align supr_eq_supr_finset supᵢ_eq_supᵢ_finset
+ (iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl)
+ (iSup_le fun t => iSup_le fun b => iSup_le fun hb => le_iSup _ _)
+#align supr_eq_supr_finset iSup_eq_iSup_finset
-/- warning: supr_eq_supr_finset' -> supᵢ_eq_supᵢ_finset' is a dubious translation:
+/- warning: supr_eq_supr_finset' -> iSup_eq_iSup_finset' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι' -> α), Eq.{succ u1} α (supᵢ.{u1, u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι' (fun (i : ι') => s i)) (supᵢ.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => supᵢ.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => supᵢ.{u1, 0} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
+ forall {α : Type.{u1}} {ι' : Sort.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι' -> α), Eq.{succ u1} α (iSup.{u1, u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) ι' (fun (i : ι') => s i)) (iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => iSup.{u1, succ u2} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => iSup.{u1, 0} α (CompleteSemilatticeSup.toHasSup.{u1} α (CompleteLattice.toCompleteSemilatticeSup.{u1} α _inst_1)) (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι' -> α), Eq.{succ u2} α (supᵢ.{u2, u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι' (fun (i : ι') => s i)) (supᵢ.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => supᵢ.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => supᵢ.{u2, 0} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align supr_eq_supr_finset' supᵢ_eq_supᵢ_finset'ₓ'. -/
+ forall {α : Type.{u2}} {ι' : Sort.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι' -> α), Eq.{succ u2} α (iSup.{u2, u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) ι' (fun (i : ι') => s i)) (iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => iSup.{u2, succ u1} α (CompleteLattice.toSupSet.{u2} α _inst_1) (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => iSup.{u2, 0} α (CompleteLattice.toSupSet.{u2} α _inst_1) (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
+Case conversion may be inaccurate. Consider using '#align supr_eq_supr_finset' iSup_eq_iSup_finset'ₓ'. -/
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : finset ι` of suprema
`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `supr_eq_supr_finset` for a version
that assumes `ι : Type*` but has no `plift`s. -/
-theorem supᵢ_eq_supᵢ_finset' (s : ι' → α) :
+theorem iSup_eq_iSup_finset' (s : ι' → α) :
(⨆ i, s i) = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
- rw [← supᵢ_eq_supᵢ_finset, ← equiv.plift.surjective.supr_comp] <;> rfl
-#align supr_eq_supr_finset' supᵢ_eq_supᵢ_finset'
+ rw [← iSup_eq_iSup_finset, ← equiv.plift.surjective.supr_comp] <;> rfl
+#align supr_eq_supr_finset' iSup_eq_iSup_finset'
-/- warning: infi_eq_infi_finset -> infᵢ_eq_infᵢ_finset is a dubious translation:
+/- warning: infi_eq_infi_finset -> iInf_eq_iInf_finset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι -> α), Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι (fun (i : ι) => s i)) (infᵢ.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => infᵢ.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι -> α), Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι (fun (i : ι) => s i)) (iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι -> α), Eq.{succ u2} α (infᵢ.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (i : ι) => s i)) (infᵢ.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => infᵢ.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (i : ι) => infᵢ.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align infi_eq_infi_finset infᵢ_eq_infᵢ_finsetₓ'. -/
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι -> α), Eq.{succ u2} α (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (i : ι) => s i)) (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (i : ι) => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
+Case conversion may be inaccurate. Consider using '#align infi_eq_infi_finset iInf_eq_iInf_finsetₓ'. -/
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : finset ι` of infima
`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `infi_eq_infi_finset'` for a version
that works for `ι : Sort*`. -/
-theorem infᵢ_eq_infᵢ_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι) (i ∈ t), s i :=
- @supᵢ_eq_supᵢ_finset αᵒᵈ _ _ _
-#align infi_eq_infi_finset infᵢ_eq_infᵢ_finset
+theorem iInf_eq_iInf_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι) (i ∈ t), s i :=
+ @iSup_eq_iSup_finset αᵒᵈ _ _ _
+#align infi_eq_infi_finset iInf_eq_iInf_finset
-/- warning: infi_eq_infi_finset' -> infᵢ_eq_infᵢ_finset' is a dubious translation:
+/- warning: infi_eq_infi_finset' -> iInf_eq_iInf_finset' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι' -> α), Eq.{succ u1} α (infᵢ.{u1, u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι' (fun (i : ι') => s i)) (infᵢ.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => infᵢ.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => infᵢ.{u1, 0} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
+ forall {α : Type.{u1}} {ι' : Sort.{u2}} [_inst_1 : CompleteLattice.{u1} α] (s : ι' -> α), Eq.{succ u1} α (iInf.{u1, u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) ι' (fun (i : ι') => s i)) (iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => iInf.{u1, succ u2} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => iInf.{u1, 0} α (CompleteSemilatticeInf.toHasInf.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)) (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι' -> α), Eq.{succ u2} α (infᵢ.{u2, u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι' (fun (i : ι') => s i)) (infᵢ.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => infᵢ.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => infᵢ.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align infi_eq_infi_finset' infᵢ_eq_infᵢ_finset'ₓ'. -/
+ forall {α : Type.{u2}} {ι' : Sort.{u1}} [_inst_1 : CompleteLattice.{u2} α] (s : ι' -> α), Eq.{succ u2} α (iInf.{u2, u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι' (fun (i : ι') => s i)) (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
+Case conversion may be inaccurate. Consider using '#align infi_eq_infi_finset' iInf_eq_iInf_finset'ₓ'. -/
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : finset ι` of infima
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `infi_eq_infi_finset` for a version
that assumes `ι : Type*` but has no `plift`s. -/
-theorem infᵢ_eq_infᵢ_finset' (s : ι' → α) :
+theorem iInf_eq_iInf_finset' (s : ι' → α) :
(⨅ i, s i) = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
- @supᵢ_eq_supᵢ_finset' αᵒᵈ _ _ _
-#align infi_eq_infi_finset' infᵢ_eq_infᵢ_finset'
+ @iSup_eq_iSup_finset' αᵒᵈ _ _ _
+#align infi_eq_infi_finset' iInf_eq_iInf_finset'
end Lattice
@@ -3034,60 +3034,60 @@ namespace Set
variable {ι' : Sort _}
-/- warning: set.Union_eq_Union_finset -> Set.unionᵢ_eq_unionᵢ_finset is a dubious translation:
+/- warning: set.Union_eq_Union_finset -> Set.iUnion_eq_iUnion_finset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι (fun (i : ι) => s i)) (Set.unionᵢ.{u1, succ u2} α (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => Set.unionᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => s i)) (Set.iUnion.{u1, succ u2} α (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} (s : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.unionᵢ.{u2, succ u1} α ι (fun (i : ι) => s i)) (Set.unionᵢ.{u2, succ u1} α (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => Set.unionᵢ.{u2, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align set.Union_eq_Union_finset Set.unionᵢ_eq_unionᵢ_finsetₓ'. -/
+ forall {α : Type.{u2}} {ι : Type.{u1}} (s : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => s i)) (Set.iUnion.{u2, succ u1} α (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
+Case conversion may be inaccurate. Consider using '#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finsetₓ'. -/
/-- Union of an indexed family of sets `s : ι → set α` is equal to the union of the unions
of finite subfamilies. This version assumes `ι : Type*`. See also `Union_eq_Union_finset'` for
a version that works for `ι : Sort*`. -/
-theorem unionᵢ_eq_unionᵢ_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
- supᵢ_eq_supᵢ_finset s
-#align set.Union_eq_Union_finset Set.unionᵢ_eq_unionᵢ_finset
+theorem iUnion_eq_iUnion_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
+ iSup_eq_iSup_finset s
+#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finset
-/- warning: set.Union_eq_Union_finset' -> Set.unionᵢ_eq_unionᵢ_finset' is a dubious translation:
+/- warning: set.Union_eq_Union_finset' -> Set.iUnion_eq_iUnion_finset' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} (s : ι' -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, u2} α ι' (fun (i : ι') => s i)) (Set.unionᵢ.{u1, succ u2} α (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => Set.unionᵢ.{u1, succ u2} α (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
+ forall {α : Type.{u1}} {ι' : Sort.{u2}} (s : ι' -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, u2} α ι' (fun (i : ι') => s i)) (Set.iUnion.{u1, succ u2} α (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => Set.iUnion.{u1, succ u2} α (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} (s : ι' -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.unionᵢ.{u2, u1} α ι' (fun (i : ι') => s i)) (Set.unionᵢ.{u2, succ u1} α (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => Set.unionᵢ.{u2, succ u1} α (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align set.Union_eq_Union_finset' Set.unionᵢ_eq_unionᵢ_finset'ₓ'. -/
+ forall {α : Type.{u2}} {ι' : Sort.{u1}} (s : ι' -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iUnion.{u2, u1} α ι' (fun (i : ι') => s i)) (Set.iUnion.{u2, succ u1} α (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => Set.iUnion.{u2, succ u1} α (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
+Case conversion may be inaccurate. Consider using '#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'ₓ'. -/
/-- Union of an indexed family of sets `s : ι → set α` is equal to the union of the unions
of finite subfamilies. This version works for `ι : Sort*`. See also `Union_eq_Union_finset` for
a version that assumes `ι : Type*` but avoids `plift`s in the right hand side. -/
-theorem unionᵢ_eq_unionᵢ_finset' (s : ι' → Set α) :
+theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
(⋃ i, s i) = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
- supᵢ_eq_supᵢ_finset' s
-#align set.Union_eq_Union_finset' Set.unionᵢ_eq_unionᵢ_finset'
+ iSup_eq_iSup_finset' s
+#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'
-/- warning: set.Inter_eq_Inter_finset -> Set.interᵢ_eq_interᵢ_finset is a dubious translation:
+/- warning: set.Inter_eq_Inter_finset -> Set.iInter_eq_iInter_finset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι (fun (i : ι) => s i)) (Set.interᵢ.{u1, succ u2} α (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => Set.interᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.interᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι (fun (i : ι) => s i)) (Set.iInter.{u1, succ u2} α (Finset.{u2} ι) (fun (t : Finset.{u2} ι) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) => s i))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} (s : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.interᵢ.{u2, succ u1} α ι (fun (i : ι) => s i)) (Set.interᵢ.{u2, succ u1} α (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => Set.interᵢ.{u2, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_eq_Inter_finset Set.interᵢ_eq_interᵢ_finsetₓ'. -/
+ forall {α : Type.{u2}} {ι : Type.{u1}} (s : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iInter.{u2, succ u1} α ι (fun (i : ι) => s i)) (Set.iInter.{u2, succ u1} α (Finset.{u1} ι) (fun (t : Finset.{u1} ι) => Set.iInter.{u2, succ u1} α ι (fun (i : ι) => Set.iInter.{u2, 0} α (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) (fun (H : Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) => s i))))
+Case conversion may be inaccurate. Consider using '#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finsetₓ'. -/
/-- Intersection of an indexed family of sets `s : ι → set α` is equal to the intersection of the
intersections of finite subfamilies. This version assumes `ι : Type*`. See also
`Inter_eq_Inter_finset'` for a version that works for `ι : Sort*`. -/
-theorem interᵢ_eq_interᵢ_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
- infᵢ_eq_infᵢ_finset s
-#align set.Inter_eq_Inter_finset Set.interᵢ_eq_interᵢ_finset
+theorem iInter_eq_iInter_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
+ iInf_eq_iInf_finset s
+#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finset
-/- warning: set.Inter_eq_Inter_finset' -> Set.interᵢ_eq_interᵢ_finset' is a dubious translation:
+/- warning: set.Inter_eq_Inter_finset' -> Set.iInter_eq_iInter_finset' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} (s : ι' -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, u2} α ι' (fun (i : ι') => s i)) (Set.interᵢ.{u1, succ u2} α (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => Set.interᵢ.{u1, succ u2} α (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => Set.interᵢ.{u1, 0} α (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
+ forall {α : Type.{u1}} {ι' : Sort.{u2}} (s : ι' -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, u2} α ι' (fun (i : ι') => s i)) (Set.iInter.{u1, succ u2} α (Finset.{u2} (PLift.{u2} ι')) (fun (t : Finset.{u2} (PLift.{u2} ι')) => Set.iInter.{u1, succ u2} α (PLift.{u2} ι') (fun (i : PLift.{u2} ι') => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) (fun (H : Membership.Mem.{u2, u2} (PLift.{u2} ι') (Finset.{u2} (PLift.{u2} ι')) (Finset.hasMem.{u2} (PLift.{u2} ι')) i t) => s (PLift.down.{u2} ι' i)))))
but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} (s : ι' -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.interᵢ.{u2, u1} α ι' (fun (i : ι') => s i)) (Set.interᵢ.{u2, succ u1} α (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => Set.interᵢ.{u2, succ u1} α (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => Set.interᵢ.{u2, 0} α (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_eq_Inter_finset' Set.interᵢ_eq_interᵢ_finset'ₓ'. -/
+ forall {α : Type.{u2}} {ι' : Sort.{u1}} (s : ι' -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Set.iInter.{u2, u1} α ι' (fun (i : ι') => s i)) (Set.iInter.{u2, succ u1} α (Finset.{u1} (PLift.{u1} ι')) (fun (t : Finset.{u1} (PLift.{u1} ι')) => Set.iInter.{u2, succ u1} α (PLift.{u1} ι') (fun (i : PLift.{u1} ι') => Set.iInter.{u2, 0} α (Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) (fun (H : Membership.mem.{u1, u1} (PLift.{u1} ι') (Finset.{u1} (PLift.{u1} ι')) (Finset.instMembershipFinset.{u1} (PLift.{u1} ι')) i t) => s (PLift.down.{u1} ι' i)))))
+Case conversion may be inaccurate. Consider using '#align set.Inter_eq_Inter_finset' Set.iInter_eq_iInter_finset'ₓ'. -/
/-- Intersection of an indexed family of sets `s : ι → set α` is equal to the intersection of the
intersections of finite subfamilies. This version works for `ι : Sort*`. See also
`Inter_eq_Inter_finset` for a version that assumes `ι : Type*` but avoids `plift`s in the right
hand side. -/
-theorem interᵢ_eq_interᵢ_finset' (s : ι' → Set α) :
+theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
(⋂ i, s i) = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
- infᵢ_eq_infᵢ_finset' s
-#align set.Inter_eq_Inter_finset' Set.interᵢ_eq_interᵢ_finset'
+ iInf_eq_iInf_finset' s
+#align set.Inter_eq_Inter_finset' Set.iInter_eq_iInter_finset'
end Set
@@ -3153,356 +3153,356 @@ open Function
section Lattice
-#print Finset.supᵢ_coe /-
-theorem supᵢ_coe [SupSet β] (f : α → β) (s : Finset α) : (⨆ x ∈ (↑s : Set α), f x) = ⨆ x ∈ s, f x :=
+#print Finset.iSup_coe /-
+theorem iSup_coe [SupSet β] (f : α → β) (s : Finset α) : (⨆ x ∈ (↑s : Set α), f x) = ⨆ x ∈ s, f x :=
rfl
-#align finset.supr_coe Finset.supᵢ_coe
+#align finset.supr_coe Finset.iSup_coe
-/
-#print Finset.infᵢ_coe /-
-theorem infᵢ_coe [InfSet β] (f : α → β) (s : Finset α) : (⨅ x ∈ (↑s : Set α), f x) = ⨅ x ∈ s, f x :=
+#print Finset.iInf_coe /-
+theorem iInf_coe [InfSet β] (f : α → β) (s : Finset α) : (⨅ x ∈ (↑s : Set α), f x) = ⨅ x ∈ s, f x :=
rfl
-#align finset.infi_coe Finset.infᵢ_coe
+#align finset.infi_coe Finset.iInf_coe
-/
variable [CompleteLattice β]
-/- warning: finset.supr_singleton -> Finset.supᵢ_singleton is a dubious translation:
+/- warning: finset.supr_singleton -> Finset.iSup_singleton is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) => s x))) (s a)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) => s x))) (s a)
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) => s x))) (s a)
-Case conversion may be inaccurate. Consider using '#align finset.supr_singleton Finset.supᵢ_singletonₓ'. -/
-theorem supᵢ_singleton (a : α) (s : α → β) : (⨆ x ∈ ({a} : Finset α), s x) = s a := by simp
-#align finset.supr_singleton Finset.supᵢ_singleton
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (x : α) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) => s x))) (s a)
+Case conversion may be inaccurate. Consider using '#align finset.supr_singleton Finset.iSup_singletonₓ'. -/
+theorem iSup_singleton (a : α) (s : α → β) : (⨆ x ∈ ({a} : Finset α), s x) = s a := by simp
+#align finset.supr_singleton Finset.iSup_singleton
-/- warning: finset.infi_singleton -> Finset.infᵢ_singleton is a dubious translation:
+/- warning: finset.infi_singleton -> Finset.iInf_singleton is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) => s x))) (s a)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) => s x))) (s a)
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) => s x))) (s a)
-Case conversion may be inaccurate. Consider using '#align finset.infi_singleton Finset.infᵢ_singletonₓ'. -/
-theorem infᵢ_singleton (a : α) (s : α → β) : (⨅ x ∈ ({a} : Finset α), s x) = s a := by simp
-#align finset.infi_singleton Finset.infᵢ_singleton
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (a : α) (s : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (x : α) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) => s x))) (s a)
+Case conversion may be inaccurate. Consider using '#align finset.infi_singleton Finset.iInf_singletonₓ'. -/
+theorem iInf_singleton (a : α) (s : α → β) : (⨅ x ∈ ({a} : Finset α), s x) = s a := by simp
+#align finset.infi_singleton Finset.iInf_singleton
-/- warning: finset.supr_option_to_finset -> Finset.supᵢ_option_toFinset is a dubious translation:
+/- warning: finset.supr_option_to_finset -> Finset.iSup_option_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (o : Option.{u1} α) (f : α -> β), Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (o : Option.{u1} α) (f : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] (o : Option.{u2} α) (f : α -> β), Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.supr_option_to_finset Finset.supᵢ_option_toFinsetₓ'. -/
-theorem supᵢ_option_toFinset (o : Option α) (f : α → β) : (⨆ x ∈ o.toFinset, f x) = ⨆ x ∈ o, f x :=
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] (o : Option.{u2} α) (f : α -> β), Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
+Case conversion may be inaccurate. Consider using '#align finset.supr_option_to_finset Finset.iSup_option_toFinsetₓ'. -/
+theorem iSup_option_toFinset (o : Option α) (f : α → β) : (⨆ x ∈ o.toFinset, f x) = ⨆ x ∈ o, f x :=
by simp
-#align finset.supr_option_to_finset Finset.supᵢ_option_toFinset
+#align finset.supr_option_to_finset Finset.iSup_option_toFinset
-/- warning: finset.infi_option_to_finset -> Finset.infᵢ_option_toFinset is a dubious translation:
+/- warning: finset.infi_option_to_finset -> Finset.iInf_option_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (o : Option.{u1} α) (f : α -> β), Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] (o : Option.{u1} α) (f : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] (o : Option.{u2} α) (f : α -> β), Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.infi_option_to_finset Finset.infᵢ_option_toFinsetₓ'. -/
-theorem infᵢ_option_toFinset (o : Option α) (f : α → β) : (⨅ x ∈ o.toFinset, f x) = ⨅ x ∈ o, f x :=
- @supᵢ_option_toFinset _ βᵒᵈ _ _ _
-#align finset.infi_option_to_finset Finset.infᵢ_option_toFinset
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] (o : Option.{u2} α) (f : α -> β), Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
+Case conversion may be inaccurate. Consider using '#align finset.infi_option_to_finset Finset.iInf_option_toFinsetₓ'. -/
+theorem iInf_option_toFinset (o : Option α) (f : α → β) : (⨅ x ∈ o.toFinset, f x) = ⨅ x ∈ o, f x :=
+ @iSup_option_toFinset _ βᵒᵈ _ _ _
+#align finset.infi_option_to_finset Finset.iInf_option_toFinset
variable [DecidableEq α]
-/- warning: finset.supr_union -> Finset.supᵢ_union is a dubious translation:
+/- warning: finset.supr_union -> Finset.iSup_union is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_union Finset.supᵢ_unionₓ'. -/
-theorem supᵢ_union {f : α → β} {s t : Finset α} :
- (⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [supᵢ_or, supᵢ_sup_eq]
-#align finset.supr_union Finset.supᵢ_union
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
+Case conversion may be inaccurate. Consider using '#align finset.supr_union Finset.iSup_unionₓ'. -/
+theorem iSup_union {f : α → β} {s t : Finset α} :
+ (⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [iSup_or, iSup_sup_eq]
+#align finset.supr_union Finset.iSup_union
-/- warning: finset.infi_union -> Finset.infᵢ_union is a dubious translation:
+/- warning: finset.infi_union -> Finset.iInf_union is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_union Finset.infᵢ_unionₓ'. -/
-theorem infᵢ_union {f : α → β} {s t : Finset α} :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
+Case conversion may be inaccurate. Consider using '#align finset.infi_union Finset.iInf_unionₓ'. -/
+theorem iInf_union {f : α → β} {s t : Finset α} :
(⨅ x ∈ s ∪ t, f x) = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
- @supᵢ_union α βᵒᵈ _ _ _ _ _
-#align finset.infi_union Finset.infᵢ_union
+ @iSup_union α βᵒᵈ _ _ _ _ _
+#align finset.infi_union Finset.iInf_union
-/- warning: finset.supr_insert -> Finset.supᵢ_insert is a dubious translation:
+/- warning: finset.supr_insert -> Finset.iSup_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (t a) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_insert Finset.supᵢ_insertₓ'. -/
-theorem supᵢ_insert (a : α) (s : Finset α) (t : α → β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (t a) (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
+Case conversion may be inaccurate. Consider using '#align finset.supr_insert Finset.iSup_insertₓ'. -/
+theorem iSup_insert (a : α) (s : Finset α) (t : α → β) :
(⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x :=
by
rw [insert_eq]
- simp only [supᵢ_union, Finset.supᵢ_singleton]
-#align finset.supr_insert Finset.supᵢ_insert
+ simp only [iSup_union, Finset.iSup_singleton]
+#align finset.supr_insert Finset.iSup_insert
-/- warning: finset.infi_insert -> Finset.infᵢ_insert is a dubious translation:
+/- warning: finset.infi_insert -> Finset.iInf_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (t a) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_insert Finset.infᵢ_insertₓ'. -/
-theorem infᵢ_insert (a : α) (s : Finset α) (t : α → β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (t a) (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
+Case conversion may be inaccurate. Consider using '#align finset.infi_insert Finset.iInf_insertₓ'. -/
+theorem iInf_insert (a : α) (s : Finset α) (t : α → β) :
(⨅ x ∈ insert a s, t x) = t a ⊓ ⨅ x ∈ s, t x :=
- @supᵢ_insert α βᵒᵈ _ _ _ _ _
-#align finset.infi_insert Finset.infᵢ_insert
+ @iSup_insert α βᵒᵈ _ _ _ _ _
+#align finset.infi_insert Finset.iInf_insert
-/- warning: finset.supr_finset_image -> Finset.supᵢ_finset_image is a dubious translation:
+/- warning: finset.supr_finset_image -> Finset.iSup_finset_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (supᵢ.{u2, succ u3} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) γ (fun (y : γ) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iSup.{u2, succ u3} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) γ (fun (y : γ) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (supᵢ.{u2, succ u3} β (CompleteLattice.toSupSet.{u2} β _inst_1) γ (fun (y : γ) => supᵢ.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_finset_image Finset.supᵢ_finset_imageₓ'. -/
-theorem supᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
- (⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← supr_coe, coe_image, supᵢ_image, supr_coe]
-#align finset.supr_finset_image Finset.supᵢ_finset_image
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteLattice.toSupSet.{u2} β _inst_1) α (fun (x : α) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iSup.{u2, succ u3} β (CompleteLattice.toSupSet.{u2} β _inst_1) γ (fun (y : γ) => iSup.{u2, 0} β (CompleteLattice.toSupSet.{u2} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) => g (f y))))
+Case conversion may be inaccurate. Consider using '#align finset.supr_finset_image Finset.iSup_finset_imageₓ'. -/
+theorem iSup_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
+ (⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← supr_coe, coe_image, iSup_image, supr_coe]
+#align finset.supr_finset_image Finset.iSup_finset_image
-/- warning: finset.infi_finset_image -> Finset.infᵢ_finset_image is a dubious translation:
+/- warning: finset.infi_finset_image -> Finset.iInf_finset_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (infᵢ.{u2, succ u3} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) γ (fun (y : γ) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iInf.{u2, succ u3} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) γ (fun (y : γ) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (infᵢ.{u2, succ u3} β (CompleteLattice.toInfSet.{u2} β _inst_1) γ (fun (y : γ) => infᵢ.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_finset_image Finset.infᵢ_finset_imageₓ'. -/
-theorem infᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
- (⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← infi_coe, coe_image, infᵢ_image, infi_coe]
-#align finset.infi_finset_image Finset.infᵢ_finset_image
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteLattice.toInfSet.{u2} β _inst_1) α (fun (x : α) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (iInf.{u2, succ u3} β (CompleteLattice.toInfSet.{u2} β _inst_1) γ (fun (y : γ) => iInf.{u2, 0} β (CompleteLattice.toInfSet.{u2} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) y s) => g (f y))))
+Case conversion may be inaccurate. Consider using '#align finset.infi_finset_image Finset.iInf_finset_imageₓ'. -/
+theorem iInf_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
+ (⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← infi_coe, coe_image, iInf_image, infi_coe]
+#align finset.infi_finset_image Finset.iInf_finset_image
-/- warning: finset.supr_insert_update -> Finset.supᵢ_insert_update is a dubious translation:
+/- warning: finset.supr_insert_update -> Finset.iSup_insert_update is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) s (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_insert_update Finset.supᵢ_insert_updateₓ'. -/
-theorem supᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) s (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
+Case conversion may be inaccurate. Consider using '#align finset.supr_insert_update Finset.iSup_insert_updateₓ'. -/
+theorem iSup_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i :=
by
- simp only [Finset.supᵢ_insert, update_same]
+ simp only [Finset.iSup_insert, update_same]
rcongr (i hi); apply update_noteq; rintro rfl; exact hx hi
-#align finset.supr_insert_update Finset.supᵢ_insert_update
+#align finset.supr_insert_update Finset.iSup_insert_update
-/- warning: finset.infi_insert_update -> Finset.infᵢ_insert_update is a dubious translation:
+/- warning: finset.infi_insert_update -> Finset.iInf_insert_update is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) s (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_insert_update Finset.infᵢ_insert_updateₓ'. -/
-theorem infᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) s (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
+Case conversion may be inaccurate. Consider using '#align finset.infi_insert_update Finset.iInf_insert_updateₓ'. -/
+theorem iInf_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨅ i ∈ insert x t, update f x s i) = s ⊓ ⨅ i ∈ t, f i :=
- @supᵢ_insert_update α βᵒᵈ _ _ _ _ f _ hx
-#align finset.infi_insert_update Finset.infᵢ_insert_update
+ @iSup_insert_update α βᵒᵈ _ _ _ _ f _ hx
+#align finset.infi_insert_update Finset.iInf_insert_update
-/- warning: finset.supr_bUnion -> Finset.supᵢ_bunionᵢ is a dubious translation:
+/- warning: finset.supr_bUnion -> Finset.iSup_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> β), Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (y : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (supᵢ.{u2, succ u3} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) γ (fun (x : γ) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (y : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> β), Eq.{succ u2} β (iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (y : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iSup.{u2, succ u3} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) γ (fun (x : γ) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => iSup.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (y : α) => iSup.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> β), Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (y : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (supᵢ.{u1, succ u3} β (CompleteLattice.toSupSet.{u1} β _inst_1) γ (fun (x : γ) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (y : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.supr_bUnion Finset.supᵢ_bunionᵢₓ'. -/
-theorem supᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → β) :
- (⨆ y ∈ s.bunionᵢ t, f y) = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@supᵢ_comm _ α, supᵢ_and]
-#align finset.supr_bUnion Finset.supᵢ_bunionᵢ
+ forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> β), Eq.{succ u1} β (iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (y : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iSup.{u1, succ u3} β (CompleteLattice.toSupSet.{u1} β _inst_1) γ (fun (x : γ) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => iSup.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (y : α) => iSup.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
+Case conversion may be inaccurate. Consider using '#align finset.supr_bUnion Finset.iSup_biUnionₓ'. -/
+theorem iSup_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
+ (⨆ y ∈ s.biUnion t, f y) = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@iSup_comm _ α, iSup_and]
+#align finset.supr_bUnion Finset.iSup_biUnion
-/- warning: finset.infi_bUnion -> Finset.infᵢ_bunionᵢ is a dubious translation:
+/- warning: finset.infi_bUnion -> Finset.iInf_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> β), Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (y : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (infᵢ.{u2, succ u3} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) γ (fun (x : γ) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (y : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> β), Eq.{succ u2} β (iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (y : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iInf.{u2, succ u3} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) γ (fun (x : γ) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => iInf.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (y : α) => iInf.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> β), Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (y : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (infᵢ.{u1, succ u3} β (CompleteLattice.toInfSet.{u1} β _inst_1) γ (fun (x : γ) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (y : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.infi_bUnion Finset.infᵢ_bunionᵢₓ'. -/
-theorem infᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → β) :
- (⨅ y ∈ s.bunionᵢ t, f y) = ⨅ (x ∈ s) (y ∈ t x), f y :=
- @supᵢ_bunionᵢ _ βᵒᵈ _ _ _ _ _ _
-#align finset.infi_bUnion Finset.infᵢ_bunionᵢ
+ forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> β), Eq.{succ u1} β (iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (y : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_2 a b) s t)) => f y))) (iInf.{u1, succ u3} β (CompleteLattice.toInfSet.{u1} β _inst_1) γ (fun (x : γ) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => iInf.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (y : α) => iInf.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
+Case conversion may be inaccurate. Consider using '#align finset.infi_bUnion Finset.iInf_biUnionₓ'. -/
+theorem iInf_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
+ (⨅ y ∈ s.biUnion t, f y) = ⨅ (x ∈ s) (y ∈ t x), f y :=
+ @iSup_biUnion _ βᵒᵈ _ _ _ _ _ _
+#align finset.infi_bUnion Finset.iInf_biUnion
end Lattice
-/- warning: finset.set_bUnion_coe -> Finset.set_bunionᵢ_coe is a dubious translation:
+/- warning: finset.set_bUnion_coe -> Finset.set_biUnion_coe is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) => t x))) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) => t x))) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) (fun (H : Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) => t x))) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_coe Finset.set_bunionᵢ_coeₓ'. -/
-theorem set_bunionᵢ_coe (s : Finset α) (t : α → Set β) : (⋃ x ∈ (↑s : Set α), t x) = ⋃ x ∈ s, t x :=
+ forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) (fun (H : Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) => t x))) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x)))
+Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_coe Finset.set_biUnion_coeₓ'. -/
+theorem set_biUnion_coe (s : Finset α) (t : α → Set β) : (⋃ x ∈ (↑s : Set α), t x) = ⋃ x ∈ s, t x :=
rfl
-#align finset.set_bUnion_coe Finset.set_bunionᵢ_coe
+#align finset.set_bUnion_coe Finset.set_biUnion_coe
-/- warning: finset.set_bInter_coe -> Finset.set_binterᵢ_coe is a dubious translation:
+/- warning: finset.set_bInter_coe -> Finset.set_biInter_coe is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) => t x))) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)) => t x))) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) (fun (H : Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) => t x))) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_coe Finset.set_binterᵢ_coeₓ'. -/
-theorem set_binterᵢ_coe (s : Finset α) (t : α → Set β) : (⋂ x ∈ (↑s : Set α), t x) = ⋂ x ∈ s, t x :=
+ forall {α : Type.{u2}} {β : Type.{u1}} (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) (fun (H : Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (Finset.toSet.{u2} α s)) => t x))) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x)))
+Case conversion may be inaccurate. Consider using '#align finset.set_bInter_coe Finset.set_biInter_coeₓ'. -/
+theorem set_biInter_coe (s : Finset α) (t : α → Set β) : (⋂ x ∈ (↑s : Set α), t x) = ⋂ x ∈ s, t x :=
rfl
-#align finset.set_bInter_coe Finset.set_binterᵢ_coe
+#align finset.set_bInter_coe Finset.set_biInter_coe
-#print Finset.set_bunionᵢ_singleton /-
-theorem set_bunionᵢ_singleton (a : α) (s : α → Set β) : (⋃ x ∈ ({a} : Finset α), s x) = s a :=
- supᵢ_singleton a s
-#align finset.set_bUnion_singleton Finset.set_bunionᵢ_singleton
+#print Finset.set_biUnion_singleton /-
+theorem set_biUnion_singleton (a : α) (s : α → Set β) : (⋃ x ∈ ({a} : Finset α), s x) = s a :=
+ iSup_singleton a s
+#align finset.set_bUnion_singleton Finset.set_biUnion_singleton
-/
-#print Finset.set_binterᵢ_singleton /-
-theorem set_binterᵢ_singleton (a : α) (s : α → Set β) : (⋂ x ∈ ({a} : Finset α), s x) = s a :=
- infᵢ_singleton a s
-#align finset.set_bInter_singleton Finset.set_binterᵢ_singleton
+#print Finset.set_biInter_singleton /-
+theorem set_biInter_singleton (a : α) (s : α → Set β) : (⋂ x ∈ ({a} : Finset α), s x) = s a :=
+ iInf_singleton a s
+#align finset.set_bInter_singleton Finset.set_biInter_singleton
-/
-#print Finset.set_bunionᵢ_preimage_singleton /-
+#print Finset.set_biUnion_preimage_singleton /-
@[simp]
-theorem set_bunionᵢ_preimage_singleton (f : α → β) (s : Finset β) :
+theorem set_biUnion_preimage_singleton (f : α → β) (s : Finset β) :
(⋃ y ∈ s, f ⁻¹' {y}) = f ⁻¹' s :=
- Set.bunionᵢ_preimage_singleton f s
-#align finset.set_bUnion_preimage_singleton Finset.set_bunionᵢ_preimage_singleton
+ Set.biUnion_preimage_singleton f s
+#align finset.set_bUnion_preimage_singleton Finset.set_biUnion_preimage_singleton
-/
-/- warning: finset.set_bUnion_option_to_finset -> Finset.set_bunionᵢ_option_toFinset is a dubious translation:
+/- warning: finset.set_bUnion_option_to_finset -> Finset.set_biUnion_option_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (o : Option.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} (o : Option.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (o : Option.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_option_to_finset Finset.set_bunionᵢ_option_toFinsetₓ'. -/
-theorem set_bunionᵢ_option_toFinset (o : Option α) (f : α → Set β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} (o : Option.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
+Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_option_to_finset Finset.set_biUnion_option_toFinsetₓ'. -/
+theorem set_biUnion_option_toFinset (o : Option α) (f : α → Set β) :
(⋃ x ∈ o.toFinset, f x) = ⋃ x ∈ o, f x :=
- supᵢ_option_toFinset o f
-#align finset.set_bUnion_option_to_finset Finset.set_bunionᵢ_option_toFinset
+ iSup_option_toFinset o f
+#align finset.set_bUnion_option_to_finset Finset.set_biUnion_option_toFinset
-/- warning: finset.set_bInter_option_to_finset -> Finset.set_binterᵢ_option_toFinset is a dubious translation:
+/- warning: finset.set_bInter_option_to_finset -> Finset.set_biInter_option_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (o : Option.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} (o : Option.{u1} α) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Option.toFinset.{u1} α o)) => f x))) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) (fun (H : Membership.Mem.{u1, u1} α (Option.{u1} α) (Option.hasMem.{u1} α) x o) => f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (o : Option.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_option_to_finset Finset.set_binterᵢ_option_toFinsetₓ'. -/
-theorem set_binterᵢ_option_toFinset (o : Option α) (f : α → Set β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} (o : Option.{u2} α) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Option.toFinset.{u2} α o)) => f x))) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) (fun (H : Membership.mem.{u2, u2} α (Option.{u2} α) (Option.instMembershipOption.{u2} α) x o) => f x)))
+Case conversion may be inaccurate. Consider using '#align finset.set_bInter_option_to_finset Finset.set_biInter_option_toFinsetₓ'. -/
+theorem set_biInter_option_toFinset (o : Option α) (f : α → Set β) :
(⋂ x ∈ o.toFinset, f x) = ⋂ x ∈ o, f x :=
- infᵢ_option_toFinset o f
-#align finset.set_bInter_option_to_finset Finset.set_binterᵢ_option_toFinset
+ iInf_option_toFinset o f
+#align finset.set_bInter_option_to_finset Finset.set_biInter_option_toFinset
-/- warning: finset.subset_set_bUnion_of_mem -> Finset.subset_set_bunionᵢ_of_mem is a dubious translation:
+/- warning: finset.subset_set_bUnion_of_mem -> Finset.subset_set_biUnion_of_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {s : Finset.{u1} α} {f : α -> (Set.{u2} β)} {x : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (f x) (Set.unionᵢ.{u2, succ u1} β α (fun (y : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => f y))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {s : Finset.{u1} α} {f : α -> (Set.{u2} β)} {x : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) -> (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (f x) (Set.iUnion.{u2, succ u1} β α (fun (y : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => f y))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {s : Finset.{u2} α} {f : α -> (Set.{u1} β)} {x : α}, (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) -> (HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (f x) (Set.unionᵢ.{u1, succ u2} β α (fun (y : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y s) => f y))))
-Case conversion may be inaccurate. Consider using '#align finset.subset_set_bUnion_of_mem Finset.subset_set_bunionᵢ_of_memₓ'. -/
-theorem subset_set_bunionᵢ_of_mem {s : Finset α} {f : α → Set β} {x : α} (h : x ∈ s) :
+ forall {α : Type.{u2}} {β : Type.{u1}} {s : Finset.{u2} α} {f : α -> (Set.{u1} β)} {x : α}, (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) -> (HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (f x) (Set.iUnion.{u1, succ u2} β α (fun (y : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y s) => f y))))
+Case conversion may be inaccurate. Consider using '#align finset.subset_set_bUnion_of_mem Finset.subset_set_biUnion_of_memₓ'. -/
+theorem subset_set_biUnion_of_mem {s : Finset α} {f : α → Set β} {x : α} (h : x ∈ s) :
f x ⊆ ⋃ y ∈ s, f y :=
- show f x ≤ ⨆ y ∈ s, f y from le_supᵢ_of_le x <| le_supᵢ _ h
-#align finset.subset_set_bUnion_of_mem Finset.subset_set_bunionᵢ_of_mem
+ show f x ≤ ⨆ y ∈ s, f y from le_iSup_of_le x <| le_iSup _ h
+#align finset.subset_set_bUnion_of_mem Finset.subset_set_biUnion_of_mem
variable [DecidableEq α]
-/- warning: finset.set_bUnion_union -> Finset.set_bunionᵢ_union is a dubious translation:
+/- warning: finset.set_bUnion_union -> Finset.set_biUnion_union is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => u x))) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => u x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => u x))) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => u x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u2} α) (t : Finset.{u2} α) (u : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => u x))) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => u x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_union Finset.set_bunionᵢ_unionₓ'. -/
-theorem set_bunionᵢ_union (s t : Finset α) (u : α → Set β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u2} α) (t : Finset.{u2} α) (u : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => u x))) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => u x))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_union Finset.set_biUnion_unionₓ'. -/
+theorem set_biUnion_union (s t : Finset α) (u : α → Set β) :
(⋃ x ∈ s ∪ t, u x) = (⋃ x ∈ s, u x) ∪ ⋃ x ∈ t, u x :=
- supᵢ_union
-#align finset.set_bUnion_union Finset.set_bunionᵢ_union
+ iSup_union
+#align finset.set_bUnion_union Finset.set_biUnion_union
-/- warning: finset.set_bInter_inter -> Finset.set_binterᵢ_inter is a dubious translation:
+/- warning: finset.set_bInter_inter -> Finset.set_biInter_inter is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => u x))) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => u x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => u x))) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => u x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u2} α) (t : Finset.{u2} α) (u : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => u x))) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => u x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_inter Finset.set_binterᵢ_interₓ'. -/
-theorem set_binterᵢ_inter (s t : Finset α) (u : α → Set β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u2} α) (t : Finset.{u2} α) (u : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) => u x))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => u x))) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => u x))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bInter_inter Finset.set_biInter_interₓ'. -/
+theorem set_biInter_inter (s t : Finset α) (u : α → Set β) :
(⋂ x ∈ s ∪ t, u x) = (⋂ x ∈ s, u x) ∩ ⋂ x ∈ t, u x :=
- infᵢ_union
-#align finset.set_bInter_inter Finset.set_binterᵢ_inter
+ iInf_union
+#align finset.set_bInter_inter Finset.set_biInter_inter
-/- warning: finset.set_bUnion_insert -> Finset.set_bunionᵢ_insert is a dubious translation:
+/- warning: finset.set_bUnion_insert -> Finset.set_biUnion_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) (t a) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) (t a) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) (t a) (Set.unionᵢ.{u1, succ u2} β α (fun (x : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_insert Finset.set_bunionᵢ_insertₓ'. -/
-theorem set_bunionᵢ_insert (a : α) (s : Finset α) (t : α → Set β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) (t a) (Set.iUnion.{u1, succ u2} β α (fun (x : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_insert Finset.set_biUnion_insertₓ'. -/
+theorem set_biUnion_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋃ x ∈ insert a s, t x) = t a ∪ ⋃ x ∈ s, t x :=
- supᵢ_insert a s t
-#align finset.set_bUnion_insert Finset.set_bunionᵢ_insert
+ iSup_insert a s t
+#align finset.set_bUnion_insert Finset.set_biUnion_insert
-/- warning: finset.set_bInter_insert -> Finset.set_binterᵢ_insert is a dubious translation:
+/- warning: finset.set_bInter_insert -> Finset.set_biInter_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (t a) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (t a) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (t a) (Set.interᵢ.{u1, succ u2} β α (fun (x : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_insert Finset.set_binterᵢ_insertₓ'. -/
-theorem set_binterᵢ_insert (a : α) (s : Finset α) (t : α → Set β) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) a s)) => t x))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (t a) (Set.iInter.{u1, succ u2} β α (fun (x : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bInter_insert Finset.set_biInter_insertₓ'. -/
+theorem set_biInter_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋂ x ∈ insert a s, t x) = t a ∩ ⋂ x ∈ s, t x :=
- infᵢ_insert a s t
-#align finset.set_bInter_insert Finset.set_binterᵢ_insert
+ iInf_insert a s t
+#align finset.set_bInter_insert Finset.set_biInter_insert
-/- warning: finset.set_bUnion_finset_image -> Finset.set_bunionᵢ_finset_image is a dubious translation:
+/- warning: finset.set_bUnion_finset_image -> Finset.set_biUnion_finset_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u2} β)} {s : Finset.{u3} γ}, Eq.{succ u2} (Set.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (x : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.unionᵢ.{u2, succ u3} β γ (fun (y : γ) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u2} β)} {s : Finset.{u3} γ}, Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (x : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iUnion.{u2, succ u3} β γ (fun (y : γ) => Set.iUnion.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u3} β)} {s : Finset.{u2} γ}, Eq.{succ u3} (Set.{u3} β) (Set.unionᵢ.{u3, succ u1} β α (fun (x : α) => Set.unionᵢ.{u3, 0} β (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.unionᵢ.{u3, succ u2} β γ (fun (y : γ) => Set.unionᵢ.{u3, 0} β (Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) (fun (H : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_finset_image Finset.set_bunionᵢ_finset_imageₓ'. -/
-theorem set_bunionᵢ_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u3} β)} {s : Finset.{u2} γ}, Eq.{succ u3} (Set.{u3} β) (Set.iUnion.{u3, succ u1} β α (fun (x : α) => Set.iUnion.{u3, 0} β (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iUnion.{u3, succ u2} β γ (fun (y : γ) => Set.iUnion.{u3, 0} β (Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) (fun (H : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) => g (f y))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_finset_image Finset.set_biUnion_finset_imageₓ'. -/
+theorem set_biUnion_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋃ x ∈ s.image f, g x) = ⋃ y ∈ s, g (f y) :=
- supᵢ_finset_image
-#align finset.set_bUnion_finset_image Finset.set_bunionᵢ_finset_image
+ iSup_finset_image
+#align finset.set_bUnion_finset_image Finset.set_biUnion_finset_image
-/- warning: finset.set_bInter_finset_image -> Finset.set_binterᵢ_finset_image is a dubious translation:
+/- warning: finset.set_bInter_finset_image -> Finset.set_biInter_finset_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u2} β)} {s : Finset.{u3} γ}, Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (x : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.interᵢ.{u2, succ u3} β γ (fun (y : γ) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u2} β)} {s : Finset.{u3} γ}, Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (x : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iInter.{u2, succ u3} β γ (fun (y : γ) => Set.iInter.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u3} β)} {s : Finset.{u2} γ}, Eq.{succ u3} (Set.{u3} β) (Set.interᵢ.{u3, succ u1} β α (fun (x : α) => Set.interᵢ.{u3, 0} β (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.interᵢ.{u3, succ u2} β γ (fun (y : γ) => Set.interᵢ.{u3, 0} β (Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) (fun (H : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) => g (f y))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_finset_image Finset.set_binterᵢ_finset_imageₓ'. -/
-theorem set_binterᵢ_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> (Set.{u3} β)} {s : Finset.{u2} γ}, Eq.{succ u3} (Set.{u3} β) (Set.iInter.{u3, succ u1} β α (fun (x : α) => Set.iInter.{u3, 0} β (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) (fun (H : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) f s)) => g x))) (Set.iInter.{u3, succ u2} β γ (fun (y : γ) => Set.iInter.{u3, 0} β (Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) (fun (H : Membership.mem.{u2, u2} γ (Finset.{u2} γ) (Finset.instMembershipFinset.{u2} γ) y s) => g (f y))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bInter_finset_image Finset.set_biInter_finset_imageₓ'. -/
+theorem set_biInter_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋂ x ∈ s.image f, g x) = ⋂ y ∈ s, g (f y) :=
- infᵢ_finset_image
-#align finset.set_bInter_finset_image Finset.set_binterᵢ_finset_image
+ iInf_finset_image
+#align finset.set_bInter_finset_image Finset.set_biInter_finset_image
-/- warning: finset.set_bUnion_insert_update -> Finset.set_bunionᵢ_insert_update is a dubious translation:
+/- warning: finset.set_bUnion_insert_update -> Finset.set_biUnion_insert_update is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> (Set.{u2} β)) {s : Set.{u2} β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} (Set.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (i : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => Set.{u2} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) s (Set.unionᵢ.{u2, succ u1} β α (fun (i : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> (Set.{u2} β)) {s : Set.{u2} β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (i : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => Set.{u2} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) s (Set.iUnion.{u2, succ u1} β α (fun (i : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> (Set.{u1} β)) {s : Set.{u1} β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} (Set.{u1} β) (Set.unionᵢ.{u1, succ u2} β α (fun (i : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => Set.{u1} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) s (Set.unionᵢ.{u1, succ u2} β α (fun (i : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_insert_update Finset.set_bunionᵢ_insert_updateₓ'. -/
-theorem set_bunionᵢ_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> (Set.{u1} β)) {s : Set.{u1} β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (i : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => Set.{u1} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) s (Set.iUnion.{u1, succ u2} β α (fun (i : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_insert_update Finset.set_biUnion_insert_updateₓ'. -/
+theorem set_biUnion_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋃ i ∈ insert x t, @update _ _ _ f x s i) = s ∪ ⋃ i ∈ t, f i :=
- supᵢ_insert_update f hx
-#align finset.set_bUnion_insert_update Finset.set_bunionᵢ_insert_update
+ iSup_insert_update f hx
+#align finset.set_bUnion_insert_update Finset.set_biUnion_insert_update
-/- warning: finset.set_bInter_insert_update -> Finset.set_binterᵢ_insert_update is a dubious translation:
+/- warning: finset.set_bInter_insert_update -> Finset.set_biInter_insert_update is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> (Set.{u2} β)) {s : Set.{u2} β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (i : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => Set.{u2} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) s (Set.interᵢ.{u2, succ u1} β α (fun (i : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> (Set.{u2} β)) {s : Set.{u2} β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (i : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => Set.{u2} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) s (Set.iInter.{u2, succ u1} β α (fun (i : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> (Set.{u1} β)) {s : Set.{u1} β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} (Set.{u1} β) (Set.interᵢ.{u1, succ u2} β α (fun (i : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => Set.{u1} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) s (Set.interᵢ.{u1, succ u2} β α (fun (i : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_insert_update Finset.set_binterᵢ_insert_updateₓ'. -/
-theorem set_binterᵢ_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> (Set.{u1} β)) {s : Set.{u1} β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (i : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_1 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => Set.{u1} β) (fun (a : α) (b : α) => _inst_1 a b) f x s i))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) s (Set.iInter.{u1, succ u2} β α (fun (i : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bInter_insert_update Finset.set_biInter_insert_updateₓ'. -/
+theorem set_biInter_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋂ i ∈ insert x t, @update _ _ _ f x s i) = s ∩ ⋂ i ∈ t, f i :=
- infᵢ_insert_update f hx
-#align finset.set_bInter_insert_update Finset.set_binterᵢ_insert_update
+ iInf_insert_update f hx
+#align finset.set_bInter_insert_update Finset.set_biInter_insert_update
-/- warning: finset.set_bUnion_bUnion -> Finset.set_bunionᵢ_bunionᵢ is a dubious translation:
+/- warning: finset.set_bUnion_bUnion -> Finset.set_biUnion_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.unionᵢ.{u2, succ u1} β α (fun (y : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.unionᵢ.{u2, succ u3} β γ (fun (x : γ) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => Set.unionᵢ.{u2, succ u1} β α (fun (y : α) => Set.unionᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iUnion.{u2, succ u1} β α (fun (y : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iUnion.{u2, succ u3} β γ (fun (x : γ) => Set.iUnion.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => Set.iUnion.{u2, succ u1} β α (fun (y : α) => Set.iUnion.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.unionᵢ.{u1, succ u2} β α (fun (y : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.unionᵢ.{u1, succ u3} β γ (fun (x : γ) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => Set.unionᵢ.{u1, succ u2} β α (fun (y : α) => Set.unionᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_bUnion Finset.set_bunionᵢ_bunionᵢₓ'. -/
-theorem set_bunionᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
- (⋃ y ∈ s.bunionᵢ t, f y) = ⋃ (x ∈ s) (y ∈ t x), f y :=
- supᵢ_bunionᵢ s t f
-#align finset.set_bUnion_bUnion Finset.set_bunionᵢ_bunionᵢ
+ forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iUnion.{u1, succ u2} β α (fun (y : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iUnion.{u1, succ u3} β γ (fun (x : γ) => Set.iUnion.{u1, 0} β (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => Set.iUnion.{u1, succ u2} β α (fun (y : α) => Set.iUnion.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bUnion_bUnion Finset.set_biUnion_biUnionₓ'. -/
+theorem set_biUnion_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
+ (⋃ y ∈ s.biUnion t, f y) = ⋃ (x ∈ s) (y ∈ t x), f y :=
+ iSup_biUnion s t f
+#align finset.set_bUnion_bUnion Finset.set_biUnion_biUnion
-/- warning: finset.set_bInter_bUnion -> Finset.set_binterᵢ_bunionᵢ is a dubious translation:
+/- warning: finset.set_bInter_bUnion -> Finset.set_biInter_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β α (fun (y : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.bunionᵢ.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.interᵢ.{u2, succ u3} β γ (fun (x : γ) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => Set.interᵢ.{u2, succ u1} β α (fun (y : α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u1} α)) (f : α -> (Set.{u2} β)), Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β α (fun (y : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (Finset.biUnion.{u3, u1} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iInter.{u2, succ u3} β γ (fun (x : γ) => Set.iInter.{u2, 0} β (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) x s) => Set.iInter.{u2, succ u1} β α (fun (y : α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y (t x)) => f y)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.interᵢ.{u1, succ u2} β α (fun (y : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.bunionᵢ.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.interᵢ.{u1, succ u3} β γ (fun (x : γ) => Set.interᵢ.{u1, 0} β (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => Set.interᵢ.{u1, succ u2} β α (fun (y : α) => Set.interᵢ.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
-Case conversion may be inaccurate. Consider using '#align finset.set_bInter_bUnion Finset.set_binterᵢ_bunionᵢₓ'. -/
-theorem set_binterᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
- (⋂ y ∈ s.bunionᵢ t, f y) = ⋂ (x ∈ s) (y ∈ t x), f y :=
- infᵢ_bunionᵢ s t f
-#align finset.set_bInter_bUnion Finset.set_binterᵢ_bunionᵢ
+ forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} α)) (f : α -> (Set.{u1} β)), Eq.{succ u1} (Set.{u1} β) (Set.iInter.{u1, succ u2} β α (fun (y : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (Finset.biUnion.{u3, u2} γ α (fun (a : α) (b : α) => _inst_1 a b) s t)) => f y))) (Set.iInter.{u1, succ u3} β γ (fun (x : γ) => Set.iInter.{u1, 0} β (Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) (fun (H : Membership.mem.{u3, u3} γ (Finset.{u3} γ) (Finset.instMembershipFinset.{u3} γ) x s) => Set.iInter.{u1, succ u2} β α (fun (y : α) => Set.iInter.{u1, 0} β (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) y (t x)) => f y)))))
+Case conversion may be inaccurate. Consider using '#align finset.set_bInter_bUnion Finset.set_biInter_biUnionₓ'. -/
+theorem set_biInter_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
+ (⋂ y ∈ s.biUnion t, f y) = ⋂ (x ∈ s) (y ∈ t x), f y :=
+ iInf_biUnion s t f
+#align finset.set_bInter_bUnion Finset.set_biInter_biUnion
end Finset
mathlib commit https://github.com/leanprover-community/mathlib/commit/2f8347015b12b0864dfaf366ec4909eb70c78740
@@ -4,12 +4,13 @@ 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 9d684a893c52e1d6692a504a118bfccbae04feeb
+! leanprover-community/mathlib commit 2d44d6823a96f9c79b7d1ab185918377be663424
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.Fold
import Mathbin.Data.Finset.Option
+import Mathbin.Data.Finset.Pi
import Mathbin.Data.Finset.Prod
import Mathbin.Data.Multiset.Lattice
import Mathbin.Order.CompleteLattice
@@ -23,7 +24,7 @@ import Mathbin.Order.Hom.Lattice
-/
-variable {F α β γ ι : Type _}
+variable {F α β γ ι κ : Type _}
namespace Finset
@@ -472,7 +473,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iffₓ'. -/
@[simp]
-theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
+protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
classical induction' S using Finset.induction with a S haS hi <;> simp [*]
#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iff
@@ -862,7 +863,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.inf_eq_top_iff Finset.inf_eq_top_iffₓ'. -/
@[simp]
-theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
+protected theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
@Finset.sup_eq_bot_iff αᵒᵈ _ _ _ _ _
#align finset.inf_eq_top_iff Finset.inf_eq_top_iff
@@ -922,7 +923,7 @@ variable [DistribLattice α]
section OrderBot
-variable [OrderBot α] {s : Finset β} {f : β → α} {a : α}
+variable [OrderBot α] {s : Finset ι} {t : Finset κ} {f : ι → α} {g : κ → α} {a : α}
/- warning: finset.sup_inf_distrib_left -> Finset.sup_inf_distrib_left is a dubious translation:
lean 3 declaration is
@@ -953,29 +954,35 @@ theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
/- warning: finset.disjoint_sup_right -> Finset.disjoint_sup_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall (i : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_right Finset.disjoint_sup_rightₓ'. -/
-protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
- simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
+protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → Disjoint a (f i) := by
+ simp only [disjoint_iff, sup_inf_distrib_left, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
/- warning: finset.disjoint_sup_left -> Finset.disjoint_sup_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall (i : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_left Finset.disjoint_sup_leftₓ'. -/
-protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
- simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
+protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → Disjoint (f i) a := by
+ simp only [disjoint_iff, sup_inf_distrib_right, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
+ s.sup f ⊓ t.sup g = (s ×ˢ t).sup fun i => f i.1 ⊓ g i.2 := by
+ simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left, sup_product_left]
+#align finset.sup_inf_sup Finset.sup_inf_sup
+
end OrderBot
section OrderTop
-variable [OrderTop α]
+variable [OrderTop α] {f : ι → α} {g : κ → α} {s : Finset ι} {t : Finset κ} {a : α}
/- warning: finset.inf_sup_distrib_left -> Finset.inf_sup_distrib_left is a dubious translation:
lean 3 declaration is
@@ -999,8 +1006,65 @@ theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
+protected theorem codisjoint_inf_right :
+ Codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint a (f i) :=
+ @Finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
+#align finset.codisjoint_inf_right Finset.codisjoint_inf_right
+
+protected theorem codisjoint_inf_left :
+ Codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint (f i) a :=
+ @Finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
+#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
+ s.inf f ⊔ t.inf g = (s ×ˢ t).inf fun i => f i.1 ⊔ g i.2 :=
+ @sup_inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.inf_sup_inf Finset.inf_sup_inf
+
end OrderTop
+section BoundedOrder
+
+variable [BoundedOrder α] [DecidableEq ι]
+
+--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
+theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+ (s.inf fun i => (t i).sup (f i)) =
+ (s.pi t).sup fun g => s.attach.inf fun i => f _ <| g _ i.Prop :=
+ by
+ induction' s using Finset.induction with i s hi ih
+ · simp
+ rw [inf_insert, ih, attach_insert, sup_inf_sup]
+ refine' eq_of_forall_ge_iff fun c => _
+ simp only [Subtype.val_eq_coe, Finset.sup_le_iff, mem_product, mem_pi, and_imp, Prod.forall,
+ inf_insert, inf_image]
+ refine'
+ ⟨fun h g hg =>
+ h (g i <| mem_insert_self _ _) (fun j hj => g j <| mem_insert_of_mem hj)
+ (hg _ <| mem_insert_self _ _) fun j hj => hg _ <| mem_insert_of_mem hj,
+ fun h a g ha hg => _⟩
+ -- TODO: This `have` must be named to prevent it being shadowed by the internal `this` in `simpa`
+ have aux : ∀ j : { x // x ∈ s }, ↑j ≠ i := fun j : s => ne_of_mem_of_not_mem j.2 hi
+ simpa only [cast_eq, dif_pos, Function.comp, Subtype.coe_mk, dif_neg, aux] using
+ h
+ (fun j hj =>
+ if hji : j = i then cast (congr_arg κ hji.symm) a
+ else g _ <| mem_of_mem_insert_of_ne hj hji)
+ _
+ simp_rw [mem_insert]
+ rintro j (rfl | hj)
+ · simpa
+ · simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
+#align finset.inf_sup Finset.inf_sup
+
+theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+ (s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
+ @inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.sup_inf Finset.sup_inf
+
+end BoundedOrder
+
end DistribLattice
section BooleanAlgebra
@@ -1049,6 +1113,31 @@ theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [inf_cons, inf_cons, h, inf_sdiff]
#align finset.inf_sdiff_right Finset.inf_sdiff_right
+theorem inf_himp_right (s : Finset ι) (f : ι → α) (a : α) :
+ (s.inf fun b => f b ⇨ a) = s.sup f ⇨ a :=
+ @sup_sdiff_left αᵒᵈ _ _ _ _ _
+#align finset.inf_himp_right Finset.inf_himp_right
+
+theorem sup_himp_right (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.sup fun b => f b ⇨ a) = s.inf f ⇨ a :=
+ @inf_sdiff_left αᵒᵈ _ _ _ hs _ _
+#align finset.sup_himp_right Finset.sup_himp_right
+
+theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.sup fun b => a ⇨ f b) = a ⇨ s.sup f :=
+ @inf_sdiff_right αᵒᵈ _ _ _ hs _ _
+#align finset.sup_himp_left Finset.sup_himp_left
+
+@[simp]
+protected theorem compl_sup (s : Finset ι) (f : ι → α) : s.sup fᶜ = s.inf fun i => f iᶜ :=
+ map_finset_sup (OrderIso.compl α) _ _
+#align finset.compl_sup Finset.compl_sup
+
+@[simp]
+protected theorem compl_inf (s : Finset ι) (f : ι → α) : s.inf fᶜ = s.sup fun i => f iᶜ :=
+ map_finset_inf (OrderIso.compl α) _ _
+#align finset.compl_inf Finset.compl_inf
+
end BooleanAlgebra
section LinearOrder
mathlib commit https://github.com/leanprover-community/mathlib/commit/28b2a92f2996d28e580450863c130955de0ed398
@@ -4,13 +4,12 @@ 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
+! leanprover-community/mathlib commit 9d684a893c52e1d6692a504a118bfccbae04feeb
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.Fold
import Mathbin.Data.Finset.Option
-import Mathbin.Data.Finset.Pi
import Mathbin.Data.Finset.Prod
import Mathbin.Data.Multiset.Lattice
import Mathbin.Order.CompleteLattice
@@ -24,7 +23,7 @@ import Mathbin.Order.Hom.Lattice
-/
-variable {F α β γ ι κ : Type _}
+variable {F α β γ ι : Type _}
namespace Finset
@@ -473,7 +472,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iffₓ'. -/
@[simp]
-protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
+theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
classical induction' S using Finset.induction with a S haS hi <;> simp [*]
#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iff
@@ -863,7 +862,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.inf_eq_top_iff Finset.inf_eq_top_iffₓ'. -/
@[simp]
-protected theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
+theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
@Finset.sup_eq_bot_iff αᵒᵈ _ _ _ _ _
#align finset.inf_eq_top_iff Finset.inf_eq_top_iff
@@ -923,7 +922,7 @@ variable [DistribLattice α]
section OrderBot
-variable [OrderBot α] {s : Finset ι} {t : Finset κ} {f : ι → α} {g : κ → α} {a : α}
+variable [OrderBot α] {s : Finset β} {f : β → α} {a : α}
/- warning: finset.sup_inf_distrib_left -> Finset.sup_inf_distrib_left is a dubious translation:
lean 3 declaration is
@@ -954,35 +953,29 @@ theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
/- warning: finset.disjoint_sup_right -> Finset.disjoint_sup_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall (i : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_right Finset.disjoint_sup_rightₓ'. -/
-protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → Disjoint a (f i) := by
- simp only [disjoint_iff, sup_inf_distrib_left, Finset.sup_eq_bot_iff]
+protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
+ simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
/- warning: finset.disjoint_sup_left -> Finset.disjoint_sup_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall (i : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_left Finset.disjoint_sup_leftₓ'. -/
-protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → Disjoint (f i) a := by
- simp only [disjoint_iff, sup_inf_distrib_right, Finset.sup_eq_bot_iff]
+protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
+ simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
- s.sup f ⊓ t.sup g = (s ×ˢ t).sup fun i => f i.1 ⊓ g i.2 := by
- simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left, sup_product_left]
-#align finset.sup_inf_sup Finset.sup_inf_sup
-
end OrderBot
section OrderTop
-variable [OrderTop α] {f : ι → α} {g : κ → α} {s : Finset ι} {t : Finset κ} {a : α}
+variable [OrderTop α]
/- warning: finset.inf_sup_distrib_left -> Finset.inf_sup_distrib_left is a dubious translation:
lean 3 declaration is
@@ -1006,65 +999,8 @@ theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
-protected theorem codisjoint_inf_right :
- Codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint a (f i) :=
- @Finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
-#align finset.codisjoint_inf_right Finset.codisjoint_inf_right
-
-protected theorem codisjoint_inf_left :
- Codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint (f i) a :=
- @Finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
-#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
-
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
- s.inf f ⊔ t.inf g = (s ×ˢ t).inf fun i => f i.1 ⊔ g i.2 :=
- @sup_inf_sup αᵒᵈ _ _ _ _ _ _ _ _
-#align finset.inf_sup_inf Finset.inf_sup_inf
-
end OrderTop
-section BoundedOrder
-
-variable [BoundedOrder α] [DecidableEq ι]
-
---TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
-theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
- (s.inf fun i => (t i).sup (f i)) =
- (s.pi t).sup fun g => s.attach.inf fun i => f _ <| g _ i.Prop :=
- by
- induction' s using Finset.induction with i s hi ih
- · simp
- rw [inf_insert, ih, attach_insert, sup_inf_sup]
- refine' eq_of_forall_ge_iff fun c => _
- simp only [Subtype.val_eq_coe, Finset.sup_le_iff, mem_product, mem_pi, and_imp, Prod.forall,
- inf_insert, inf_image]
- refine'
- ⟨fun h g hg =>
- h (g i <| mem_insert_self _ _) (fun j hj => g j <| mem_insert_of_mem hj)
- (hg _ <| mem_insert_self _ _) fun j hj => hg _ <| mem_insert_of_mem hj,
- fun h a g ha hg => _⟩
- -- TODO: This `have` must be named to prevent it being shadowed by the internal `this` in `simpa`
- have aux : ∀ j : { x // x ∈ s }, ↑j ≠ i := fun j : s => ne_of_mem_of_not_mem j.2 hi
- simpa only [cast_eq, dif_pos, Function.comp, Subtype.coe_mk, dif_neg, aux] using
- h
- (fun j hj =>
- if hji : j = i then cast (congr_arg κ hji.symm) a
- else g _ <| mem_of_mem_insert_of_ne hj hji)
- _
- simp_rw [mem_insert]
- rintro j (rfl | hj)
- · simpa
- · simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
-#align finset.inf_sup Finset.inf_sup
-
-theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
- (s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
- @inf_sup αᵒᵈ _ _ _ _ _ _ _ _
-#align finset.sup_inf Finset.sup_inf
-
-end BoundedOrder
-
end DistribLattice
section BooleanAlgebra
@@ -1113,31 +1049,6 @@ theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [inf_cons, inf_cons, h, inf_sdiff]
#align finset.inf_sdiff_right Finset.inf_sdiff_right
-theorem inf_himp_right (s : Finset ι) (f : ι → α) (a : α) :
- (s.inf fun b => f b ⇨ a) = s.sup f ⇨ a :=
- @sup_sdiff_left αᵒᵈ _ _ _ _ _
-#align finset.inf_himp_right Finset.inf_himp_right
-
-theorem sup_himp_right (hs : s.Nonempty) (f : ι → α) (a : α) :
- (s.sup fun b => f b ⇨ a) = s.inf f ⇨ a :=
- @inf_sdiff_left αᵒᵈ _ _ _ hs _ _
-#align finset.sup_himp_right Finset.sup_himp_right
-
-theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
- (s.sup fun b => a ⇨ f b) = a ⇨ s.sup f :=
- @inf_sdiff_right αᵒᵈ _ _ _ hs _ _
-#align finset.sup_himp_left Finset.sup_himp_left
-
-@[simp]
-protected theorem compl_sup (s : Finset ι) (f : ι → α) : s.sup fᶜ = s.inf fun i => f iᶜ :=
- map_finset_sup (OrderIso.compl α) _ _
-#align finset.compl_sup Finset.compl_sup
-
-@[simp]
-protected theorem compl_inf (s : Finset ι) (f : ι → α) : s.inf fᶜ = s.sup fun i => f iᶜ :=
- map_finset_inf (OrderIso.compl α) _ _
-#align finset.compl_inf Finset.compl_inf
-
end BooleanAlgebra
section LinearOrder
mathlib commit https://github.com/leanprover-community/mathlib/commit/2f8347015b12b0864dfaf366ec4909eb70c78740
@@ -4,12 +4,13 @@ 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 9d684a893c52e1d6692a504a118bfccbae04feeb
+! leanprover-community/mathlib commit 2d44d6823a96f9c79b7d1ab185918377be663424
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.Fold
import Mathbin.Data.Finset.Option
+import Mathbin.Data.Finset.Pi
import Mathbin.Data.Finset.Prod
import Mathbin.Data.Multiset.Lattice
import Mathbin.Order.CompleteLattice
@@ -23,7 +24,7 @@ import Mathbin.Order.Hom.Lattice
-/
-variable {F α β γ ι : Type _}
+variable {F α β γ ι κ : Type _}
namespace Finset
@@ -472,7 +473,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 S f) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iffₓ'. -/
@[simp]
-theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
+protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
classical induction' S using Finset.induction with a S haS hi <;> simp [*]
#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iff
@@ -862,7 +863,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (f : β -> α) (S : Finset.{u2} β), Iff (Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 S f) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (forall (s : β), (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) s S) -> (Eq.{succ u1} α (f s) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))))
Case conversion may be inaccurate. Consider using '#align finset.inf_eq_top_iff Finset.inf_eq_top_iffₓ'. -/
@[simp]
-theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
+protected theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
@Finset.sup_eq_bot_iff αᵒᵈ _ _ _ _ _
#align finset.inf_eq_top_iff Finset.inf_eq_top_iff
@@ -922,7 +923,7 @@ variable [DistribLattice α]
section OrderBot
-variable [OrderBot α] {s : Finset β} {f : β → α} {a : α}
+variable [OrderBot α] {s : Finset ι} {t : Finset κ} {f : ι → α} {g : κ → α} {a : α}
/- warning: finset.sup_inf_distrib_left -> Finset.sup_inf_distrib_left is a dubious translation:
lean 3 declaration is
@@ -953,29 +954,35 @@ theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
/- warning: finset.disjoint_sup_right -> Finset.disjoint_sup_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall (i : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a (f i)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_right Finset.disjoint_sup_rightₓ'. -/
-protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
- simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
+protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → Disjoint a (f i) := by
+ simp only [disjoint_iff, sup_inf_distrib_left, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
/- warning: finset.disjoint_sup_left -> Finset.disjoint_sup_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall (i : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {s : Finset.{u2} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (forall {{i : ι}}, (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i s) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 (f i) a))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} ι} {f : ι -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_left Finset.disjoint_sup_leftₓ'. -/
-protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
- simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
+protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → Disjoint (f i) a := by
+ simp only [disjoint_iff, sup_inf_distrib_right, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
+ s.sup f ⊓ t.sup g = (s ×ˢ t).sup fun i => f i.1 ⊓ g i.2 := by
+ simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left, sup_product_left]
+#align finset.sup_inf_sup Finset.sup_inf_sup
+
end OrderBot
section OrderTop
-variable [OrderTop α]
+variable [OrderTop α] {f : ι → α} {g : κ → α} {s : Finset ι} {t : Finset κ} {a : α}
/- warning: finset.inf_sup_distrib_left -> Finset.inf_sup_distrib_left is a dubious translation:
lean 3 declaration is
@@ -999,8 +1006,65 @@ theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
+protected theorem codisjoint_inf_right :
+ Codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint a (f i) :=
+ @Finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
+#align finset.codisjoint_inf_right Finset.codisjoint_inf_right
+
+protected theorem codisjoint_inf_left :
+ Codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint (f i) a :=
+ @Finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
+#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
+ s.inf f ⊔ t.inf g = (s ×ˢ t).inf fun i => f i.1 ⊔ g i.2 :=
+ @sup_inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.inf_sup_inf Finset.inf_sup_inf
+
end OrderTop
+section BoundedOrder
+
+variable [BoundedOrder α] [DecidableEq ι]
+
+--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
+theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+ (s.inf fun i => (t i).sup (f i)) =
+ (s.pi t).sup fun g => s.attach.inf fun i => f _ <| g _ i.Prop :=
+ by
+ induction' s using Finset.induction with i s hi ih
+ · simp
+ rw [inf_insert, ih, attach_insert, sup_inf_sup]
+ refine' eq_of_forall_ge_iff fun c => _
+ simp only [Subtype.val_eq_coe, Finset.sup_le_iff, mem_product, mem_pi, and_imp, Prod.forall,
+ inf_insert, inf_image]
+ refine'
+ ⟨fun h g hg =>
+ h (g i <| mem_insert_self _ _) (fun j hj => g j <| mem_insert_of_mem hj)
+ (hg _ <| mem_insert_self _ _) fun j hj => hg _ <| mem_insert_of_mem hj,
+ fun h a g ha hg => _⟩
+ -- TODO: This `have` must be named to prevent it being shadowed by the internal `this` in `simpa`
+ have aux : ∀ j : { x // x ∈ s }, ↑j ≠ i := fun j : s => ne_of_mem_of_not_mem j.2 hi
+ simpa only [cast_eq, dif_pos, Function.comp, Subtype.coe_mk, dif_neg, aux] using
+ h
+ (fun j hj =>
+ if hji : j = i then cast (congr_arg κ hji.symm) a
+ else g _ <| mem_of_mem_insert_of_ne hj hji)
+ _
+ simp_rw [mem_insert]
+ rintro j (rfl | hj)
+ · simpa
+ · simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
+#align finset.inf_sup Finset.inf_sup
+
+theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+ (s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
+ @inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.sup_inf Finset.sup_inf
+
+end BoundedOrder
+
end DistribLattice
section BooleanAlgebra
@@ -1049,6 +1113,31 @@ theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [inf_cons, inf_cons, h, inf_sdiff]
#align finset.inf_sdiff_right Finset.inf_sdiff_right
+theorem inf_himp_right (s : Finset ι) (f : ι → α) (a : α) :
+ (s.inf fun b => f b ⇨ a) = s.sup f ⇨ a :=
+ @sup_sdiff_left αᵒᵈ _ _ _ _ _
+#align finset.inf_himp_right Finset.inf_himp_right
+
+theorem sup_himp_right (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.sup fun b => f b ⇨ a) = s.inf f ⇨ a :=
+ @inf_sdiff_left αᵒᵈ _ _ _ hs _ _
+#align finset.sup_himp_right Finset.sup_himp_right
+
+theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.sup fun b => a ⇨ f b) = a ⇨ s.sup f :=
+ @inf_sdiff_right αᵒᵈ _ _ _ hs _ _
+#align finset.sup_himp_left Finset.sup_himp_left
+
+@[simp]
+protected theorem compl_sup (s : Finset ι) (f : ι → α) : s.sup fᶜ = s.inf fun i => f iᶜ :=
+ map_finset_sup (OrderIso.compl α) _ _
+#align finset.compl_sup Finset.compl_sup
+
+@[simp]
+protected theorem compl_inf (s : Finset ι) (f : ι → α) : s.inf fᶜ = s.sup fun i => f iᶜ :=
+ map_finset_inf (OrderIso.compl α) _ _
+#align finset.compl_inf Finset.compl_inf
+
end BooleanAlgebra
section LinearOrder
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -383,7 +383,7 @@ theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multis
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2485 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2487 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2485 x._@.Mathlib.Data.Finset.Lattice._hyg.2487) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2483 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2485 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2483 x._@.Mathlib.Data.Finset.Lattice._hyg.2485) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
@@ -426,7 +426,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2839 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2841 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2839 x._@.Mathlib.Data.Finset.Lattice._hyg.2841) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
+ forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2837 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2839 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2837 x._@.Mathlib.Data.Finset.Lattice._hyg.2839) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
Case conversion may be inaccurate. Consider using '#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directedₓ'. -/
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
@@ -822,7 +822,7 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5312 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5314 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5312 x._@.Mathlib.Data.Finset.Lattice._hyg.5314) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5310 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5312 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5310 x._@.Mathlib.Data.Finset.Lattice._hyg.5312) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b8ba04e2f326f3f7cf24ad129beda58531ada61
@@ -153,7 +153,7 @@ theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : SupBotHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.sup.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u1}} {β : Type.{u4}} {ι : Type.{u3}} [_inst_1 : SemilatticeSup.{u4} β] [_inst_2 : OrderBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1)))] [_inst_3 : SemilatticeSup.{u3} ι] [_inst_4 : OrderBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3)))] [_inst_5 : SupBotHomClass.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderBot.toBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} α) (g : α -> β), Eq.{succ u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : β) => ι) (Finset.sup.{u4, u1} β α _inst_1 _inst_2 s g)) (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : β) => ι) _x) (SupHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (SupBotHomClass.toSupHomClass.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderBot.toBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f (Finset.sup.{u4, u1} β α _inst_1 _inst_2 s g)) (Finset.sup.{u3, u1} ι α _inst_3 _inst_4 s (Function.comp.{succ u1, succ u4, succ u3} α β ι (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : β) => ι) _x) (SupHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (SupBotHomClass.toSupHomClass.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderBot.toBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f) g))
+ forall {F : Type.{u3}} {α : Type.{u2}} {β : Type.{u4}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u4} β] [_inst_4 : OrderBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3)))] [_inst_5 : SupBotHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} ι) (g : ι -> α), Eq.{succ u4} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 s g)) (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) _x) (SupHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (SupBotHomClass.toSupHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u4, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u4} ι α β (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : α) => β) _x) (SupHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (SupBotHomClass.toSupHomClass.{u3, u2, u4} F α β (SemilatticeSup.toSup.{u2} α _inst_1) (SemilatticeSup.toSup.{u4} β _inst_3) (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f) g))
Case conversion may be inaccurate. Consider using '#align map_finset_sup map_finset_supₓ'. -/
@[simp]
theorem map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β] (f : F) (s : Finset ι)
@@ -383,7 +383,7 @@ theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multis
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2342 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2344 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2342 x._@.Mathlib.Data.Finset.Lattice._hyg.2344) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2485 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2487 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2485 x._@.Mathlib.Data.Finset.Lattice._hyg.2487) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
@@ -426,7 +426,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2692 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2694 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2692 x._@.Mathlib.Data.Finset.Lattice._hyg.2694) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
+ forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2839 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2841 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2839 x._@.Mathlib.Data.Finset.Lattice._hyg.2841) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
Case conversion may be inaccurate. Consider using '#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directedₓ'. -/
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
@@ -650,7 +650,7 @@ theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} β] [_inst_4 : OrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : InfTopHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.inf.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u1}} {β : Type.{u4}} {ι : Type.{u3}} [_inst_1 : SemilatticeInf.{u4} β] [_inst_2 : OrderTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1)))] [_inst_3 : SemilatticeInf.{u3} ι] [_inst_4 : OrderTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3)))] [_inst_5 : InfTopHomClass.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderTop.toTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} α) (g : α -> β), Eq.{succ u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => ι) (Finset.inf.{u4, u1} β α _inst_1 _inst_2 s g)) (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => ι) _x) (InfHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (InfTopHomClass.toInfHomClass.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderTop.toTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f (Finset.inf.{u4, u1} β α _inst_1 _inst_2 s g)) (Finset.inf.{u3, u1} ι α _inst_3 _inst_4 s (Function.comp.{succ u1, succ u4, succ u3} α β ι (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => ι) _x) (InfHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (InfTopHomClass.toInfHomClass.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderTop.toTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f) g))
+ forall {F : Type.{u3}} {α : Type.{u2}} {β : Type.{u4}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u4} β] [_inst_4 : OrderTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3)))] [_inst_5 : InfTopHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} ι) (g : ι -> α), Eq.{succ u4} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 s g)) (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (InfTopHomClass.toInfHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u4, u1} β ι _inst_3 _inst_4 s (Function.comp.{succ u1, succ u2, succ u4} ι α β (FunLike.coe.{succ u3, succ u2, succ u4} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (InfTopHomClass.toInfHomClass.{u3, u2, u4} F α β (SemilatticeInf.toInf.{u2} α _inst_1) (SemilatticeInf.toInf.{u4} β _inst_3) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_3))) _inst_4) _inst_5)) f) g))
Case conversion may be inaccurate. Consider using '#align map_finset_inf map_finset_infₓ'. -/
@[simp]
theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β] (f : F) (s : Finset ι)
@@ -822,7 +822,7 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5395 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5397 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5395 x._@.Mathlib.Data.Finset.Lattice._hyg.5397) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5312 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5314 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5312 x._@.Mathlib.Data.Finset.Lattice._hyg.5314) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
@@ -1011,7 +1011,7 @@ variable [BooleanAlgebra α] {s : Finset ι}
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : BooleanAlgebra.{u2} α] (s : Finset.{u1} ι) (f : ι -> α) (a : α), Eq.{succ u2} α (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (f b))) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s f))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f))
Case conversion may be inaccurate. Consider using '#align finset.sup_sdiff_left Finset.sup_sdiff_leftₓ'. -/
theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
(s.sup fun b => a \ f b) = a \ s.inf f :=
@@ -1025,7 +1025,7 @@ theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s f)))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : BooleanAlgebra.{u2} α] {s : Finset.{u1} ι}, (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u2} α (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (f b))) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s f)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f)))
Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_left Finset.inf_sdiff_leftₓ'. -/
theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.inf fun b => a \ f b) = a \ s.sup f :=
@@ -1039,7 +1039,7 @@ theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) (f b) a)) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f) a))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : BooleanAlgebra.{u2} α] {s : Finset.{u1} ι}, (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u2} α (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) (f b) a)) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s f) a))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) (f b) a)) (SDiff.sdiff.{u1} α (BooleanAlgebra.toSDiff.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u1} α _inst_1)) s f) a))
Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_right Finset.inf_sdiff_rightₓ'. -/
theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
(s.inf fun b => f b \ a) = s.inf f \ a :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b8ba04e2f326f3f7cf24ad129beda58531ada61
@@ -4,7 +4,7 @@ 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 c813ed7de0f5115f956239124e9b30f3a621966f
+! leanprover-community/mathlib commit 9d684a893c52e1d6692a504a118bfccbae04feeb
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,7 @@ import Mathbin.Data.Finset.Option
import Mathbin.Data.Finset.Prod
import Mathbin.Data.Multiset.Lattice
import Mathbin.Order.CompleteLattice
+import Mathbin.Order.Hom.Lattice
/-!
# Lattice operations on finsets
@@ -22,7 +23,7 @@ import Mathbin.Order.CompleteLattice
-/
-variable {α β γ ι : Type _}
+variable {F α β γ ι : Type _}
namespace Finset
@@ -148,6 +149,18 @@ theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
#align finset.sup_congr Finset.sup_congr
-/
+/- warning: map_finset_sup -> map_finset_sup is a dubious translation:
+lean 3 declaration is
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : SupBotHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.sup.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.sup.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (SupHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (SupBotHomClass.toSupHomClass.{u1, u2, u3} F α β (SemilatticeSup.toHasSup.{u2} α _inst_1) (SemilatticeSup.toHasSup.{u3} β _inst_3) (OrderBot.toHasBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderBot.toHasBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
+but is expected to have type
+ forall {F : Type.{u2}} {α : Type.{u1}} {β : Type.{u4}} {ι : Type.{u3}} [_inst_1 : SemilatticeSup.{u4} β] [_inst_2 : OrderBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1)))] [_inst_3 : SemilatticeSup.{u3} ι] [_inst_4 : OrderBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3)))] [_inst_5 : SupBotHomClass.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderBot.toBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} α) (g : α -> β), Eq.{succ u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : β) => ι) (Finset.sup.{u4, u1} β α _inst_1 _inst_2 s g)) (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : β) => ι) _x) (SupHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (SupBotHomClass.toSupHomClass.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderBot.toBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f (Finset.sup.{u4, u1} β α _inst_1 _inst_2 s g)) (Finset.sup.{u3, u1} ι α _inst_3 _inst_4 s (Function.comp.{succ u1, succ u4, succ u3} α β ι (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.433 : β) => ι) _x) (SupHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (SupBotHomClass.toSupHomClass.{u2, u4, u3} F β ι (SemilatticeSup.toSup.{u4} β _inst_1) (SemilatticeSup.toSup.{u3} ι _inst_3) (OrderBot.toBot.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeSup.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderBot.toBot.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeSup.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f) g))
+Case conversion may be inaccurate. Consider using '#align map_finset_sup map_finset_supₓ'. -/
+@[simp]
+theorem map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β] (f : F) (s : Finset ι)
+ (g : ι → α) : f (s.sup g) = s.sup (f ∘ g) :=
+ Finset.cons_induction_on s (map_bot f) fun i s _ h => by rw [sup_cons, sup_cons, map_sup, h]
+#align map_finset_sup map_finset_sup
+
/- warning: finset.sup_le_iff -> Finset.sup_le_iff is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {a : α}, Iff (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) a) (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) (f b) a))
@@ -633,6 +646,18 @@ theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
#align finset.inf_congr Finset.inf_congr
-/
+/- warning: map_finset_inf -> map_finset_inf is a dubious translation:
+lean 3 declaration is
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {ι : Type.{u4}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} β] [_inst_4 : OrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3)))] [_inst_5 : InfTopHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4)] (f : F) (s : Finset.{u4} ι) (g : ι -> α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f (Finset.inf.{u2, u4} α ι _inst_1 _inst_2 s g)) (Finset.inf.{u3, u4} β ι _inst_3 _inst_4 s (Function.comp.{succ u4, succ u2, succ u3} ι α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α _inst_1) (SemilatticeInf.toHasInf.{u3} β _inst_3) (OrderTop.toHasTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) (OrderTop.toHasTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β _inst_3))) _inst_4) _inst_5))) f) g))
+but is expected to have type
+ forall {F : Type.{u2}} {α : Type.{u1}} {β : Type.{u4}} {ι : Type.{u3}} [_inst_1 : SemilatticeInf.{u4} β] [_inst_2 : OrderTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1)))] [_inst_3 : SemilatticeInf.{u3} ι] [_inst_4 : OrderTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3)))] [_inst_5 : InfTopHomClass.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderTop.toTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3))) _inst_4)] (f : F) (s : Finset.{u1} α) (g : α -> β), Eq.{succ u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => ι) (Finset.inf.{u4, u1} β α _inst_1 _inst_2 s g)) (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => ι) _x) (InfHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (InfTopHomClass.toInfHomClass.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderTop.toTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f (Finset.inf.{u4, u1} β α _inst_1 _inst_2 s g)) (Finset.inf.{u3, u1} ι α _inst_3 _inst_4 s (Function.comp.{succ u1, succ u4, succ u3} α β ι (FunLike.coe.{succ u2, succ u4, succ u3} F β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => ι) _x) (InfHomClass.toFunLike.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (InfTopHomClass.toInfHomClass.{u2, u4, u3} F β ι (SemilatticeInf.toInf.{u4} β _inst_1) (SemilatticeInf.toInf.{u3} ι _inst_3) (OrderTop.toTop.{u4} β (Preorder.toLE.{u4} β (PartialOrder.toPreorder.{u4} β (SemilatticeInf.toPartialOrder.{u4} β _inst_1))) _inst_2) (OrderTop.toTop.{u3} ι (Preorder.toLE.{u3} ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι _inst_3))) _inst_4) _inst_5)) f) g))
+Case conversion may be inaccurate. Consider using '#align map_finset_inf map_finset_infₓ'. -/
+@[simp]
+theorem map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β] (f : F) (s : Finset ι)
+ (g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
+ Finset.cons_induction_on s (map_top f) fun i s _ h => by rw [inf_cons, inf_cons, map_inf, h]
+#align map_finset_inf map_finset_inf
+
/- warning: finset.inf_bUnion -> Finset.inf_bunionᵢ is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.inf.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.inf.{u1, u2} α β _inst_1 _inst_2 (t x) f))
@@ -769,48 +794,6 @@ theorem inf_erase_top [DecidableEq α] (s : Finset α) : (s.eraseₓ ⊤).inf id
@sup_erase_bot αᵒᵈ _ _ _ _
#align finset.inf_erase_top Finset.inf_erase_top
-/- warning: finset.sup_sdiff_left -> Finset.sup_sdiff_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : BooleanAlgebra.{u1} α] (s : Finset.{u2} β) (f : β -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)) s (fun (b : β) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_3) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_3) a (Finset.inf.{u1, u2} α β (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_3)))) s f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : BooleanAlgebra.{u2} α] (s : Finset.{u1} β) (f : β -> α) (a : α), Eq.{succ u2} α (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3))))) (BoundedOrder.toOrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_3)) s (fun (b : β) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_3) a (f b))) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_3) a (Finset.inf.{u2, u1} α β (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_3)) s f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_sdiff_left Finset.sup_sdiff_leftₓ'. -/
-theorem sup_sdiff_left {α β : Type _} [BooleanAlgebra α] (s : Finset β) (f : β → α) (a : α) :
- (s.sup fun b => a \ f b) = a \ s.inf f :=
- by
- refine' Finset.cons_induction_on s _ fun b t _ h => _
- · rw [sup_empty, inf_empty, sdiff_top]
- · rw [sup_cons, inf_cons, h, sdiff_inf]
-#align finset.sup_sdiff_left Finset.sup_sdiff_left
-
-/- warning: finset.inf_sdiff_left -> Finset.inf_sdiff_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : BooleanAlgebra.{u1} α] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_3)))) s (fun (b : β) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_3) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_3) a (Finset.sup.{u1, u2} α β (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)) s f)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : BooleanAlgebra.{u2} α] {s : Finset.{u1} β}, (Finset.Nonempty.{u1} β s) -> (forall (f : β -> α) (a : α), Eq.{succ u2} α (Finset.inf.{u2, u1} α β (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_3)) s (fun (b : β) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_3) a (f b))) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_3) a (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3))))) (BoundedOrder.toOrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_3)) s f)))
-Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_left Finset.inf_sdiff_leftₓ'. -/
-theorem inf_sdiff_left {α β : Type _} [BooleanAlgebra α] {s : Finset β} (hs : s.Nonempty)
- (f : β → α) (a : α) : (s.inf fun b => a \ f b) = a \ s.sup f :=
- by
- induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
- · rw [sup_singleton, inf_singleton]
- · rw [sup_cons, inf_cons, h, sdiff_sup]
-#align finset.inf_sdiff_left Finset.inf_sdiff_left
-
-/- warning: finset.inf_sdiff_right -> Finset.inf_sdiff_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : BooleanAlgebra.{u1} α] {s : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (forall (f : β -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α β (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_3)))) s (fun (b : β) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_3) (f b) a)) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_3) (Finset.inf.{u1, u2} α β (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_3)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_3)))) s f) a))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : BooleanAlgebra.{u2} α] {s : Finset.{u1} β}, (Finset.Nonempty.{u1} β s) -> (forall (f : β -> α) (a : α), Eq.{succ u2} α (Finset.inf.{u2, u1} α β (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_3)) s (fun (b : β) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_3) (f b) a)) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_3) (Finset.inf.{u2, u1} α β (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_3)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_3)) s f) a))
-Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_right Finset.inf_sdiff_rightₓ'. -/
-theorem inf_sdiff_right {α β : Type _} [BooleanAlgebra α] {s : Finset β} (hs : s.Nonempty)
- (f : β → α) (a : α) : (s.inf fun b => f b \ a) = s.inf f \ a :=
- by
- induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
- · rw [inf_singleton, inf_singleton]
- · rw [inf_cons, inf_cons, h, inf_sdiff]
-#align finset.inf_sdiff_right Finset.inf_sdiff_right
-
/- warning: finset.comp_inf_eq_inf_comp -> Finset.comp_inf_eq_inf_comp is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toHasTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
@@ -1020,6 +1003,54 @@ end OrderTop
end DistribLattice
+section BooleanAlgebra
+
+variable [BooleanAlgebra α] {s : Finset ι}
+
+/- warning: finset.sup_sdiff_left -> Finset.sup_sdiff_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f))
+but is expected to have type
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : BooleanAlgebra.{u2} α] (s : Finset.{u1} ι) (f : ι -> α) (a : α), Eq.{succ u2} α (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (f b))) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s f))
+Case conversion may be inaccurate. Consider using '#align finset.sup_sdiff_left Finset.sup_sdiff_leftₓ'. -/
+theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
+ (s.sup fun b => a \ f b) = a \ s.inf f :=
+ by
+ refine' Finset.cons_induction_on s _ fun b t _ h => _
+ · rw [sup_empty, inf_empty, sdiff_top]
+ · rw [sup_cons, inf_cons, h, sdiff_inf]
+#align finset.sup_sdiff_left Finset.sup_sdiff_left
+
+/- warning: finset.inf_sdiff_left -> Finset.inf_sdiff_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (f b))) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)) s f)))
+but is expected to have type
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : BooleanAlgebra.{u2} α] {s : Finset.{u1} ι}, (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u2} α (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (f b))) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) a (Finset.sup.{u2, u1} α ι (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s f)))
+Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_left Finset.inf_sdiff_leftₓ'. -/
+theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.inf fun b => a \ f b) = a \ s.sup f :=
+ by
+ induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
+ · rw [sup_singleton, inf_singleton]
+ · rw [sup_cons, inf_cons, h, sdiff_sup]
+#align finset.inf_sdiff_left Finset.inf_sdiff_left
+
+/- warning: finset.inf_sdiff_right -> Finset.inf_sdiff_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : BooleanAlgebra.{u1} α] {s : Finset.{u2} ι}, (Finset.Nonempty.{u2} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u1} α (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s (fun (b : ι) => SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) (f b) a)) (SDiff.sdiff.{u1} α (BooleanAlgebra.toHasSdiff.{u1} α _inst_1) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} α _inst_1)))) (GeneralizedHeytingAlgebra.toOrderTop.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α (BiheytingAlgebra.toHeytingAlgebra.{u1} α (BooleanAlgebra.toBiheytingAlgebra.{u1} α _inst_1)))) s f) a))
+but is expected to have type
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : BooleanAlgebra.{u2} α] {s : Finset.{u1} ι}, (Finset.Nonempty.{u1} ι s) -> (forall (f : ι -> α) (a : α), Eq.{succ u2} α (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s (fun (b : ι) => SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) (f b) a)) (SDiff.sdiff.{u2} α (BooleanAlgebra.toSDiff.{u2} α _inst_1) (Finset.inf.{u2, u1} α ι (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α (BooleanAlgebra.toBiheytingAlgebra.{u2} α _inst_1)))))))) (BooleanAlgebra.toBoundedOrder.{u2} α _inst_1)) s f) a))
+Case conversion may be inaccurate. Consider using '#align finset.inf_sdiff_right Finset.inf_sdiff_rightₓ'. -/
+theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.inf fun b => f b \ a) = s.inf f \ a :=
+ by
+ induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
+ · rw [inf_singleton, inf_singleton]
+ · rw [inf_cons, inf_cons, h, inf_sdiff]
+#align finset.inf_sdiff_right Finset.inf_sdiff_right
+
+end BooleanAlgebra
+
section LinearOrder
variable [LinearOrder α]
mathlib commit https://github.com/leanprover-community/mathlib/commit/a4f99eae998680d3a2c240da4a2b16354c85ee49
@@ -4,7 +4,7 @@ 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 a968611b6a772cf7bdf61146e6d62fc882c92372
+! leanprover-community/mathlib commit c813ed7de0f5115f956239124e9b30f3a621966f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -3142,17 +3142,6 @@ theorem supᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
(⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← supr_coe, coe_image, supᵢ_image, supr_coe]
#align finset.supr_finset_image Finset.supᵢ_finset_image
-/- warning: finset.sup_finset_image -> Finset.sup_finset_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : DecidableEq.{succ u1} α] {β : Type.{u2}} {γ : Type.{u3}} [_inst_3 : SemilatticeSup.{u2} β] [_inst_4 : OrderBot.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeSup.toPartialOrder.{u2} β _inst_3)))] (f : γ -> α) (g : α -> β) (s : Finset.{u3} γ), Eq.{succ u2} β (Finset.sup.{u2, u1} β α _inst_3 _inst_4 (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s) g) (Finset.sup.{u2, u3} β γ _inst_3 _inst_4 s (Function.comp.{succ u3, succ u1, succ u2} γ α β g f))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : DecidableEq.{succ u1} α] {β : Type.{u3}} {γ : Type.{u2}} [_inst_3 : SemilatticeSup.{u3} β] [_inst_4 : OrderBot.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeSup.toPartialOrder.{u3} β _inst_3)))] (f : γ -> α) (g : α -> β) (s : Finset.{u2} γ), Eq.{succ u3} β (Finset.sup.{u3, u1} β α _inst_3 _inst_4 (Finset.image.{u2, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s) g) (Finset.sup.{u3, u2} β γ _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} γ α β g f))
-Case conversion may be inaccurate. Consider using '#align finset.sup_finset_image Finset.sup_finset_imageₓ'. -/
-theorem sup_finset_image {β γ : Type _} [SemilatticeSup β] [OrderBot β] (f : γ → α) (g : α → β)
- (s : Finset γ) : (s.image f).sup g = s.sup (g ∘ f) := by
- classical induction' s using Finset.induction_on with a s' ha ih <;> simp [*]
-#align finset.sup_finset_image Finset.sup_finset_image
-
/- warning: finset.infi_finset_image -> Finset.infᵢ_finset_image is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : γ -> α} {g : α -> β} {s : Finset.{u3} γ}, Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finset.image.{u3, u1} γ α (fun (a : α) (b : α) => _inst_2 a b) f s)) => g x))) (infᵢ.{u2, succ u3} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) γ (fun (y : γ) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) (fun (H : Membership.Mem.{u3, u3} γ (Finset.{u3} γ) (Finset.hasMem.{u3} γ) y s) => g (f y))))
mathlib commit https://github.com/leanprover-community/mathlib/commit/49b7f94aab3a3bdca1f9f34c5d818afb253b3993
@@ -189,9 +189,11 @@ theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
#align finset.le_sup Finset.le_sup
-/
+#print Finset.le_sup_of_le /-
theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
h.trans <| le_sup hb
#align finset.le_sup_of_le Finset.le_sup_of_le
+-/
/- warning: finset.sup_bUnion -> Finset.sup_bunionᵢ is a dubious translation:
lean 3 declaration is
@@ -368,7 +370,7 @@ theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multis
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2294 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2296 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2294 x._@.Mathlib.Data.Finset.Lattice._hyg.2296) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2342 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2344 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2342 x._@.Mathlib.Data.Finset.Lattice._hyg.2344) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
@@ -411,7 +413,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2644 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2646 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2644 x._@.Mathlib.Data.Finset.Lattice._hyg.2646) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
+ forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2692 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2694 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2692 x._@.Mathlib.Data.Finset.Lattice._hyg.2694) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
Case conversion may be inaccurate. Consider using '#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directedₓ'. -/
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
@@ -697,9 +699,11 @@ theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
#align finset.inf_le Finset.inf_le
-/
+#print Finset.inf_le_of_le /-
theorem inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a :=
(inf_le hb).trans h
#align finset.inf_le_of_le Finset.inf_le_of_le
+-/
#print Finset.inf_mono_fun /-
theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
@@ -835,7 +839,7 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5298 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5300 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5298 x._@.Mathlib.Data.Finset.Lattice._hyg.5300) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5395 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5397 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5395 x._@.Mathlib.Data.Finset.Lattice._hyg.5397) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
@@ -1270,9 +1274,11 @@ theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f :=
#align finset.le_sup' Finset.le_sup'
-/
+#print Finset.le_sup'_of_le /-
theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
h.trans <| le_sup' _ hb
#align finset.le_sup'_of_le Finset.le_sup'_of_le
+-/
/- warning: finset.sup'_const -> Finset.sup'_const is a dubious translation:
lean 3 declaration is
@@ -1463,6 +1469,12 @@ theorem inf'_le (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
#align finset.inf'_le Finset.inf'_le
-/
+/- warning: finset.inf'_le_of_le -> Finset.inf'_le_of_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : α} {b : β} (hb : Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s), (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f b) a) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) b hb) f) a)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (f : β -> α) {a : β} {b : α} (hb : Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) a s), (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (f a) b) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) (Finset.inf'.{u1, u2} α β _inst_1 s (Exists.intro.{succ u2} β (fun (x : β) => Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) x s) a hb) f) b)
+Case conversion may be inaccurate. Consider using '#align finset.inf'_le_of_le Finset.inf'_le_of_leₓ'. -/
theorem inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a :=
(inf'_le _ hb).trans h
#align finset.inf'_le_of_le Finset.inf'_le_of_le
mathlib commit https://github.com/leanprover-community/mathlib/commit/49b7f94aab3a3bdca1f9f34c5d818afb253b3993
@@ -4,7 +4,7 @@ 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 1c857a1f6798cb054be942199463c2cf904cb937
+! leanprover-community/mathlib commit a968611b6a772cf7bdf61146e6d62fc882c92372
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -189,6 +189,10 @@ theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
#align finset.le_sup Finset.le_sup
-/
+theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
+ h.trans <| le_sup hb
+#align finset.le_sup_of_le Finset.le_sup_of_le
+
/- warning: finset.sup_bUnion -> Finset.sup_bunionᵢ is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] (s : Finset.{u3} γ) (t : γ -> (Finset.{u2} β)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.bunionᵢ.{u3, u2} γ β (fun (a : β) (b : β) => _inst_3 a b) s t) f) (Finset.sup.{u1, u3} α γ _inst_1 _inst_2 s (fun (x : γ) => Finset.sup.{u1, u2} α β _inst_1 _inst_2 (t x) f))
@@ -693,6 +697,10 @@ theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
#align finset.inf_le Finset.inf_le
-/
+theorem inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a :=
+ (inf_le hb).trans h
+#align finset.inf_le_of_le Finset.inf_le_of_le
+
#print Finset.inf_mono_fun /-
theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
Finset.le_inf fun b hb => le_trans (inf_le hb) (h b hb)
@@ -1262,6 +1270,10 @@ theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f :=
#align finset.le_sup' Finset.le_sup'
-/
+theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
+ h.trans <| le_sup' _ hb
+#align finset.le_sup'_of_le Finset.le_sup'_of_le
+
/- warning: finset.sup'_const -> Finset.sup'_const is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (a : α), Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 s H (fun (b : β) => a)) a
@@ -1451,6 +1463,10 @@ theorem inf'_le (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
#align finset.inf'_le Finset.inf'_le
-/
+theorem inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a :=
+ (inf'_le _ hb).trans h
+#align finset.inf'_le_of_le Finset.inf'_le_of_le
+
/- warning: finset.inf'_const -> Finset.inf'_const is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (a : α), Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 s H (fun (b : β) => a)) a
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -2366,7 +2366,7 @@ Case conversion may be inaccurate. Consider using '#align finset.min'_image Fins
theorem min'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
(h : (s.image f).Nonempty) : (s.image f).min' h = f (s.min' ((Nonempty.image_iff f).mp h)) :=
by
- convert @max'_image αᵒᵈ βᵒᵈ _ _ (fun a : αᵒᵈ => to_dual (f (of_dual a))) (by simpa) _ _ <;>
+ convert@max'_image αᵒᵈ βᵒᵈ _ _ (fun a : αᵒᵈ => to_dual (f (of_dual a))) (by simpa) _ _ <;>
convert h
rw [nonempty.image_iff]
#align finset.min'_image Finset.min'_image
@@ -2469,7 +2469,7 @@ but is expected to have type
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {x : α} {s : Finset.{u1} α}, Ne.{succ u1} (WithTop.{u1} α) (Finset.min.{u1} α _inst_1 (Finset.erase.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b) s x)) (WithTop.some.{u1} α x)
Case conversion may be inaccurate. Consider using '#align finset.min_erase_ne_self Finset.min_erase_ne_selfₓ'. -/
theorem min_erase_ne_self {s : Finset α} : (s.eraseₓ x).min ≠ x := by
- convert @max_erase_ne_self αᵒᵈ _ _ _
+ convert@max_erase_ne_self αᵒᵈ _ _ _
#align finset.min_erase_ne_self Finset.min_erase_ne_self
/- warning: finset.exists_next_right -> Finset.exists_next_right is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -364,7 +364,7 @@ theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multis
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2293 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2295 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2293 x._@.Mathlib.Data.Finset.Lattice._hyg.2295) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2294 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2296 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2294 x._@.Mathlib.Data.Finset.Lattice._hyg.2296) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
@@ -407,7 +407,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2643 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2645 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2643 x._@.Mathlib.Data.Finset.Lattice._hyg.2645) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
+ forall {α : Type.{u1}} [_inst_3 : SemilatticeSup.{u1} α] [_inst_4 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3)))] (s : Set.{u1} α), (Set.Nonempty.{u1} α s) -> (DirectedOn.{u1} α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2644 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2646 : α) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x._@.Mathlib.Data.Finset.Lattice._hyg.2644 x._@.Mathlib.Data.Finset.Lattice._hyg.2646) s) -> (forall (t : Finset.{u1} α), (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) x y)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_3))) (Finset.sup.{u1, u1} α α _inst_3 _inst_4 t (id.{succ u1} α)) x))))
Case conversion may be inaccurate. Consider using '#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directedₓ'. -/
theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
@@ -827,7 +827,7 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5296 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5298 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5296 x._@.Mathlib.Data.Finset.Lattice._hyg.5298) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5298 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5300 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5298 x._@.Mathlib.Data.Finset.Lattice._hyg.5300) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
@@ -877,7 +877,7 @@ end Inf
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_sup Finset.toDual_supₓ'. -/
@[simp]
theorem toDual_sup [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → α) :
@@ -889,7 +889,7 @@ theorem toDual_sup [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β →
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s (Function.comp.{succ u2, succ u1, succ u1} β α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f)) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s (Function.comp.{succ u1, succ u2, succ u2} β α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_inf Finset.toDual_infₓ'. -/
@[simp]
theorem toDual_inf [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → α) :
@@ -901,7 +901,7 @@ theorem toDual_inf [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β →
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeSup.{u1} α _inst_1) (OrderDual.orderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeSup.{u2} α _inst_1) (OrderDual.orderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_sup Finset.ofDual_supₓ'. -/
@[simp]
theorem ofDual_sup [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β → αᵒᵈ) :
@@ -913,7 +913,7 @@ theorem ofDual_sup [SemilatticeInf α] [OrderTop α] (s : Finset β) (f : β →
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Finset.{u2} β) (f : β -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf.{u1, u2} (OrderDual.{u1} α) β (OrderDual.semilatticeInf.{u1} α _inst_1) (OrderDual.orderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2) s f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Function.comp.{succ u2, succ u1, succ u1} β (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Finset.{u1} β) (f : β -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf.{u2, u1} (OrderDual.{u2} α) β (OrderDual.semilatticeInf.{u2} α _inst_1) (OrderDual.orderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2) s f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Function.comp.{succ u1, succ u2, succ u2} β (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_inf Finset.ofDual_infₓ'. -/
@[simp]
theorem ofDual_inf [SemilatticeSup α] [OrderBot α] (s : Finset β) (f : β → αᵒᵈ) :
@@ -1674,7 +1674,7 @@ end Inf'
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.sup'.{u1, u2} α ι _inst_1 s hs f)) (Finset.inf'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeInf.{u1} α _inst_1) s hs (Function.comp.{succ u2, succ u1, succ u1} ι α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 s hs f)) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_sup' Finset.toDual_sup'ₓ'. -/
@[simp]
theorem toDual_sup' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
@@ -1686,7 +1686,7 @@ theorem toDual_sup' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> α), Eq.{succ u1} (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α) (Finset.inf'.{u1, u2} α ι _inst_1 s hs f)) (Finset.sup'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeSup.{u1} α _inst_1) s hs (Function.comp.{succ u2, succ u1, succ u1} ι α (OrderDual.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (OrderDual.{u1} α)) => α -> (OrderDual.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (OrderDual.{u1} α)) (OrderDual.toDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> α), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 s hs f)) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs (Function.comp.{succ u1, succ u2, succ u2} ι α (OrderDual.{u2} α) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (OrderDual.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => OrderDual.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (OrderDual.{u2} α)) (OrderDual.toDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.to_dual_inf' Finset.toDual_inf'ₓ'. -/
@[simp]
theorem toDual_inf' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → α) :
@@ -1698,7 +1698,7 @@ theorem toDual_inf' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.sup'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeSup.{u1} α _inst_1) s hs f)) (Finset.inf'.{u1, u2} α ι _inst_1 s hs (Function.comp.{succ u2, succ u1, succ u1} ι (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (Finset.inf'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.sup'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeSup.{u2} α _inst_1) s hs f)) (Finset.inf'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_sup' Finset.ofDual_sup'ₓ'. -/
@[simp]
theorem ofDual_sup' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
@@ -1710,7 +1710,7 @@ theorem ofDual_sup' [SemilatticeInf α] {s : Finset ι} (hs : s.Nonempty) (f :
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} ι} (hs : Finset.Nonempty.{u2} ι s) (f : ι -> (OrderDual.{u1} α)), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α) (Finset.inf'.{u1, u2} (OrderDual.{u1} α) ι (OrderDual.semilatticeInf.{u1} α _inst_1) s hs f)) (Finset.sup'.{u1, u2} α ι _inst_1 s hs (Function.comp.{succ u2, succ u1, succ u1} ι (OrderDual.{u1} α) α (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (OrderDual.{u1} α) α) => (OrderDual.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (OrderDual.{u1} α) α) (OrderDual.ofDual.{u1} α)) f))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (Finset.sup'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} ι} (hs : Finset.Nonempty.{u1} ι s) (f : ι -> (OrderDual.{u2} α)), Eq.{succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α) (Finset.inf'.{u2, u1} (OrderDual.{u2} α) ι (OrderDual.semilatticeInf.{u2} α _inst_1) s hs f)) (Finset.sup'.{u2, u1} α ι _inst_1 s hs (Function.comp.{succ u1, succ u2, succ u2} ι (OrderDual.{u2} α) α (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.{u2} α) (fun (_x : OrderDual.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : OrderDual.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (OrderDual.{u2} α) α) (OrderDual.ofDual.{u2} α)) f))
Case conversion may be inaccurate. Consider using '#align finset.of_dual_inf' Finset.ofDual_inf'ₓ'. -/
@[simp]
theorem ofDual_inf' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f : ι → αᵒᵈ) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -438,7 +438,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 t p) s))
Case conversion may be inaccurate. Consider using '#align finset.sup_mem Finset.sup_memₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : subsemilattice_sup_bot`
theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s)
@@ -854,7 +854,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 t p) s))
Case conversion may be inaccurate. Consider using '#align finset.inf_mem Finset.inf_memₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
{ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@inf_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
@@ -1349,7 +1349,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 t H p) s))
Case conversion may be inaccurate. Consider using '#align finset.sup'_mem Finset.sup'_memₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
sup'_induction H p w h
@@ -1513,7 +1513,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 t H p) s))
Case conversion may be inaccurate. Consider using '#align finset.inf'_mem Finset.inf'_memₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
inf'_induction H p w h
@@ -1553,7 +1553,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
Case conversion may be inaccurate. Consider using '#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closedₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
@@ -1583,7 +1583,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
Case conversion may be inaccurate. Consider using '#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closedₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a b «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » s) -/
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
@@ -2502,8 +2502,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z t) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α t) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))
Case conversion may be inaccurate. Consider using '#align finset.card_le_of_interleaved Finset.card_le_of_interleavedₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card t + 1`. -/
theorem card_le_of_interleaved {s t : Finset α}
(h :
@@ -2529,10 +2529,10 @@ theorem card_le_of_interleaved {s t : Finset α}
calc
s.card = (s.image f).card := (card_image_of_inj_on f_mono.inj_on).symm
_ ≤ (insert ⊤ (t.image coe) : Finset (WithTop α)).card :=
- card_mono <|
+ (card_mono <|
image_subset_iff.2 fun x hx =>
insert_subset_insert _ (image_subset_image <| filter_subset _ _)
- (min_mem_insert_top_image_coe _)
+ (min_mem_insert_top_image_coe _))
_ ≤ t.card + 1 := (card_insert_le _ _).trans (add_le_add_right card_image_le _)
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
@@ -2543,7 +2543,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (forall (z : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z s) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z (Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y)))) -> (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) z t) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x z) (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) z y)))))) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α s) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => instDecidableEq.{u1} α _inst_1 a b)) t s)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))
Case conversion may be inaccurate. Consider using '#align finset.card_le_diff_of_interleaved Finset.card_le_diff_of_interleavedₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
(h :
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -66,19 +66,27 @@ theorem sup_empty : (∅ : Finset β).sup f = ⊥ :=
fold_empty
#align finset.sup_empty Finset.sup_empty
-#print Finset.sup_cons /-
+/- warning: finset.sup_cons -> Finset.sup_cons is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)), Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+Case conversion may be inaccurate. Consider using '#align finset.sup_cons Finset.sup_consₓ'. -/
@[simp]
theorem sup_cons {b : β} (h : b ∉ s) : (cons b s h).sup f = f b ⊔ s.sup f :=
fold_cons h
#align finset.sup_cons Finset.sup_cons
--/
-#print Finset.sup_insert /-
+/- warning: finset.sup_insert -> Finset.sup_insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+Case conversion may be inaccurate. Consider using '#align finset.sup_insert Finset.sup_insertₓ'. -/
@[simp]
theorem sup_insert [DecidableEq β] {b : β} : (insert b s : Finset β).sup f = f b ⊔ s.sup f :=
fold_insert_idem
#align finset.sup_insert Finset.sup_insert
--/
/- warning: finset.sup_image -> Finset.sup_image is a dubious translation:
lean 3 declaration is
@@ -109,18 +117,22 @@ theorem sup_singleton {b : β} : ({b} : Finset β).sup f = f b :=
sup_singleton
#align finset.sup_singleton Finset.sup_singleton
-#print Finset.sup_union /-
+/- warning: finset.sup_union -> Finset.sup_union is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.instUnionFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+Case conversion may be inaccurate. Consider using '#align finset.sup_union Finset.sup_unionₓ'. -/
theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
Finset.induction_on s₁ (by rw [empty_union, sup_empty, bot_sup_eq]) fun a s has ih => by
rw [insert_union, sup_insert, sup_insert, ih, sup_assoc]
#align finset.sup_union Finset.sup_union
--/
/- warning: finset.sup_sup -> Finset.sup_sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (HasSup.sup.{max u2 u1} (β -> α) (Pi.hasSup.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toHasSup.{u1} α _inst_1)) f g)) (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (Sup.sup.{max u2 u1} (β -> α) (Pi.hasSup.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toHasSup.{u1} α _inst_1)) f g)) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s g))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (HasSup.sup.{max u1 u2} (β -> α) (Pi.instHasSupForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toHasSup.{u2} α _inst_1)) f g)) (HasSup.sup.{u2} α (SemilatticeSup.toHasSup.{u2} α _inst_1) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s g))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s (Sup.sup.{max u1 u2} (β -> α) (Pi.instSupForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeSup.toSup.{u2} α _inst_1)) f g)) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s g))
Case conversion may be inaccurate. Consider using '#align finset.sup_sup Finset.sup_supₓ'. -/
theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g :=
by
@@ -209,13 +221,17 @@ theorem sup_bot (s : Finset β) : (s.sup fun _ => ⊥) = (⊥ : α) :=
· exact sup_const hs _
#align finset.sup_bot Finset.sup_bot
-#print Finset.sup_ite /-
+/- warning: finset.sup_ite -> Finset.sup_ite is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α} (p : β -> Prop) [_inst_3 : DecidablePred.{succ u2} β p], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => ite.{succ u1} α (p i) (_inst_3 i) (f i) (g i))) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β p (fun (a : β) => _inst_3 a) s) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β (fun (i : β) => Not (p i)) (fun (a : β) => Not.decidable (p a) (_inst_3 a)) s) g))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α} (p : β -> Prop) [_inst_3 : DecidablePred.{succ u2} β p], Eq.{succ u1} α (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s (fun (i : β) => ite.{succ u1} α (p i) (_inst_3 i) (f i) (g i))) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β p (fun (a : β) => _inst_3 a) s) f) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 (Finset.filter.{u2} β (fun (i : β) => Not (p i)) (fun (a : β) => instDecidableNot (p a) (_inst_3 a)) s) g))
+Case conversion may be inaccurate. Consider using '#align finset.sup_ite Finset.sup_iteₓ'. -/
theorem sup_ite (p : β → Prop) [DecidablePred p] :
(s.sup fun i => ite (p i) (f i) (g i)) =
(s.filterₓ p).sup f ⊔ (s.filterₓ fun i => ¬p i).sup g :=
fold_ite _
#align finset.sup_ite Finset.sup_ite
--/
#print Finset.sup_mono_fun /-
theorem sup_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.sup f ≤ s.sup g :=
@@ -310,9 +326,9 @@ theorem sup_sdiff_right {α β : Type _} [GeneralizedBooleanAlgebra α] (s : Fin
/- warning: finset.comp_sup_eq_sup_comp -> Finset.comp_sup_eq_sup_comp is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (HasSup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toHasBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toHasBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (HasSup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeSup.{u3} γ] [_inst_4 : OrderBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toSup.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Bot.bot.{u3} γ (OrderBot.toBot.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeSup.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.sup.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
Case conversion may be inaccurate. Consider using '#align finset.comp_sup_eq_sup_comp Finset.comp_sup_eq_sup_compₓ'. -/
theorem comp_sup_eq_sup_comp [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) :=
@@ -321,9 +337,9 @@ theorem comp_sup_eq_sup_comp [SemilatticeSup γ] [OrderBot γ] {s : Finset β} {
/- warning: finset.sup_coe -> Finset.sup_coe is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.sup.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u1} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u1} α (fun (x : α) => P x) (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.sup.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u1} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u1} α (fun (x : α) => P x) (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (HasSup.sup.{u2} α (SemilatticeSup.toHasSup.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.sup.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u2} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Pbot : P (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Psup : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.sup.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeSup.{u2} α _inst_1 (fun (x : α) => P x) Psup) (Subtype.orderBot.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2 Pbot) t f)) (Finset.sup.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
Case conversion may be inaccurate. Consider using '#align finset.sup_coe Finset.sup_coeₓ'. -/
/-- Computing `sup` in a subtype (closed under `sup`) is the same as computing it in `α`. -/
theorem sup_coe {P : α → Prop} {Pbot : P ⊥} {Psup : ∀ ⦃x y⦄, P x → P y → P (x ⊔ y)} (t : Finset β)
@@ -346,9 +362,9 @@ theorem sup_toFinset {α β} [DecidableEq β] (s : Finset α) (f : α → Multis
/- warning: list.foldr_sup_eq_sup_to_finset -> List.foldr_sup_eq_sup_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1)) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2293 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2295 : α) => HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2293 x._@.Mathlib.Data.Finset.Lattice._hyg.2295) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.2293 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.2295 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.2293 x._@.Mathlib.Data.Finset.Lattice._hyg.2295) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_sup_eq_sup_to_finset List.foldr_sup_eq_sup_toFinsetₓ'. -/
theorem List.foldr_sup_eq_sup_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊔ ·) ⊥ = l.toFinset.sup id :=
@@ -372,9 +388,9 @@ theorem exists_nat_subset_range (s : Finset ℕ) : ∃ n : ℕ, s ⊆ range n :=
/- warning: finset.sup_induction -> Finset.sup_induction is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasSup.sup.{u2} α (SemilatticeSup.toHasSup.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.sup.{u2, u1} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.sup_induction Finset.sup_inductionₓ'. -/
theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.sup f) :=
@@ -418,9 +434,9 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
/- warning: finset.sup_mem -> Finset.sup_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u2} α ι _inst_1 _inst_2 t p) s))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u2} α ι _inst_1 _inst_2 t p) s))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (HasSup.sup.{u2} α (SemilatticeSup.toHasSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 t p) s))
+ forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Bot.bot.{u2} α (OrderBot.toBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeSup.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup.{u2, u1} α ι _inst_1 _inst_2 t p) s))
Case conversion may be inaccurate. Consider using '#align finset.sup_mem Finset.sup_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-- If we acquire sublattices
@@ -534,19 +550,27 @@ theorem inf_empty : (∅ : Finset β).inf f = ⊤ :=
fold_empty
#align finset.inf_empty Finset.inf_empty
-#print Finset.inf_cons /-
+/- warning: finset.inf_cons -> Finset.inf_cons is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {b : β} (h : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)), Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Finset.cons.{u2} β b s h) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+Case conversion may be inaccurate. Consider using '#align finset.inf_cons Finset.inf_consₓ'. -/
@[simp]
theorem inf_cons {b : β} (h : b ∉ s) : (cons b s h).inf f = f b ⊓ s.inf f :=
@sup_cons αᵒᵈ _ _ _ _ _ _ h
#align finset.inf_cons Finset.inf_cons
--/
-#print Finset.inf_insert /-
+/- warning: finset.inf_insert -> Finset.inf_insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β] {b : β}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) b s) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+Case conversion may be inaccurate. Consider using '#align finset.inf_insert Finset.inf_insertₓ'. -/
@[simp]
theorem inf_insert [DecidableEq β] {b : β} : (insert b s : Finset β).inf f = f b ⊓ s.inf f :=
fold_insert_idem
#align finset.inf_insert Finset.inf_insert
--/
/- warning: finset.inf_image -> Finset.inf_image is a dubious translation:
lean 3 declaration is
@@ -577,17 +601,21 @@ theorem inf_singleton {b : β} : ({b} : Finset β).inf f = f b :=
inf_singleton
#align finset.inf_singleton Finset.inf_singleton
-#print Finset.inf_union /-
+/- warning: finset.inf_union -> Finset.inf_union is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {f : β -> α} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u2} (Finset.{u2} β) (Finset.instUnionFinset.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₁ f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s₂ f))
+Case conversion may be inaccurate. Consider using '#align finset.inf_union Finset.inf_unionₓ'. -/
theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
@sup_union αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_union Finset.inf_union
--/
/- warning: finset.inf_inf -> Finset.inf_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (HasInf.inf.{max u2 u1} (β -> α) (Pi.hasInf.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toHasInf.{u1} α _inst_1)) f g)) (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {g : β -> α}, Eq.{succ u1} α (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s (Inf.inf.{max u2 u1} (β -> α) (Pi.hasInf.{u2, u1} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toHasInf.{u1} α _inst_1)) f g)) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s g))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (HasInf.inf.{max u1 u2} (β -> α) (Pi.instHasInfForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toHasInf.{u2} α _inst_1)) f g)) (HasInf.inf.{u2} α (SemilatticeInf.toHasInf.{u2} α _inst_1) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s g))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {g : β -> α}, Eq.{succ u2} α (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s (Inf.inf.{max u1 u2} (β -> α) (Pi.instInfForAll.{u1, u2} β (fun (ᾰ : β) => α) (fun (i : β) => SemilatticeInf.toInf.{u2} α _inst_1)) f g)) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s g))
Case conversion may be inaccurate. Consider using '#align finset.inf_inf Finset.inf_infₓ'. -/
theorem inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
@@ -773,9 +801,9 @@ theorem inf_sdiff_right {α β : Type _} [BooleanAlgebra α] {s : Finset β} (hs
/- warning: finset.comp_inf_eq_inf_comp -> Finset.comp_inf_eq_inf_comp is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (HasInf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toHasTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toHasTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (HasInf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : SemilatticeInf.{u3} γ] [_inst_4 : OrderTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3)))] {s : Finset.{u2} β} {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toInf.{u3} γ _inst_3) (g x) (g y))) -> (Eq.{succ u3} γ (g (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) (Top.top.{u3} γ (OrderTop.toTop.{u3} γ (Preorder.toLE.{u3} γ (PartialOrder.toPreorder.{u3} γ (SemilatticeInf.toPartialOrder.{u3} γ _inst_3))) _inst_4))) -> (Eq.{succ u3} γ (g (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f)) (Finset.inf.{u3, u2} γ β _inst_3 _inst_4 s (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
Case conversion may be inaccurate. Consider using '#align finset.comp_inf_eq_inf_comp Finset.comp_inf_eq_inf_compₓ'. -/
theorem comp_inf_eq_inf_comp [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) :=
@@ -784,9 +812,9 @@ theorem comp_inf_eq_inf_comp [SemilatticeInf γ] [OrderTop γ] {s : Finset β} {
/- warning: finset.inf_coe -> Finset.inf_coe is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.inf.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u1} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u1} α (fun (x : α) => P x) (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y))} (t : Finset.{u2} β) (f : β -> (Subtype.{succ u1} α (fun (x : α) => P x))), Eq.{succ u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (Finset.inf.{u1, u2} (Subtype.{succ u1} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u1} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u1} α (fun (x : α) => P x) (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u1, u2} α β _inst_1 _inst_2 t (fun (x : β) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subtype.{succ u1} α (fun (x : α) => P x)) α (HasLiftT.mk.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (CoeTCₓ.coe.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeBase.{succ u1, succ u1} (Subtype.{succ u1} α (fun (x : α) => P x)) α (coeSubtype.{succ u1} α (fun (x : α) => P x))))) (f x)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (HasInf.inf.{u2} α (SemilatticeInf.toHasInf.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.inf.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u2} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {P : α -> Prop} {Ptop : P (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))} {Pinf : forall {{x : α}} {{y : α}}, (P x) -> (P y) -> (P (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y))} (t : Finset.{u1} β) (f : β -> (Subtype.{succ u2} α (fun (x : α) => P x))), Eq.{succ u2} α (Subtype.val.{succ u2} α (fun (x : α) => P x) (Finset.inf.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => P x)) β (Subtype.semilatticeInf.{u2} α _inst_1 (fun (x : α) => P x) Pinf) (Subtype.orderTop.{u2} α (fun (x : α) => P x) (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2 Ptop) t f)) (Finset.inf.{u2, u1} α β _inst_1 _inst_2 t (fun (x : β) => Subtype.val.{succ u2} α (fun (x : α) => P x) (f x)))
Case conversion may be inaccurate. Consider using '#align finset.inf_coe Finset.inf_coeₓ'. -/
/-- Computing `inf` in a subtype (closed under `inf`) is the same as computing it in `α`. -/
theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x → P y → P (x ⊓ y)} (t : Finset β)
@@ -797,9 +825,9 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
/- warning: list.foldr_inf_eq_inf_to_finset -> List.foldr_inf_eq_inf_toFinset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1)) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5296 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5298 : α) => HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5296 x._@.Mathlib.Data.Finset.Lattice._hyg.5298) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] [_inst_3 : DecidableEq.{succ u1} α] (l : List.{u1} α), Eq.{succ u1} α (List.foldr.{u1, u1} α α (fun (x._@.Mathlib.Data.Finset.Lattice._hyg.5296 : α) (x._@.Mathlib.Data.Finset.Lattice._hyg.5298 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x._@.Mathlib.Data.Finset.Lattice._hyg.5296 x._@.Mathlib.Data.Finset.Lattice._hyg.5298) (Top.top.{u1} α (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) l) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 (List.toFinset.{u1} α (fun (a : α) (b : α) => _inst_3 a b) l) (id.{succ u1} α))
Case conversion may be inaccurate. Consider using '#align list.foldr_inf_eq_inf_to_finset List.foldr_inf_eq_inf_toFinsetₓ'. -/
theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
@@ -811,9 +839,9 @@ theorem List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
/- warning: finset.inf_induction -> Finset.inf_induction is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Finset.{u2} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf.{u1, u2} α β _inst_1 _inst_2 s f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasInf.inf.{u2} α (SemilatticeInf.toHasInf.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] {s : Finset.{u1} β} {f : β -> α} {p : α -> Prop}, (p (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2))) -> (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.inf.{u2, u1} α β _inst_1 _inst_2 s f))
Case conversion may be inaccurate. Consider using '#align finset.inf_induction Finset.inf_inductionₓ'. -/
theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊓ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.inf f) :=
@@ -822,9 +850,9 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
/- warning: finset.inf_mem -> Finset.inf_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u2} α ι _inst_1 _inst_2 t p) s))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] (s : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Top.top.{u1} α (OrderTop.toHasTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u2} α ι _inst_1 _inst_2 t p) s))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (HasInf.inf.{u2} α (SemilatticeInf.toHasInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 t p) s))
+ forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] [_inst_2 : OrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1)))] (s : Set.{u2} α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Top.top.{u2} α (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α _inst_1))) _inst_2)) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf.{u2, u1} α ι _inst_1 _inst_2 t p) s))
Case conversion may be inaccurate. Consider using '#align finset.inf_mem Finset.inf_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
@@ -901,7 +929,12 @@ section OrderBot
variable [OrderBot α] {s : Finset β} {f : β → α} {a : α}
-#print Finset.sup_inf_distrib_left /-
+/- warning: finset.sup_inf_distrib_left -> Finset.sup_inf_distrib_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) a (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) a (f i)))
+Case conversion may be inaccurate. Consider using '#align finset.sup_inf_distrib_left Finset.sup_inf_distrib_leftₓ'. -/
theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊓ s.sup f = s.sup fun i => a ⊓ f i :=
by
@@ -909,16 +942,19 @@ theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
· simp_rw [Finset.sup_empty, inf_bot_eq]
· rw [sup_cons, sup_cons, inf_sup_left, h]
#align finset.sup_inf_distrib_left Finset.sup_inf_distrib_left
--/
-#print Finset.sup_inf_distrib_right /-
+/- warning: finset.sup_inf_distrib_right -> Finset.sup_inf_distrib_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.sup.{u1, u2} α ι (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (f i) a))
+Case conversion may be inaccurate. Consider using '#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_rightₓ'. -/
theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
s.sup f ⊓ a = s.sup fun i => f i ⊓ a :=
by
rw [_root_.inf_comm, s.sup_inf_distrib_left]
simp_rw [_root_.inf_comm]
#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_right
--/
/- warning: finset.disjoint_sup_right -> Finset.disjoint_sup_right is a dubious translation:
lean 3 declaration is
@@ -946,19 +982,27 @@ section OrderTop
variable [OrderTop α]
-#print Finset.inf_sup_distrib_left /-
+/- warning: finset.inf_sup_distrib_left -> Finset.inf_sup_distrib_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f)) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a (f i)))
+Case conversion may be inaccurate. Consider using '#align finset.inf_sup_distrib_left Finset.inf_sup_distrib_leftₓ'. -/
theorem inf_sup_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊔ s.inf f = s.inf fun i => a ⊔ f i :=
@sup_inf_distrib_left αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_left Finset.inf_sup_distrib_left
--/
-#print Finset.inf_sup_distrib_right /-
+/- warning: finset.inf_sup_distrib_right -> Finset.inf_sup_distrib_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] (s : Finset.{u2} ι) (f : ι -> α) (a : α), Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s f) a) (Finset.inf.{u1, u2} α ι (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) _inst_2 s (fun (i : ι) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (f i) a))
+Case conversion may be inaccurate. Consider using '#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_rightₓ'. -/
theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
s.inf f ⊔ a = s.inf fun i => f i ⊔ a :=
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
--/
end OrderTop
@@ -1167,7 +1211,12 @@ theorem coe_sup' : ((s.sup' H f : α) : WithBot α) = s.sup (coe ∘ f) := by
rw [sup', WithBot.coe_unbot]
#align finset.coe_sup' Finset.coe_sup'
-#print Finset.sup'_cons /-
+/- warning: finset.sup'_cons -> Finset.sup'_cons is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
+Case conversion may be inaccurate. Consider using '#align finset.sup'_cons Finset.sup'_consₓ'. -/
@[simp]
theorem sup'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
(cons b s hb).sup' h f = f b ⊔ s.sup' H f :=
@@ -1175,9 +1224,13 @@ theorem sup'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
rw [← WithBot.coe_eq_coe]
simp only [coe_sup', sup_cons, WithBot.coe_sup]
#align finset.sup'_cons Finset.sup'_cons
--/
-#print Finset.sup'_insert /-
+/- warning: finset.sup'_insert -> Finset.sup'_insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.sup'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) (f b) (Finset.sup'.{u1, u2} α β _inst_1 s H f))
+Case conversion may be inaccurate. Consider using '#align finset.sup'_insert Finset.sup'_insertₓ'. -/
@[simp]
theorem sup'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
(insert b s).sup' h f = f b ⊔ s.sup' H f :=
@@ -1185,7 +1238,6 @@ theorem sup'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
rw [← WithBot.coe_eq_coe]
simp only [coe_sup', sup_insert, WithBot.coe_sup]
#align finset.sup'_insert Finset.sup'_insert
--/
#print Finset.sup'_singleton /-
@[simp]
@@ -1249,7 +1301,12 @@ theorem sup'_bunionᵢ [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t :
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup'_bUnion Finset.sup'_bunionᵢ
-#print Finset.comp_sup'_eq_sup'_comp /-
+/- warning: finset.comp_sup'_eq_sup'_comp -> Finset.comp_sup'_eq_sup'_comp is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : SemilatticeSup.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toHasSup.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.sup'.{u1, u2} α β _inst_1 s H f)) (Finset.sup'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : SemilatticeSup.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) x y)) (Sup.sup.{u3} γ (SemilatticeSup.toSup.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.sup'.{u1, u2} α β _inst_1 s H f)) (Finset.sup'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+Case conversion may be inaccurate. Consider using '#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_compₓ'. -/
theorem comp_sup'_eq_sup'_comp [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) :=
by
@@ -1266,13 +1323,12 @@ theorem comp_sup'_eq_sup'_comp [SemilatticeSup γ] {s : Finset β} (H : s.Nonemp
· rfl
· exact congr_arg coe (g_sup f₁ f₂)
#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_comp
--/
/- warning: finset.sup'_induction -> Finset.sup'_induction is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup'.{u1, u2} α β _inst_1 s H f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeSup.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.sup'.{u1, u2} α β _inst_1 s H f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasSup.sup.{u2} α (SemilatticeSup.toHasSup.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.sup'.{u2, u1} α β _inst_1 s H f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeSup.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.sup'.{u2, u1} α β _inst_1 s H f))
Case conversion may be inaccurate. Consider using '#align finset.sup'_induction Finset.sup'_inductionₓ'. -/
theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.sup' H f) :=
@@ -1289,9 +1345,9 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
/- warning: finset.sup'_mem -> Finset.sup'_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] (s : Set.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι t) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup'.{u1, u2} α ι _inst_1 t H p) s))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] (s : Set.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι t) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup'.{u1, u2} α ι _inst_1 t H p) s))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (HasSup.sup.{u2} α (SemilatticeSup.toHasSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 t H p) s))
+ forall {α : Type.{u2}} [_inst_1 : SemilatticeSup.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Sup.sup.{u2} α (SemilatticeSup.toSup.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.sup'.{u2, u1} α ι _inst_1 t H p) s))
Case conversion may be inaccurate. Consider using '#align finset.sup'_mem Finset.sup'_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
@@ -1352,21 +1408,29 @@ theorem coe_inf' : ((s.inf' H f : α) : WithTop α) = s.inf (coe ∘ f) :=
@coe_sup' αᵒᵈ _ _ _ H f
#align finset.coe_inf' Finset.coe_inf'
-#print Finset.inf'_cons /-
+/- warning: finset.inf'_cons -> Finset.inf'_cons is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {b : β} {hb : Not (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s)} {h : Finset.Nonempty.{u2} β (Finset.cons.{u2} β b s hb)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Finset.cons.{u2} β b s hb) h f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
+Case conversion may be inaccurate. Consider using '#align finset.inf'_cons Finset.inf'_consₓ'. -/
@[simp]
theorem inf'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
(cons b s hb).inf' h f = f b ⊓ s.inf' H f :=
@sup'_cons αᵒᵈ _ _ _ H f _ _ h
#align finset.inf'_cons Finset.inf'_cons
--/
-#print Finset.inf'_insert /-
+/- warning: finset.inf'_insert -> Finset.inf'_insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.hasInsert.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) [_inst_2 : DecidableEq.{succ u2} β] {b : β} {h : Finset.Nonempty.{u2} β (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s)}, Eq.{succ u1} α (Finset.inf'.{u1, u2} α β _inst_1 (Insert.insert.{u2, u2} β (Finset.{u2} β) (Finset.instInsertFinset.{u2} β (fun (a : β) (b : β) => _inst_2 a b)) b s) h f) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) (f b) (Finset.inf'.{u1, u2} α β _inst_1 s H f))
+Case conversion may be inaccurate. Consider using '#align finset.inf'_insert Finset.inf'_insertₓ'. -/
@[simp]
theorem inf'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
(insert b s).inf' h f = f b ⊓ s.inf' H f :=
@sup'_insert αᵒᵈ _ _ _ H f _ _ h
#align finset.inf'_insert Finset.inf'_insert
--/
#print Finset.inf'_singleton /-
@[simp]
@@ -1421,18 +1485,22 @@ theorem inf'_bunionᵢ [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t :
@sup'_bunionᵢ αᵒᵈ _ _ _ _ _ _ Hs _ Ht
#align finset.inf'_bUnion Finset.inf'_bunionᵢ
-#print Finset.comp_inf'_eq_inf'_comp /-
+/- warning: finset.comp_inf'_eq_inf'_comp -> Finset.comp_inf'_eq_inf'_comp is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : SemilatticeInf.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toHasInf.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (Finset.inf'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : SemilatticeInf.{u3} γ] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) {f : β -> α} (g : α -> γ), (forall (x : α) (y : α), Eq.{succ u3} γ (g (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) x y)) (Inf.inf.{u3} γ (SemilatticeInf.toInf.{u3} γ _inst_2) (g x) (g y))) -> (Eq.{succ u3} γ (g (Finset.inf'.{u1, u2} α β _inst_1 s H f)) (Finset.inf'.{u3, u2} γ β _inst_2 s H (Function.comp.{succ u2, succ u1, succ u3} β α γ g f)))
+Case conversion may be inaccurate. Consider using '#align finset.comp_inf'_eq_inf'_comp Finset.comp_inf'_eq_inf'_compₓ'. -/
theorem comp_inf'_eq_inf'_comp [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) :=
@comp_sup'_eq_sup'_comp αᵒᵈ _ γᵒᵈ _ _ _ H f g g_inf
#align finset.comp_inf'_eq_inf'_comp Finset.comp_inf'_eq_inf'_comp
--/
/- warning: finset.inf'_induction -> Finset.inf'_induction is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf'.{u1, u2} α β _inst_1 s H f))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SemilatticeInf.{u1} α] {s : Finset.{u2} β} (H : Finset.Nonempty.{u2} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (p (f b))) -> (p (Finset.inf'.{u1, u2} α β _inst_1 s H f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (HasInf.inf.{u2} α (SemilatticeInf.toHasInf.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.inf'.{u2, u1} α β _inst_1 s H f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SemilatticeInf.{u2} α] {s : Finset.{u1} β} (H : Finset.Nonempty.{u1} β s) (f : β -> α) {p : α -> Prop}, (forall (a₁ : α), (p a₁) -> (forall (a₂ : α), (p a₂) -> (p (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) a₁ a₂)))) -> (forall (b : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) -> (p (f b))) -> (p (Finset.inf'.{u2, u1} α β _inst_1 s H f))
Case conversion may be inaccurate. Consider using '#align finset.inf'_induction Finset.inf'_inductionₓ'. -/
theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊓ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.inf' H f) :=
@@ -1441,9 +1509,9 @@ theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
/- warning: finset.inf'_mem -> Finset.inf'_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] (s : Set.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι t) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf'.{u1, u2} α ι _inst_1 t H p) s))
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] (s : Set.{u1} α), (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) x y) s))) -> (forall {ι : Type.{u2}} (t : Finset.{u2} ι) (H : Finset.Nonempty.{u2} ι t) (p : ι -> α), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Finset.{u2} ι) (Finset.hasMem.{u2} ι) i t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (p i) s)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf'.{u1, u2} α ι _inst_1 t H p) s))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (HasInf.inf.{u2} α (SemilatticeInf.toHasInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 t H p) s))
+ forall {α : Type.{u2}} [_inst_1 : SemilatticeInf.{u2} α] (s : Set.{u2} α), (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (forall (y : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Inf.inf.{u2} α (SemilatticeInf.toInf.{u2} α _inst_1) x y) s))) -> (forall {ι : Type.{u1}} (t : Finset.{u1} ι) (H : Finset.Nonempty.{u1} ι t) (p : ι -> α), (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (p i) s)) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (Finset.inf'.{u2, u1} α ι _inst_1 t H p) s))
Case conversion may be inaccurate. Consider using '#align finset.inf'_mem Finset.inf'_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
@@ -1479,13 +1547,17 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
#align finset.sup'_eq_sup Finset.sup'_eq_sup
-/
+/- warning: finset.sup_closed_of_sup_closed -> Finset.sup_closed_of_sup_closed is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeSup.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.sup.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
+Case conversion may be inaccurate. Consider using '#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closedₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a b «expr ∈ » s) -/
-#print Finset.sup_closed_of_sup_closed /-
theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closed
--/
#print Finset.coe_sup_of_nonempty /-
theorem coe_sup_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
@@ -1505,13 +1577,17 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
#align finset.inf'_eq_inf Finset.inf'_eq_inf
-/
+/- warning: finset.inf_closed_of_inf_closed -> Finset.inf_closed_of_inf_closed is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t) s) -> (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_1) a b) s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : SemilatticeInf.{u1} α] [_inst_2 : OrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α _inst_1)))] {s : Set.{u1} α} (t : Finset.{u1} α), (Finset.Nonempty.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α t) s) -> (forall (a : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_1) a b) s))) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) (Finset.inf.{u1, u1} α α _inst_1 _inst_2 t (id.{succ u1} α)) s)
+Case conversion may be inaccurate. Consider using '#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closedₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a b «expr ∈ » s) -/
-#print Finset.inf_closed_of_inf_closed /-
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
@sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
--/
#print Finset.coe_inf_of_nonempty /-
theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
@@ -2985,9 +3061,9 @@ variable [DecidableEq α]
/- warning: finset.supr_union -> Finset.supᵢ_union is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (HasSup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (HasSup.sup.{u1} β (SemilatticeSup.toHasSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
Case conversion may be inaccurate. Consider using '#align finset.supr_union Finset.supᵢ_unionₓ'. -/
theorem supᵢ_union {f : α → β} {s t : Finset α} :
(⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [supᵢ_or, supᵢ_sup_eq]
@@ -2995,9 +3071,9 @@ theorem supᵢ_union {f : α → β} {s t : Finset α} :
/- warning: finset.infi_union -> Finset.infᵢ_union is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (HasInf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {f : α -> β} {s : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => f x))) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t) => f x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (HasInf.inf.{u1} β (Lattice.toHasInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {f : α -> β} {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) => f x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => f x))) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t) => f x))))
Case conversion may be inaccurate. Consider using '#align finset.infi_union Finset.infᵢ_unionₓ'. -/
theorem infᵢ_union {f : α → β} {s t : Finset α} :
(⨅ x ∈ s ∪ t, f x) = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
@@ -3006,9 +3082,9 @@ theorem infᵢ_union {f : α → β} {s t : Finset α} :
/- warning: finset.supr_insert -> Finset.supᵢ_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (HasSup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (x : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (HasSup.sup.{u1} β (SemilatticeSup.toHasSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (t a) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) (t a) (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (x : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
Case conversion may be inaccurate. Consider using '#align finset.supr_insert Finset.supᵢ_insertₓ'. -/
theorem supᵢ_insert (a : α) (s : Finset α) (t : α → β) :
(⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x :=
@@ -3019,9 +3095,9 @@ theorem supᵢ_insert (a : α) (s : Finset α) (t : α → β) :
/- warning: finset.infi_insert -> Finset.infᵢ_insert is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (HasInf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : α -> β), Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) (t a) (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (x : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s) => t x))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (HasInf.inf.{u1} β (Lattice.toHasInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (t a) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] (a : α) (s : Finset.{u2} α) (t : α -> β), Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) a s)) => t x))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) (t a) (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (x : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x s) => t x))))
Case conversion may be inaccurate. Consider using '#align finset.infi_insert Finset.infᵢ_insertₓ'. -/
theorem infᵢ_insert (a : α) (s : Finset α) (t : α → β) :
(⨅ x ∈ insert a s, t x) = t a ⊓ ⨅ x ∈ s, t x :=
@@ -3061,9 +3137,9 @@ theorem infᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
/- warning: finset.supr_insert_update -> Finset.supᵢ_insert_update is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (HasSup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u2} β (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (supᵢ.{u2, succ u1} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) α (fun (i : α) => supᵢ.{u2, 0} β (CompleteSemilatticeSup.toHasSup.{u2} β (CompleteLattice.toCompleteSemilatticeSup.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (HasSup.sup.{u1} β (SemilatticeSup.toHasSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) s (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Sup.sup.{u1} β (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1))) s (supᵢ.{u1, succ u2} β (CompleteLattice.toSupSet.{u1} β _inst_1) α (fun (i : α) => supᵢ.{u1, 0} β (CompleteLattice.toSupSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
Case conversion may be inaccurate. Consider using '#align finset.supr_insert_update Finset.supᵢ_insert_updateₓ'. -/
theorem supᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i :=
@@ -3074,9 +3150,9 @@ theorem supᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (
/- warning: finset.infi_insert_update -> Finset.infᵢ_insert_update is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (HasInf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {x : α} {t : Finset.{u1} α} (f : α -> β) {s : β}, (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x t)) -> (Eq.{succ u2} β (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Insert.insert.{u1, u1} α (Finset.{u1} α) (Finset.hasInsert.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u1, succ u2} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u2} β (SemilatticeInf.toHasInf.{u2} β (Lattice.toSemilatticeInf.{u2} β (CompleteLattice.toLattice.{u2} β _inst_1))) s (infᵢ.{u2, succ u1} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) α (fun (i : α) => infᵢ.{u2, 0} β (CompleteSemilatticeInf.toHasInf.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1)) (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i t) => f i)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (HasInf.inf.{u1} β (Lattice.toHasInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) s (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u1} β] [_inst_2 : DecidableEq.{succ u2} α] {x : α} {t : Finset.{u2} α} (f : α -> β) {s : β}, (Not (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) x t)) -> (Eq.{succ u1} β (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i (Insert.insert.{u2, u2} α (Finset.{u2} α) (Finset.instInsertFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) x t)) => Function.update.{succ u2, succ u1} α (fun (ᾰ : α) => β) (fun (a : α) (b : α) => _inst_2 a b) f x s i))) (Inf.inf.{u1} β (Lattice.toInf.{u1} β (CompleteLattice.toLattice.{u1} β _inst_1)) s (infᵢ.{u1, succ u2} β (CompleteLattice.toInfSet.{u1} β _inst_1) α (fun (i : α) => infᵢ.{u1, 0} β (CompleteLattice.toInfSet.{u1} β _inst_1) (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) (fun (H : Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) i t) => f i)))))
Case conversion may be inaccurate. Consider using '#align finset.infi_insert_update Finset.infᵢ_insert_updateₓ'. -/
theorem infᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨅ i ∈ insert x t, update f x s i) = s ⊓ ⨅ i ∈ t, f i :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -4,7 +4,7 @@ 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 cc70d9141824ea8982d1562ce009952f2c3ece30
+! leanprover-community/mathlib commit 1c857a1f6798cb054be942199463c2cf904cb937
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -926,7 +926,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f)) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 a (f i)))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_right Finset.disjoint_sup_rightₓ'. -/
-theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
+protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
@@ -936,7 +936,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DistribLattice.{u2} α] [_inst_2 : OrderBot.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)))))] {s : Finset.{u1} β} {f : β -> α} {a : α}, Iff (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (Finset.sup.{u2, u1} α β (Lattice.toSemilatticeSup.{u2} α (DistribLattice.toLattice.{u2} α _inst_1)) _inst_2 s f) a) (forall (i : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) i s) -> (Disjoint.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (DistribLattice.toLattice.{u2} α _inst_1))) _inst_2 (f i) a))
Case conversion may be inaccurate. Consider using '#align finset.disjoint_sup_left Finset.disjoint_sup_leftₓ'. -/
-theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
+protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -608,7 +608,7 @@ theorem inf_sup {κ : ι → Type*} (s : Finset ι) (t : ∀ i, Finset (κ i)) (
-- Porting note: `simpa` doesn't support placeholders in proof terms
have := h (fun j hj => if hji : j = i then cast (congr_arg κ hji.symm) a
else g _ <| mem_of_mem_insert_of_ne hj hji) (fun j hj => ?_)
- simpa only [cast_eq, dif_pos, Function.comp, Subtype.coe_mk, dif_neg, aux] using this
+ · simpa only [cast_eq, dif_pos, Function.comp, Subtype.coe_mk, dif_neg, aux] using this
rw [mem_insert] at hj
obtain (rfl | hj) := hj
· simpa
@@ -1768,7 +1768,7 @@ theorem min_erase_ne_self {s : Finset α} : (s.erase x).min ≠ x := by
convert @max_erase_ne_self αᵒᵈ _ (toDual x) (s.map toDual.toEmbedding) using 1
apply congr_arg -- Porting note: forces unfolding to see `Finset.min` is `Finset.max`
congr!
- · ext; simp only [mem_map_equiv]; exact Iff.rfl
+ ext; simp only [mem_map_equiv]; exact Iff.rfl
#align finset.min_erase_ne_self Finset.min_erase_ne_self
theorem exists_next_right {x : α} {s : Finset α} (h : ∃ y ∈ s, x < y) :
@@ -1241,7 +1241,7 @@ variable [DistribLattice α] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (
theorem sup'_inf_distrib_left (f : ι → α) (a : α) :
a ⊓ s.sup' hs f = s.sup' hs fun i ↦ a ⊓ f i := by
- refine' hs.cons_induction (fun i ↦ ?_) fun i s hi hs ih ↦ ?_
+ refine hs.cons_induction (fun i ↦ ?_) fun i s hi hs ih ↦ ?_
· simp
· simp_rw [sup'_cons hs, inf_sup_left]
rw [ih]
@@ -266,7 +266,7 @@ theorem sup_le_of_le_directed {α : Type*} [SemilatticeSup α] [OrderBot α] (s
-- z ∈ s is above x and y
obtain ⟨z, hzs, ⟨hxz, hyz⟩⟩ := hdir x hxs y hys
use z, hzs
- rw [sup_insert, id.def, sup_le_iff]
+ rw [sup_insert, id, sup_le_iff]
exact ⟨le_trans hay hyz, le_trans hsx_sup hxz⟩
#align finset.sup_le_of_le_directed Finset.sup_le_of_le_directed
@@ -1774,7 +1774,7 @@ theorem min_erase_ne_self {s : Finset α} : (s.erase x).min ≠ x := by
theorem exists_next_right {x : α} {s : Finset α} (h : ∃ y ∈ s, x < y) :
∃ y ∈ s, x < y ∧ ∀ z ∈ s, x < z → y ≤ z :=
have Hne : (s.filter (x < ·)).Nonempty := h.imp fun y hy => mem_filter.2 (by simpa)
- have aux := (mem_filter.1 (min'_mem _ Hne))
+ have aux := mem_filter.1 (min'_mem _ Hne)
⟨min' _ Hne, aux.1, by simp, fun z hzs hz => min'_le _ _ <| mem_filter.2 ⟨hzs, by simpa⟩⟩
#align finset.exists_next_right Finset.exists_next_right
bex
and ball
from lemma names (#11615)
Follow-up to #10816.
Remaining places containing such lemmas are
Option.bex_ne_none
and Option.ball_ne_none
: defined in Lean coreNat.decidableBallLT
and Nat.decidableBallLE
: defined in Lean corebef_def
is still used in a number of places and could be renamedBAll.imp_{left,right}
, BEx.imp_{left,right}
, BEx.intro
and BEx.elim
I only audited the first ~150 lemmas mentioning "ball"; too many lemmas named after Metric.ball/openBall/closedBall.
Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -1290,7 +1290,7 @@ theorem lt_sup'_iff : a < s.sup' H f ↔ ∃ b ∈ s, a < f b := by
@[simp]
theorem sup'_lt_iff : s.sup' H f < a ↔ ∀ i ∈ s, f i < a := by
rw [← WithBot.coe_lt_coe, coe_sup', Finset.sup_lt_iff (WithBot.bot_lt_coe a)]
- exact ball_congr (fun _ _ => WithBot.coe_lt_coe)
+ exact forall₂_congr (fun _ _ => WithBot.coe_lt_coe)
#align finset.sup'_lt_iff Finset.sup'_lt_iff
@[simp]
Move Finset.biUnion
and Finset.disjiUnion
to a new file so that Data.Finset.Basic
doesn't depend on that much order theory.
@@ -8,6 +8,7 @@ import Mathlib.Data.Finset.Option
import Mathlib.Data.Finset.Pi
import Mathlib.Data.Finset.Prod
import Mathlib.Data.Multiset.Lattice
+import Mathlib.Data.Set.Lattice
import Mathlib.Order.CompleteLattice
import Mathlib.Order.Hom.Lattice
@@ -1384,7 +1384,7 @@ theorem max_of_nonempty {s : Finset α} (h : s.Nonempty) : ∃ a : α, s.max = a
theorem max_eq_bot {s : Finset α} : s.max = ⊥ ↔ s = ∅ :=
⟨fun h ↦ s.eq_empty_or_nonempty.elim id fun H ↦ by
obtain ⟨a, ha⟩ := max_of_nonempty H
- rw [h] at ha; cases ha; done, -- Porting note: error without `done`
+ rw [h] at ha; cases ha; , -- the `;` is needed since the `cases` syntax allows `cases a, b`
fun h ↦ h.symm ▸ max_empty⟩
#align finset.max_eq_bot Finset.max_eq_bot
@@ -1468,7 +1468,7 @@ theorem min_eq_top {s : Finset α} : s.min = ⊤ ↔ s = ∅ :=
⟨fun h =>
s.eq_empty_or_nonempty.elim id fun H => by
let ⟨a, ha⟩ := min_of_nonempty H
- rw [h] at ha; cases ha; done, -- Porting note: error without `done`
+ rw [h] at ha; cases ha; , -- Porting note: error without `done`
fun h => h.symm ▸ min_empty⟩
#align finset.min_eq_top Finset.min_eq_top
λ
by fun
(#11301)
Per the style guidelines, λ
is disallowed in mathlib.
This is close to exhaustive; I left some tactic code alone when it seemed to me that tactic could be upstreamed soon.
Notes
=>
to ↦
.Mathlib/Order/SupClosed
.λ x,
, which I also replaced.@@ -1238,8 +1238,9 @@ section DistribLattice
variable [DistribLattice α] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty)
{f : ι → α} {g : κ → α} {a : α}
-theorem sup'_inf_distrib_left (f : ι → α) (a : α) : a ⊓ s.sup' hs f = s.sup' hs λ i => a ⊓ f i := by
- refine' hs.cons_induction (fun i => _) fun i s hi hs ih => _
+theorem sup'_inf_distrib_left (f : ι → α) (a : α) :
+ a ⊓ s.sup' hs f = s.sup' hs fun i ↦ a ⊓ f i := by
+ refine' hs.cons_induction (fun i ↦ ?_) fun i s hi hs ih ↦ ?_
· simp
· simp_rw [sup'_cons hs, inf_sup_left]
rw [ih]
... or reduce its scope (the full removal is not as obvious).
@@ -17,9 +17,6 @@ import Mathlib.Order.Hom.Lattice
# Lattice operations on finsets
-/
-set_option autoImplicit true
-
-
variable {F α β γ ι κ : Type*}
namespace Finset
@@ -1029,7 +1026,8 @@ theorem inf'_le {b : β} (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
le_sup' (α := αᵒᵈ) f h
#align finset.inf'_le Finset.inf'_le
-theorem inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a := (inf'_le _ hb).trans h
+theorem inf'_le_of_le {a : α} {b : β} (hb : b ∈ s) (h : f b ≤ a) :
+ s.inf' ⟨b, hb⟩ f ≤ a := (inf'_le _ hb).trans h
#align finset.inf'_le_of_le Finset.inf'_le_of_le
@[simp]
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -607,7 +607,7 @@ theorem inf_sup {κ : ι → Type*} (s : Finset ι) (t : ∀ i, Finset (κ i)) (
fun h a g ha hg => _⟩
-- TODO: This `have` must be named to prevent it being shadowed by the internal `this` in `simpa`
have aux : ∀ j : { x // x ∈ s }, ↑j ≠ i := fun j : s => ne_of_mem_of_not_mem j.2 hi
- -- porting note: `simpa` doesn't support placeholders in proof terms
+ -- Porting note: `simpa` doesn't support placeholders in proof terms
have := h (fun j hj => if hji : j = i then cast (congr_arg κ hji.symm) a
else g _ <| mem_of_mem_insert_of_ne hj hji) (fun j hj => ?_)
simpa only [cast_eq, dif_pos, Function.comp, Subtype.coe_mk, dif_neg, aux] using this
@@ -1766,7 +1766,7 @@ theorem max_erase_ne_self {s : Finset α} : (s.erase x).max ≠ x := by
theorem min_erase_ne_self {s : Finset α} : (s.erase x).min ≠ x := by
-- Porting note: old proof `convert @max_erase_ne_self αᵒᵈ _ _ _`
convert @max_erase_ne_self αᵒᵈ _ (toDual x) (s.map toDual.toEmbedding) using 1
- apply congr_arg -- porting note: forces unfolding to see `Finset.min` is `Finset.max`
+ apply congr_arg -- Porting note: forces unfolding to see `Finset.min` is `Finset.max`
congr!
· ext; simp only [mem_map_equiv]; exact Iff.rfl
#align finset.min_erase_ne_self Finset.min_erase_ne_self
gcongr
lemmas (#11067)
I accidentally merged #9520 before pushing these changes requested by @Vierkantor
@@ -966,7 +966,9 @@ theorem sup'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonem
s₁.sup' h₁ f ≤ s₂.sup' (h₁.mono h) f :=
Finset.sup'_le h₁ _ (fun _ hb => le_sup' _ (h hb))
-/-- A version of `Finset.sup'_mono` acceptable for `@[gcongr]`. -/
+/-- A version of `Finset.sup'_mono` acceptable for `@[gcongr]`.
+Instead of deducing `s₂.Nonempty` from `s₁.Nonempty` and `s₁ ⊆ s₂`,
+this version takes it as an argument. -/
@[gcongr]
lemma _root_.GCongr.finset_sup'_le {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂)
{h₁ : s₁.Nonempty} {h₂ : s₂.Nonempty} : s₁.sup' h₁ f ≤ s₂.sup' h₂ f :=
@@ -1143,7 +1145,9 @@ theorem inf'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonem
s₂.inf' (h₁.mono h) f ≤ s₁.inf' h₁ f :=
Finset.le_inf' h₁ _ (fun _ hb => inf'_le _ (h hb))
-/-- A version of `Finset.inf'_mono` acceptable for `@[gcongr]`. -/
+/-- A version of `Finset.inf'_mono` acceptable for `@[gcongr]`.
+Instead of deducing `s₂.Nonempty` from `s₁.Nonempty` and `s₁ ⊆ s₂`,
+this version takes it as an argument. -/
@[gcongr]
lemma _root_.GCongr.finset_inf'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂)
{h₁ : s₁.Nonempty} {h₂ : s₂.Nonempty} : s₂.inf' h₂ f ≤ s₁.inf' h₁ f :=
@@ -148,6 +148,7 @@ theorem sup_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.sup f
Finset.sup_le fun b hb => le_trans (h b hb) (le_sup hb)
#align finset.sup_mono_fun Finset.sup_mono_fun
+@[gcongr]
theorem sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f :=
Finset.sup_le (fun _ hb => le_sup (h hb))
#align finset.sup_mono Finset.sup_mono
@@ -418,6 +419,7 @@ theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f
Finset.le_inf fun b hb => le_trans (inf_le hb) (h b hb)
#align finset.inf_mono_fun Finset.inf_mono_fun
+@[gcongr]
theorem inf_mono (h : s₁ ⊆ s₂) : s₂.inf f ≤ s₁.inf f :=
Finset.le_inf (fun _ hb => inf_le (h hb))
#align finset.inf_mono Finset.inf_mono
@@ -964,6 +966,12 @@ theorem sup'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonem
s₁.sup' h₁ f ≤ s₂.sup' (h₁.mono h) f :=
Finset.sup'_le h₁ _ (fun _ hb => le_sup' _ (h hb))
+/-- A version of `Finset.sup'_mono` acceptable for `@[gcongr]`. -/
+@[gcongr]
+lemma _root_.GCongr.finset_sup'_le {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂)
+ {h₁ : s₁.Nonempty} {h₂ : s₂.Nonempty} : s₁.sup' h₁ f ≤ s₂.sup' h₂ f :=
+ sup'_mono f h h₁
+
end Sup'
section Inf'
@@ -1135,6 +1143,12 @@ theorem inf'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonem
s₂.inf' (h₁.mono h) f ≤ s₁.inf' h₁ f :=
Finset.le_inf' h₁ _ (fun _ hb => inf'_le _ (h hb))
+/-- A version of `Finset.inf'_mono` acceptable for `@[gcongr]`. -/
+@[gcongr]
+lemma _root_.GCongr.finset_inf'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂)
+ {h₁ : s₁.Nonempty} {h₂ : s₂.Nonempty} : s₂.inf' h₂ f ≤ s₁.inf' h₁ f :=
+ inf'_mono f h h₁
+
end Inf'
section Sup
@@ -1400,6 +1414,7 @@ theorem not_mem_of_max_lt {s : Finset α} {a b : α} (h₁ : b < a) (h₂ : s.ma
Finset.not_mem_of_max_lt_coe <| h₂.trans_lt <| WithBot.coe_lt_coe.mpr h₁
#align finset.not_mem_of_max_lt Finset.not_mem_of_max_lt
+@[gcongr]
theorem max_mono {s t : Finset α} (st : s ⊆ t) : s.max ≤ t.max :=
sup_mono st
#align finset.max_mono Finset.max_mono
@@ -1474,6 +1489,7 @@ theorem not_mem_of_lt_min {s : Finset α} {a b : α} (h₁ : a < b) (h₂ : s.mi
Finset.not_mem_of_coe_lt_min <| (WithTop.coe_lt_coe.mpr h₁).trans_eq h₂.symm
#align finset.not_mem_of_lt_min Finset.not_mem_of_lt_min
+@[gcongr]
theorem min_mono {s t : Finset α} (st : s ⊆ t) : t.min ≤ s.min :=
inf_mono st
#align finset.min_mono Finset.min_mono
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -1768,8 +1768,8 @@ theorem card_le_of_interleaved {s t : Finset α}
(h : ∀ᵉ (x ∈ s) (y ∈ s),
x < y → (∀ z ∈ s, z ∉ Set.Ioo x y) → ∃ z ∈ t, x < z ∧ z < y) :
s.card ≤ t.card + 1 := by
- replace h : ∀ᵉ (x ∈ s) (y ∈ s), x < y → ∃ z ∈ t, x < z ∧ z < y
- · intro x hx y hy hxy
+ replace h : ∀ᵉ (x ∈ s) (y ∈ s), x < y → ∃ z ∈ t, x < z ∧ z < y := by
+ intro x hx y hy hxy
rcases exists_next_right ⟨y, hy, hxy⟩ with ⟨a, has, hxa, ha⟩
rcases h x hx a has hxa fun z hzs hz => hz.2.not_le <| ha _ hzs hz.1 with ⟨b, hbt, hxb, hba⟩
exact ⟨b, hbt, hxb, hba.trans_le <| ha _ hy hxy⟩
@@ -926,6 +926,12 @@ theorem _root_.map_finset_sup' [SemilatticeSup β] [FunLike F α β] [SupHomClas
refine' hs.cons_induction _ _ <;> intros <;> simp [*]
#align map_finset_sup' map_finset_sup'
+lemma nsmul_sup' [LinearOrderedAddCommMonoid β] {s : Finset α}
+ (hs : s.Nonempty) (f : α → β) (n : ℕ) :
+ s.sup' hs (fun a => n • f a) = n • s.sup' hs f :=
+ let ns : SupHom β β := { toFun := (n • ·), map_sup' := fun _ _ => (nsmul_right_mono n).map_max }
+ (map_finset_sup' ns hs _).symm
+
/-- To rewrite from right to left, use `Finset.sup'_comp_eq_image`. -/
@[simp]
theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
@@ -1092,6 +1098,12 @@ theorem _root_.map_finset_inf' [SemilatticeInf β] [FunLike F α β] [InfHomClas
refine' hs.cons_induction _ _ <;> intros <;> simp [*]
#align map_finset_inf' map_finset_inf'
+lemma nsmul_inf' [LinearOrderedAddCommMonoid β] {s : Finset α}
+ (hs : s.Nonempty) (f : α → β) (n : ℕ) :
+ s.inf' hs (fun a => n • f a) = n • s.inf' hs f :=
+ let ns : InfHom β β := { toFun := (n • ·), map_inf' := fun _ _ => (nsmul_right_mono n).map_min }
+ (map_finset_inf' ns hs _).symm
+
/-- To rewrite from right to left, use `Finset.inf'_comp_eq_image`. -/
@[simp]
theorem inf'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -90,8 +90,9 @@ theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
#align finset.sup_congr Finset.sup_congr
@[simp]
-theorem _root_.map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β] (f : F)
- (s : Finset ι) (g : ι → α) : f (s.sup g) = s.sup (f ∘ g) :=
+theorem _root_.map_finset_sup [SemilatticeSup β] [OrderBot β]
+ [FunLike F α β] [SupBotHomClass F α β]
+ (f : F) (s : Finset ι) (g : ι → α) : f (s.sup g) = s.sup (f ∘ g) :=
Finset.cons_induction_on s (map_bot f) fun i s _ h => by
rw [sup_cons, sup_cons, map_sup, h, Function.comp_apply]
#align map_finset_sup map_finset_sup
@@ -369,8 +370,9 @@ theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
#align finset.inf_congr Finset.inf_congr
@[simp]
-theorem _root_.map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β] (f : F)
- (s : Finset ι) (g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
+theorem _root_.map_finset_inf [SemilatticeInf β] [OrderTop β]
+ [FunLike F α β] [InfTopHomClass F α β]
+ (f : F) (s : Finset ι) (g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
Finset.cons_induction_on s (map_top f) fun i s _ h => by
rw [inf_cons, inf_cons, map_inf, h, Function.comp_apply]
#align map_finset_inf map_finset_inf
@@ -918,9 +920,10 @@ theorem comp_sup'_eq_sup'_comp [SemilatticeSup γ] {s : Finset β} (H : s.Nonemp
#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_comp
@[simp]
-theorem _root_.map_finset_sup' [SemilatticeSup β] [SupHomClass F α β] (f : F) {s : Finset ι} (hs)
- (g : ι → α) : f (s.sup' hs g) = s.sup' hs (f ∘ g) :=
- comp_sup'_eq_sup'_comp hs _ (map_sup f)
+theorem _root_.map_finset_sup' [SemilatticeSup β] [FunLike F α β] [SupHomClass F α β]
+ (f : F) {s : Finset ι} (hs) (g : ι → α) :
+ f (s.sup' hs g) = s.sup' hs (f ∘ g) := by
+ refine' hs.cons_induction _ _ <;> intros <;> simp [*]
#align map_finset_sup' map_finset_sup'
/-- To rewrite from right to left, use `Finset.sup'_comp_eq_image`. -/
@@ -1083,8 +1086,9 @@ theorem inf'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
#align finset.inf'_congr Finset.inf'_congr
@[simp]
-theorem _root_.map_finset_inf' [SemilatticeInf β] [InfHomClass F α β] (f : F) {s : Finset ι} (hs)
- (g : ι → α) : f (s.inf' hs g) = s.inf' hs (f ∘ g) := by
+theorem _root_.map_finset_inf' [SemilatticeInf β] [FunLike F α β] [InfHomClass F α β]
+ (f : F) {s : Finset ι} (hs) (g : ι → α) :
+ f (s.inf' hs g) = s.inf' hs (f ∘ g) := by
refine' hs.cons_induction _ _ <;> intros <;> simp [*]
#align map_finset_inf' map_finset_inf'
Function.left_id
and Function.comp.left_id
into Function.id_comp
.Function.right_id
and Function.comp.right_id
into Function.comp_id
.Function.comp_const_right
and Function.comp_const
into Function.comp_const
, use explicit arguments.Function.const_comp
to Mathlib.Init.Function
, use explicit arguments.@@ -305,7 +305,7 @@ theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x
theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
s.sup f = sSup (f '' s) :=
- by classical rw [← Finset.coe_image, ← sup_id_eq_sSup, sup_image, Function.comp.left_id]
+ by classical rw [← Finset.coe_image, ← sup_id_eq_sSup, sup_image, Function.id_comp]
#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_image
/-! ### inf -/
@@ -856,13 +856,13 @@ protected theorem sup'_comm {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty)
eq_of_forall_ge_iff fun a => by simpa using forall₂_swap
#align finset.sup'_comm Finset.sup'_comm
-theorem sup'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
- (s ×ˢ t).sup' (hs.product ht) f = s.sup' hs fun i => t.sup' ht fun i' => f ⟨i, i'⟩ :=
+theorem sup'_product_left {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' h f = s.sup' h.fst fun i => t.sup' h.snd fun i' => f ⟨i, i'⟩ :=
eq_of_forall_ge_iff fun a => by simp [@forall_swap _ γ]
#align finset.sup'_product_left Finset.sup'_product_left
-theorem sup'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
- (s ×ˢ t).sup' (hs.product ht) f = t.sup' ht fun i' => s.sup' hs fun i => f ⟨i, i'⟩ := by
+theorem sup'_product_right {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' h f = t.sup' h.snd fun i' => s.sup' h.fst fun i => f ⟨i, i'⟩ := by
rw [sup'_product_left, Finset.sup'_comm]
#align finset.sup'_product_right Finset.sup'_product_right
@@ -1035,14 +1035,14 @@ protected theorem inf'_comm {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty)
@Finset.sup'_comm αᵒᵈ _ _ _ _ _ hs ht _
#align finset.inf'_comm Finset.inf'_comm
-theorem inf'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
- (s ×ˢ t).inf' (hs.product ht) f = s.inf' hs fun i => t.inf' ht fun i' => f ⟨i, i'⟩ :=
- @sup'_product_left αᵒᵈ _ _ _ _ _ hs ht _
+theorem inf'_product_left {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' h f = s.inf' h.fst fun i => t.inf' h.snd fun i' => f ⟨i, i'⟩ :=
+ sup'_product_left (α := αᵒᵈ) h f
#align finset.inf'_product_left Finset.inf'_product_left
-theorem inf'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
- (s ×ˢ t).inf' (hs.product ht) f = t.inf' ht fun i' => s.inf' hs fun i => f ⟨i, i'⟩ :=
- @sup'_product_right αᵒᵈ _ _ _ _ _ hs ht _
+theorem inf'_product_right {t : Finset γ} (h : (s ×ˢ t).Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' h f = t.inf' h.snd fun i' => s.inf' h.fst fun i => f ⟨i, i'⟩ :=
+ sup'_product_right (α := αᵒᵈ) h f
#align finset.inf'_product_right Finset.inf'_product_right
section Prod
@@ -1219,7 +1219,7 @@ theorem sup'_inf_distrib_right (f : ι → α) (a : α) : s.sup' hs f ⊓ a = s.
theorem sup'_inf_sup' (f : ι → α) (g : κ → α) :
s.sup' hs f ⊓ t.sup' ht g = (s ×ˢ t).sup' (hs.product ht) fun i => f i.1 ⊓ g i.2 := by
- simp_rw [Finset.sup'_inf_distrib_right, Finset.sup'_inf_distrib_left, sup'_product_left hs ht]
+ simp_rw [Finset.sup'_inf_distrib_right, Finset.sup'_inf_distrib_left, sup'_product_left]
#align finset.sup'_inf_sup' Finset.sup'_inf_sup'
theorem inf'_sup_distrib_left (f : ι → α) (a : α) : a ⊔ s.inf' hs f = s.inf' hs fun i => a ⊔ f i :=
@@ -60,6 +60,7 @@ theorem sup_insert [DecidableEq β] {b : β} : (insert b s : Finset β).sup f =
fold_insert_idem
#align finset.sup_insert Finset.sup_insert
+@[simp]
theorem sup_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β → α) :
(s.image f).sup g = s.sup (g ∘ f) :=
fold_image_idem
@@ -341,6 +342,7 @@ theorem inf_insert [DecidableEq β] {b : β} : (insert b s : Finset β).inf f =
fold_insert_idem
#align finset.inf_insert Finset.inf_insert
+@[simp]
theorem inf_image [DecidableEq β] (s : Finset γ) (f : γ → β) (g : β → α) :
(s.image f).inf g = s.inf (g ∘ f) :=
fold_image_idem
Nonempty
arguments (#9377)
Finset.Nonempty.image_iff
to Finset.image_nonempty
, deprecate the old version;Set.nonempty_image_iff
to Set.image_nonempty
, deprecate the old version;Finset.Nonempty
arguments here and there;Nonempty s
instead of Nonempty (s.image f)
or Nonempty (s.map f)
.@@ -249,7 +249,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
theorem sup_le_of_le_directed {α : Type*} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
- (∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by
+ (∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x ∈ s, t.sup id ≤ x := by
classical
induction' t using Finset.induction_on with a r _ ih h
· simpa only [forall_prop_of_true, and_true_iff, forall_prop_of_false, bot_le, not_false_iff,
@@ -794,32 +794,34 @@ theorem coe_sup' : ((s.sup' H f : α) : WithBot α) = s.sup ((↑) ∘ f) := by
#align finset.coe_sup' Finset.coe_sup'
@[simp]
-theorem sup'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
- (cons b s hb).sup' h f = f b ⊔ s.sup' H f := by
+theorem sup'_cons {b : β} {hb : b ∉ s} :
+ (cons b s hb).sup' (nonempty_cons hb) f = f b ⊔ s.sup' H f := by
rw [← WithBot.coe_eq_coe]
simp [WithBot.coe_sup]
#align finset.sup'_cons Finset.sup'_cons
@[simp]
-theorem sup'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
- (insert b s).sup' h f = f b ⊔ s.sup' H f := by
+theorem sup'_insert [DecidableEq β] {b : β} :
+ (insert b s).sup' (insert_nonempty _ _) f = f b ⊔ s.sup' H f := by
rw [← WithBot.coe_eq_coe]
simp [WithBot.coe_sup]
#align finset.sup'_insert Finset.sup'_insert
@[simp]
-theorem sup'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset β).sup' h f = f b :=
+theorem sup'_singleton {b : β} : ({b} : Finset β).sup' (singleton_nonempty _) f = f b :=
rfl
#align finset.sup'_singleton Finset.sup'_singleton
-theorem sup'_le {a : α} (hs : ∀ b ∈ s, f b ≤ a) : s.sup' H f ≤ a := by
- rw [← WithBot.coe_le_coe, coe_sup']
- exact Finset.sup_le fun b h => WithBot.coe_le_coe.2 <| hs b h
+@[simp]
+theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a := by
+ simp_rw [← @WithBot.coe_le_coe α, coe_sup', Finset.sup_le_iff]; rfl
+#align finset.sup'_le_iff Finset.sup'_le_iff
+
+alias ⟨_, sup'_le⟩ := sup'_le_iff
#align finset.sup'_le Finset.sup'_le
-theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f := by
- rw [← WithBot.coe_le_coe, coe_sup']
- exact le_sup (f := fun c => WithBot.some (f c)) h
+theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f :=
+ (sup'_le_iff ⟨b, h⟩ f).1 le_rfl b h
#align finset.le_sup' Finset.le_sup'
theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
@@ -835,11 +837,6 @@ theorem sup'_const (a : α) : s.sup' H (fun _ => a) = a := by
· apply le_sup' (fun _ => a) H.choose_spec
#align finset.sup'_const Finset.sup'_const
-@[simp]
-theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
- Iff.intro (fun h _ hb => le_trans (le_sup' f hb) h) (sup'_le H f)
-#align finset.sup'_le_iff Finset.sup'_le_iff
-
theorem sup'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
(f : β → α) :
(s₁ ∪ s₂).sup' (h₁.mono <| subset_union_left _ _) f = s₁.sup' h₁ f ⊔ s₂.sup' h₂ f :=
@@ -887,24 +884,6 @@ lemma sup'_prodMap (hst : (s ×ˢ t).Nonempty) (f : ι → α) (g : κ → β) :
end Prod
-theorem comp_sup'_eq_sup'_comp [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) := by
- rw [← WithBot.coe_eq_coe, coe_sup']
- let g' := WithBot.map g
- show g' ↑(s.sup' H f) = s.sup fun a => g' ↑(f a)
- rw [coe_sup']
- refine' comp_sup_eq_sup_comp g' _ rfl
- intro f₁ f₂
- cases f₁ using WithBot.recBotCoe with
- | bot =>
- rw [bot_sup_eq]
- exact bot_sup_eq.symm
- | coe f₁ =>
- cases f₂ using WithBot.recBotCoe with
- | bot => rfl
- | coe f₂ => exact congr_arg _ (g_sup f₁ f₂)
-#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_comp
-
theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.sup' H f) := by
show @WithBot.recBotCoe α (fun _ => Prop) True p ↑(s.sup' H f)
@@ -931,26 +910,45 @@ theorem sup'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
simp (config := { contextual := true }) only [sup'_le_iff, h₂]
#align finset.sup'_congr Finset.sup'_congr
+theorem comp_sup'_eq_sup'_comp [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) := by
+ refine' H.cons_induction _ _ <;> intros <;> simp [*]
+#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_comp
+
@[simp]
theorem _root_.map_finset_sup' [SemilatticeSup β] [SupHomClass F α β] (f : F) {s : Finset ι} (hs)
- (g : ι → α) : f (s.sup' hs g) = s.sup' hs (f ∘ g) := by
- refine' hs.cons_induction _ _ <;> intros <;> simp [*]
+ (g : ι → α) : f (s.sup' hs g) = s.sup' hs (f ∘ g) :=
+ comp_sup'_eq_sup'_comp hs _ (map_sup f)
#align map_finset_sup' map_finset_sup'
+/-- To rewrite from right to left, use `Finset.sup'_comp_eq_image`. -/
@[simp]
theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
- (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
- (s.image f).sup' hs g = s.sup' hs' (g ∘ f) := by
+ (g : β → α) :
+ (s.image f).sup' hs g = s.sup' hs.of_image (g ∘ f) := by
rw [← WithBot.coe_eq_coe]; simp only [coe_sup', sup_image, WithBot.coe_sup]; rfl
#align finset.sup'_image Finset.sup'_image
+/-- 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. -/
+lemma sup'_comp_eq_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : s.Nonempty) (g : β → α) :
+ s.sup' hs (g ∘ f) = (s.image f).sup' (hs.image f) g :=
+ .symm <| sup'_image _ _
+
+/-- To rewrite from right to left, use `Finset.sup'_comp_eq_map`. -/
@[simp]
-theorem sup'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty)
- (hs' : s.Nonempty := Finset.map_nonempty.mp hs) : (s.map f).sup' hs g = s.sup' hs' (g ∘ f) := by
+theorem sup'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty) :
+ (s.map f).sup' hs g = s.sup' (map_nonempty.1 hs) (g ∘ f) := by
rw [← WithBot.coe_eq_coe, coe_sup', sup_map, coe_sup']
rfl
#align finset.sup'_map Finset.sup'_map
+/-- 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. -/
+lemma sup'_comp_eq_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : s.Nonempty) :
+ s.sup' hs (g ∘ f) = (s.map f).sup' (map_nonempty.2 hs) g :=
+ .symm <| sup'_map _ _
+
theorem sup'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonempty):
s₁.sup' h₁ f ≤ s₂.sup' (h₁.mono h) f :=
Finset.sup'_le h₁ _ (fun _ hb => le_sup' _ (h hb))
@@ -981,22 +979,27 @@ theorem coe_inf' : ((s.inf' H f : α) : WithTop α) = s.inf ((↑) ∘ f) :=
#align finset.coe_inf' Finset.coe_inf'
@[simp]
-theorem inf'_cons {b : β} {hb : b ∉ s} {h : (cons b s hb).Nonempty} :
- (cons b s hb).inf' h f = f b ⊓ s.inf' H f :=
- @sup'_cons αᵒᵈ _ _ _ H f _ _ h
+theorem inf'_cons {b : β} {hb : b ∉ s} :
+ (cons b s hb).inf' (nonempty_cons hb) f = f b ⊓ s.inf' H f :=
+ @sup'_cons αᵒᵈ _ _ _ H f _ _
#align finset.inf'_cons Finset.inf'_cons
@[simp]
-theorem inf'_insert [DecidableEq β] {b : β} {h : (insert b s).Nonempty} :
- (insert b s).inf' h f = f b ⊓ s.inf' H f :=
- @sup'_insert αᵒᵈ _ _ _ H f _ _ h
+theorem inf'_insert [DecidableEq β] {b : β} :
+ (insert b s).inf' (insert_nonempty _ _) f = f b ⊓ s.inf' H f :=
+ @sup'_insert αᵒᵈ _ _ _ H f _ _
#align finset.inf'_insert Finset.inf'_insert
@[simp]
-theorem inf'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset β).inf' h f = f b :=
+theorem inf'_singleton {b : β} : ({b} : Finset β).inf' (singleton_nonempty _) f = f b :=
rfl
#align finset.inf'_singleton Finset.inf'_singleton
+@[simp]
+theorem le_inf'_iff {a : α} : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
+ sup'_le_iff (α := αᵒᵈ) H f
+#align finset.le_inf'_iff Finset.le_inf'_iff
+
theorem le_inf' {a : α} (hs : ∀ b ∈ s, a ≤ f b) : a ≤ s.inf' H f :=
sup'_le (α := αᵒᵈ) H f hs
#align finset.le_inf' Finset.le_inf'
@@ -1013,11 +1016,6 @@ theorem inf'_const (a : α) : (s.inf' H fun _ => a) = a :=
sup'_const (α := αᵒᵈ) H a
#align finset.inf'_const Finset.inf'_const
-@[simp]
-theorem le_inf'_iff {a : α} : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
- sup'_le_iff (α := αᵒᵈ) H f
-#align finset.le_inf'_iff Finset.le_inf'_iff
-
theorem inf'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
(f : β → α) :
(s₁ ∪ s₂).inf' (h₁.mono <| subset_union_left _ _) f = s₁.inf' h₁ f ⊓ s₂.inf' h₂ f :=
@@ -1088,19 +1086,33 @@ theorem _root_.map_finset_inf' [SemilatticeInf β] [InfHomClass F α β] (f : F)
refine' hs.cons_induction _ _ <;> intros <;> simp [*]
#align map_finset_inf' map_finset_inf'
+/-- To rewrite from right to left, use `Finset.inf'_comp_eq_image`. -/
@[simp]
theorem inf'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
- (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
- (s.image f).inf' hs g = s.inf' hs' (g ∘ f) :=
- @sup'_image αᵒᵈ _ _ _ _ _ _ hs _ hs'
+ (g : β → α) :
+ (s.image f).inf' hs g = s.inf' hs.of_image (g ∘ f) :=
+ @sup'_image αᵒᵈ _ _ _ _ _ _ hs _
#align finset.inf'_image Finset.inf'_image
+/-- 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. -/
+lemma inf'_comp_eq_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : s.Nonempty) (g : β → α) :
+ s.inf' hs (g ∘ f) = (s.image f).inf' (hs.image f) g :=
+ sup'_comp_eq_image (α := αᵒᵈ) hs g
+
+/-- To rewrite from right to left, use `Finset.inf'_comp_eq_map`. -/
@[simp]
-theorem inf'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty)
- (hs' : s.Nonempty := Finset.map_nonempty.mp hs) : (s.map f).inf' hs g = s.inf' hs' (g ∘ f) :=
- sup'_map (α := αᵒᵈ) _ hs hs'
+theorem inf'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty) :
+ (s.map f).inf' hs g = s.inf' (map_nonempty.1 hs) (g ∘ f) :=
+ sup'_map (α := αᵒᵈ) _ hs
#align finset.inf'_map Finset.inf'_map
+/-- 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. -/
+lemma inf'_comp_eq_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : s.Nonempty) :
+ s.inf' hs (g ∘ f) = (s.map f).inf' (map_nonempty.2 hs) g :=
+ sup'_comp_eq_map (α := αᵒᵈ) g hs
+
theorem inf'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonempty) :
s₂.inf' (h₁.mono h) f ≤ s₁.inf' h₁ f :=
Finset.le_inf' h₁ _ (fun _ hb => inf'_le _ (h hb))
@@ -1641,24 +1653,34 @@ theorem min'_lt_of_mem_erase_min' [DecidableEq α] {a : α} (ha : a ∈ s.erase
@lt_max'_of_mem_erase_max' αᵒᵈ _ s H _ a ha
#align finset.min'_lt_of_mem_erase_min' Finset.min'_lt_of_mem_erase_min'
+/-- To rewrite from right to left, use `Monotone.map_finset_max'`. -/
@[simp]
theorem max'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
- (h : (s.image f).Nonempty) : (s.image f).max' h = f (s.max' ((Nonempty.image_iff f).mp h)) := by
- refine'
- le_antisymm (max'_le _ _ _ fun y hy => _) (le_max' _ _ (mem_image.mpr ⟨_, max'_mem _ _, rfl⟩))
- obtain ⟨x, hx, rfl⟩ := mem_image.mp hy
- exact hf (le_max' _ _ hx)
+ (h : (s.image f).Nonempty) : (s.image f).max' h = f (s.max' h.of_image) := by
+ simp only [max', sup'_image]
+ exact .symm <| comp_sup'_eq_sup'_comp _ _ fun _ _ ↦ hf.map_max
#align finset.max'_image Finset.max'_image
+/-- A version of `Finset.max'_image` with LHS and RHS reversed.
+Also, this version assumes that `s` is nonempty, not its image. -/
+lemma _root_.Monotone.map_finset_max' [LinearOrder β] {f : α → β} (hf : Monotone f) {s : Finset α}
+ (h : s.Nonempty) : f (s.max' h) = (s.image f).max' (h.image f) :=
+ .symm <| max'_image hf ..
+
+/-- To rewrite from right to left, use `Monotone.map_finset_min'`. -/
@[simp]
theorem min'_image [LinearOrder β] {f : α → β} (hf : Monotone f) (s : Finset α)
- (h : (s.image f).Nonempty) : (s.image f).min' h = f (s.min' ((Nonempty.image_iff f).mp h)) := by
- refine'
- le_antisymm (min'_le _ _ (mem_image.mpr ⟨_, min'_mem _ _, rfl⟩)) (le_min' _ _ _ fun y hy => _)
- obtain ⟨x, hx, rfl⟩ := mem_image.mp hy
- exact hf (min'_le _ _ hx)
+ (h : (s.image f).Nonempty) : (s.image f).min' h = f (s.min' h.of_image) := by
+ simp only [min', inf'_image]
+ exact .symm <| comp_inf'_eq_inf'_comp _ _ fun _ _ ↦ hf.map_min
#align finset.min'_image Finset.min'_image
+/-- A version of `Finset.min'_image` with LHS and RHS reversed.
+Also, this version assumes that `s` is nonempty, not its image. -/
+lemma _root_.Monotone.map_finset_min' [LinearOrder β] {f : α → β} (hf : Monotone f) {s : Finset α}
+ (h : s.Nonempty) : f (s.min' h) = (s.image f).min' (h.image f) :=
+ .symm <| min'_image hf ..
+
theorem coe_max' {s : Finset α} (hs : s.Nonempty) : ↑(s.max' hs) = s.max :=
coe_sup' hs id
#align finset.coe_max' Finset.coe_max'
@@ -1899,23 +1921,7 @@ theorem count_finset_sup [DecidableEq β] (s : Finset α) (f : α → Multiset
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Multiset β} {x : β} :
x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by
- classical
- induction' s using Finset.induction_on with a s has hxs
- · simp
- · rw [Finset.sup_insert, Multiset.sup_eq_union, Multiset.mem_union]
- constructor
- · intro hxi
- cases' hxi with hf hf
- · refine' ⟨a, _, hf⟩
- simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert]
- · rcases hxs.mp hf with ⟨v, hv, hfv⟩
- refine' ⟨v, _, hfv⟩
- simp only [hv, or_true_iff, Finset.mem_insert]
- · rintro ⟨v, hv, hfv⟩
- rw [Finset.mem_insert] at hv
- rcases hv with (rfl | hv)
- · exact Or.inl hfv
- · refine' Or.inr (hxs.mpr ⟨v, hv, hfv⟩)
+ induction s using Finset.cons_induction <;> simp [*]
#align multiset.mem_sup Multiset.mem_sup
end Multiset
@@ -102,11 +102,9 @@ protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a
exact ⟨fun k b hb => k _ _ hb rfl, fun k a' b hb h => h ▸ k _ hb⟩
#align finset.sup_le_iff Finset.sup_le_iff
-alias ⟨_, sup_le⟩ := Finset.sup_le_iff
+protected alias ⟨_, sup_le⟩ := Finset.sup_le_iff
#align finset.sup_le Finset.sup_le
--- Porting note: removed `attribute [protected] sup_le`
-
theorem sup_const_le : (s.sup fun _ => a) ≤ a :=
Finset.sup_le fun _ _ => le_rfl
#align finset.sup_const_le Finset.sup_const_le
@@ -173,6 +171,20 @@ theorem sup_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α)
rw [sup_product_left, Finset.sup_comm]
#align finset.sup_product_right Finset.sup_product_right
+section Prod
+variable {ι κ α β : Type*} [SemilatticeSup α] [SemilatticeSup β] [OrderBot α] [OrderBot β]
+ {s : Finset ι} {t : Finset κ}
+
+@[simp] lemma sup_prodMap (hs : s.Nonempty) (ht : t.Nonempty) (f : ι → α) (g : κ → β) :
+ sup (s ×ˢ t) (Prod.map f g) = (sup s f, sup t g) :=
+ eq_of_forall_ge_iff fun i ↦ by
+ obtain ⟨a, ha⟩ := hs
+ obtain ⟨b, hb⟩ := ht
+ simp only [Prod.map, Finset.sup_le_iff, mem_product, and_imp, Prod.forall, Prod.le_def]
+ exact ⟨fun h ↦ ⟨fun i hi ↦ (h _ _ hi hb).1, fun j hj ↦ (h _ _ ha hj).2⟩, by aesop⟩
+
+end Prod
+
@[simp]
theorem sup_erase_bot [DecidableEq α] (s : Finset α) : (s.erase ⊥).sup id = s.sup id := by
refine' (sup_mono (s.erase_subset _)).antisymm (Finset.sup_le_iff.2 fun a ha => _)
@@ -365,11 +377,9 @@ theorem _root_.map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass
@Finset.sup_le_iff αᵒᵈ _ _ _ _ _ _
#align finset.le_inf_iff Finset.le_inf_iff
-alias ⟨_, le_inf⟩ := Finset.le_inf_iff
+protected alias ⟨_, le_inf⟩ := Finset.le_inf_iff
#align finset.le_inf Finset.le_inf
--- Porting note: removed attribute [protected] le_inf
-
theorem le_inf_const_le : a ≤ s.inf fun _ => a :=
Finset.le_inf fun _ _ => le_rfl
#align finset.le_inf_const_le Finset.le_inf_const_le
@@ -427,6 +437,16 @@ theorem inf_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α)
@sup_product_right αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_product_right Finset.inf_product_right
+section Prod
+variable {ι κ α β : Type*} [SemilatticeInf α] [SemilatticeInf β] [OrderTop α] [OrderTop β]
+ {s : Finset ι} {t : Finset κ}
+
+@[simp] lemma inf_prodMap (hs : s.Nonempty) (ht : t.Nonempty) (f : ι → α) (g : κ → β) :
+ inf (s ×ˢ t) (Prod.map f g) = (inf s f, inf t g) :=
+ sup_prodMap (α := αᵒᵈ) (β := βᵒᵈ) hs ht _ _
+
+end Prod
+
@[simp]
theorem inf_erase_top [DecidableEq α] (s : Finset α) : (s.erase ⊤).inf id = s.inf id :=
@sup_erase_bot αᵒᵈ _ _ _ _
@@ -847,6 +867,26 @@ theorem sup'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (
rw [sup'_product_left, Finset.sup'_comm]
#align finset.sup'_product_right Finset.sup'_product_right
+section Prod
+variable {ι κ α β : Type*} [SemilatticeSup α] [SemilatticeSup β] {s : Finset ι} {t : Finset κ}
+
+/-- See also `Finset.sup'_prodMap`. -/
+lemma prodMk_sup'_sup' (hs : s.Nonempty) (ht : t.Nonempty) (f : ι → α) (g : κ → β) :
+ (sup' s hs f, sup' t ht g) = sup' (s ×ˢ t) (hs.product ht) (Prod.map f g) :=
+ eq_of_forall_ge_iff fun i ↦ by
+ obtain ⟨a, ha⟩ := hs
+ obtain ⟨b, hb⟩ := ht
+ simp only [Prod.map, sup'_le_iff, mem_product, and_imp, Prod.forall, Prod.le_def]
+ exact ⟨by aesop, fun h ↦ ⟨fun i hi ↦ (h _ _ hi hb).1, fun j hj ↦ (h _ _ ha hj).2⟩⟩
+
+/-- See also `Finset.prodMk_sup'_sup'`. -/
+-- @[simp] -- TODO: Why does `Prod_map` simplify the LHS?
+lemma sup'_prodMap (hst : (s ×ˢ t).Nonempty) (f : ι → α) (g : κ → β) :
+ sup' (s ×ˢ t) hst (Prod.map f g) = (sup' s hst.fst f, sup' t hst.snd g) :=
+ (prodMk_sup'_sup' _ _ _ _).symm
+
+end Prod
+
theorem comp_sup'_eq_sup'_comp [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) := by
rw [← WithBot.coe_eq_coe, coe_sup']
@@ -1005,6 +1045,22 @@ theorem inf'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (
@sup'_product_right αᵒᵈ _ _ _ _ _ hs ht _
#align finset.inf'_product_right Finset.inf'_product_right
+section Prod
+variable {ι κ α β : Type*} [SemilatticeInf α] [SemilatticeInf β] {s : Finset ι} {t : Finset κ}
+
+/-- See also `Finset.inf'_prodMap`. -/
+lemma prodMk_inf'_inf' (hs : s.Nonempty) (ht : t.Nonempty) (f : ι → α) (g : κ → β) :
+ (inf' s hs f, inf' t ht g) = inf' (s ×ˢ t) (hs.product ht) (Prod.map f g) :=
+ prodMk_sup'_sup' (α := αᵒᵈ) (β := βᵒᵈ) hs ht _ _
+
+/-- See also `Finset.prodMk_inf'_inf'`. -/
+-- @[simp] -- TODO: Why does `Prod_map` simplify the LHS?
+lemma inf'_prodMap (hst : (s ×ˢ t).Nonempty) (f : ι → α) (g : κ → β) :
+ inf' (s ×ˢ t) hst (Prod.map f g) = (inf' s hst.fst f, inf' t hst.snd g) :=
+ (prodMk_inf'_inf' _ _ _ _).symm
+
+end Prod
+
theorem comp_inf'_eq_inf'_comp [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) :=
comp_sup'_eq_sup'_comp (α := αᵒᵈ) (γ := γᵒᵈ) H g g_inf
∃ x ∈ s, _
instead of ∃ (x) (_ : x ∈ s), _
(#9184)
Search for [∀∃].*(_
and manually replace some occurrences with more readable versions.
In case of ∀
, the new expressions are defeq to the old ones.
In case of ∃
, they differ by exists_prop
.
In some rare cases, golf proofs that needed fixing.
@@ -259,7 +259,7 @@ theorem sup_le_of_le_directed {α : Type*} [SemilatticeSup α] [OrderBot α] (s
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : SubsemilatticeSupBot`
-theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s)
+theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ᵉ (x ∈ s) (y ∈ s), x ⊔ y ∈ s)
{ι : Type*} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup p ∈ s :=
@sup_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.sup_mem Finset.sup_mem
@@ -457,7 +457,7 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
@sup_induction αᵒᵈ _ _ _ _ _ _ ht hp hs
#align finset.inf_induction Finset.inf_induction
-theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
+theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ᵉ (x ∈ s) (y ∈ s), x ⊓ y ∈ s)
{ι : Type*} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@inf_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.inf_mem Finset.inf_mem
@@ -878,7 +878,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
| coe a₂ => exact hp a₁ h₁ a₂ h₂
#align finset.sup'_induction Finset.sup'_induction
-theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type*}
+theorem sup'_mem (s : Set α) (w : ∀ᵉ (x ∈ s) (y ∈ s), x ⊔ y ∈ s) {ι : Type*}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
sup'_induction H p w h
#align finset.sup'_mem Finset.sup'_mem
@@ -1015,7 +1015,7 @@ theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
sup'_induction (α := αᵒᵈ) H f hp hs
#align finset.inf'_induction Finset.inf'_induction
-theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type*}
+theorem inf'_mem (s : Set α) (w : ∀ᵉ (x ∈ s) (y ∈ s), x ⊓ y ∈ s) {ι : Type*}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
inf'_induction H p w h
#align finset.inf'_mem Finset.inf'_mem
@@ -1669,10 +1669,10 @@ theorem exists_next_left {x : α} {s : Finset α} (h : ∃ y ∈ s, y < x) :
/-- If finsets `s` and `t` are interleaved, then `Finset.card s ≤ Finset.card t + 1`. -/
theorem card_le_of_interleaved {s t : Finset α}
- (h : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s),
+ (h : ∀ᵉ (x ∈ s) (y ∈ s),
x < y → (∀ z ∈ s, z ∉ Set.Ioo x y) → ∃ z ∈ t, x < z ∧ z < y) :
s.card ≤ t.card + 1 := by
- replace h : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x < y → ∃ z ∈ t, x < z ∧ z < y
+ replace h : ∀ᵉ (x ∈ s) (y ∈ s), x < y → ∃ z ∈ t, x < z ∧ z < y
· intro x hx y hy hxy
rcases exists_next_right ⟨y, hy, hxy⟩ with ⟨a, has, hxa, ha⟩
rcases h x hx a has hxa fun z hzs hz => hz.2.not_le <| ha _ hzs hz.1 with ⟨b, hbt, hxb, hba⟩
@@ -1699,7 +1699,7 @@ theorem card_le_of_interleaved {s t : Finset α}
/-- If finsets `s` and `t` are interleaved, then `Finset.card s ≤ Finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
(h :
- ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s),
+ ∀ᵉ (x ∈ s) (y ∈ s),
x < y → (∀ z ∈ s, z ∉ Set.Ioo x y) → ∃ z ∈ t, x < z ∧ z < y) :
s.card ≤ (t \ s).card + 1 :=
card_le_of_interleaved fun x hx y hy hxy hs =>
(· op ·) a
by (a op ·)
(#8843)
I used the regex \(\(· (.) ·\) (.)\)
, replacing with ($2 $1 ·)
.
@@ -1657,7 +1657,7 @@ theorem min_erase_ne_self {s : Finset α} : (s.erase x).min ≠ x := by
theorem exists_next_right {x : α} {s : Finset α} (h : ∃ y ∈ s, x < y) :
∃ y ∈ s, x < y ∧ ∀ z ∈ s, x < z → y ≤ z :=
- have Hne : (s.filter ((· < ·) x)).Nonempty := h.imp fun y hy => mem_filter.2 (by simpa)
+ have Hne : (s.filter (x < ·)).Nonempty := h.imp fun y hy => mem_filter.2 (by simpa)
have aux := (mem_filter.1 (min'_mem _ Hne))
⟨min' _ Hne, aux.1, by simp, fun z hzs hz => min'_le _ _ <| mem_filter.2 ⟨hzs, by simpa⟩⟩
#align finset.exists_next_right Finset.exists_next_right
@@ -901,7 +901,7 @@ theorem _root_.map_finset_sup' [SemilatticeSup β] [SupHomClass F α β] (f : F)
theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
(g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
(s.image f).sup' hs g = s.sup' hs' (g ∘ f) := by
- rw [←WithBot.coe_eq_coe]; simp only [coe_sup', sup_image, WithBot.coe_sup]; rfl
+ rw [← WithBot.coe_eq_coe]; simp only [coe_sup', sup_image, WithBot.coe_sup]; rfl
#align finset.sup'_image Finset.sup'_image
@[simp]
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -1752,7 +1752,7 @@ ordered type : a predicate is true on all `s : Finset α` provided that:
theorem induction_on_max_value [DecidableEq ι] (f : ι → α) {p : Finset ι → Prop} (s : Finset ι)
(h0 : p ∅) (step : ∀ a s, a ∉ s → (∀ x ∈ s, f x ≤ f a) → p s → p (insert a s)) : p s := by
induction' s using Finset.strongInductionOn with s ihs
- rcases(s.image f).eq_empty_or_nonempty with (hne | hne)
+ rcases (s.image f).eq_empty_or_nonempty with (hne | hne)
· simp only [image_eq_empty] at hne
simp only [hne, h0]
· have H : (s.image f).max' hne ∈ s.image f := max'_mem (s.image f) hne
Finset.sup'
lemmas (#7021)
Match https://github.com/leanprover-community/mathlib/pull/18989
@@ -11,7 +11,7 @@ import Mathlib.Data.Multiset.Lattice
import Mathlib.Order.CompleteLattice
import Mathlib.Order.Hom.Lattice
-#align_import data.finset.lattice from "leanprover-community/mathlib"@"1d29de43a5ba4662dd33b5cfeecfc2a27a5a8a29"
+#align_import data.finset.lattice from "leanprover-community/mathlib"@"442a83d738cb208d3600056c489be16900ba701d"
/-!
# Lattice operations on finsets
@@ -75,12 +75,6 @@ theorem sup_singleton {b : β} : ({b} : Finset β).sup f = f b :=
Multiset.sup_singleton
#align finset.sup_singleton Finset.sup_singleton
-theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
- Finset.induction_on s₁
- (by rw [empty_union, sup_empty, bot_sup_eq])
- (fun a s _ ih => by rw [insert_union, sup_insert, sup_insert, ih, sup_assoc])
-#align finset.sup_union Finset.sup_union
-
theorem sup_sup : s.sup (f ⊔ g) = s.sup f ⊔ s.sup g := by
refine' Finset.cons_induction_on s _ fun b t _ h => _
· rw [sup_empty, sup_empty, sup_empty, bot_sup_eq]
@@ -124,6 +118,10 @@ theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f := h.trans <| le_sup hb
#align finset.le_sup_of_le Finset.le_sup_of_le
+theorem sup_union [DecidableEq β] : (s₁ ∪ s₂).sup f = s₁.sup f ⊔ s₂.sup f :=
+ eq_of_forall_ge_iff fun c => by simp [or_imp, forall_and]
+#align finset.sup_union Finset.sup_union
+
@[simp]
theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
(s.biUnion t).sup f = s.sup fun x => (t x).sup f :=
@@ -155,10 +153,8 @@ theorem sup_mono (h : s₁ ⊆ s₂) : s₁.sup f ≤ s₂.sup f :=
#align finset.sup_mono Finset.sup_mono
protected theorem sup_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
- (s.sup fun b => t.sup (f b)) = t.sup fun c => s.sup fun b => f b c := by
- refine' eq_of_forall_ge_iff fun a => _
- simp_rw [Finset.sup_le_iff]
- exact ⟨fun h c hc b hb => h b hb c hc, fun h b hb c hc => h c hc b hb⟩
+ (s.sup fun b => t.sup (f b)) = t.sup fun c => s.sup fun b => f b c :=
+ eq_of_forall_ge_iff fun a => by simpa using forall₂_swap
#align finset.sup_comm Finset.sup_comm
@[simp, nolint simpNF] -- Porting note: linter claims that LHS does not simplify
@@ -168,13 +164,8 @@ theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x)
/-- See also `Finset.product_biUnion`. -/
theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
- (s ×ˢ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ := by
- simp only [le_antisymm_iff, Finset.sup_le_iff, mem_product, and_imp, Prod.forall]
- -- Porting note: was one expression.
- refine ⟨fun b c hb hc => ?_, fun b hb c hc => ?_⟩
- · refine (le_sup hb).trans' ?_
- exact @le_sup _ _ _ _ _ (fun c => f (b, c)) c hc
- · exact le_sup <| mem_product.2 ⟨hb, hc⟩
+ (s ×ˢ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ :=
+ eq_of_forall_ge_iff fun a => by simp [@forall_swap _ γ]
#align finset.sup_product_left Finset.sup_product_left
theorem sup_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α) :
@@ -353,10 +344,6 @@ theorem inf_singleton {b : β} : ({b} : Finset β).inf f = f b :=
Multiset.inf_singleton
#align finset.inf_singleton Finset.inf_singleton
-theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
- @sup_union αᵒᵈ _ _ _ _ _ _ _
-#align finset.inf_union Finset.inf_union
-
theorem inf_inf : s.inf (f ⊓ g) = s.inf f ⊓ s.inf g :=
@sup_sup αᵒᵈ _ _ _ _ _ _
#align finset.inf_inf Finset.inf_inf
@@ -374,22 +361,7 @@ theorem _root_.map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass
rw [inf_cons, inf_cons, map_inf, h, Function.comp_apply]
#align map_finset_inf map_finset_inf
-@[simp]
-theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
- (s.biUnion t).inf f = s.inf fun x => (t x).inf f :=
- @sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
-#align finset.inf_bUnion Finset.inf_biUnion
-
-theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c :=
- @sup_const αᵒᵈ _ _ _ _ h _
-#align finset.inf_const Finset.inf_const
-
-@[simp]
-theorem inf_top (s : Finset β) : (s.inf fun _ => ⊤) = (⊤ : α) :=
- @sup_bot αᵒᵈ _ _ _ _
-#align finset.inf_top Finset.inf_top
-
-protected theorem le_inf_iff {a : α} : a ≤ s.inf f ↔ ∀ b ∈ s, a ≤ f b :=
+@[simp] protected theorem le_inf_iff {a : α} : a ≤ s.inf f ↔ ∀ b ∈ s, a ≤ f b :=
@Finset.sup_le_iff αᵒᵈ _ _ _ _ _ _
#align finset.le_inf_iff Finset.le_inf_iff
@@ -409,6 +381,25 @@ theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
theorem inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a := (inf_le hb).trans h
#align finset.inf_le_of_le Finset.inf_le_of_le
+theorem inf_union [DecidableEq β] : (s₁ ∪ s₂).inf f = s₁.inf f ⊓ s₂.inf f :=
+ eq_of_forall_le_iff fun c ↦ by simp [or_imp, forall_and]
+#align finset.inf_union Finset.inf_union
+
+@[simp] theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
+ (s.biUnion t).inf f = s.inf fun x => (t x).inf f :=
+ @sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.inf_bUnion Finset.inf_biUnion
+
+theorem inf_const (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c := @sup_const αᵒᵈ _ _ _ _ h _
+#align finset.inf_const Finset.inf_const
+
+@[simp] theorem inf_top (s : Finset β) : (s.inf fun _ => ⊤) = (⊤ : α) := @sup_bot αᵒᵈ _ _ _ _
+#align finset.inf_top Finset.inf_top
+
+theorem inf_ite (p : β → Prop) [DecidablePred p] :
+ (s.inf fun i ↦ ite (p i) (f i) (g i)) = (s.filter p).inf f ⊓ (s.filter fun i ↦ ¬ p i).inf g :=
+ fold_ite _
+
theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
Finset.le_inf fun b hb => le_trans (inf_le hb) (h b hb)
#align finset.inf_mono_fun Finset.inf_mono_fun
@@ -417,15 +408,15 @@ theorem inf_mono (h : s₁ ⊆ s₂) : s₂.inf f ≤ s₁.inf f :=
Finset.le_inf (fun _ hb => inf_le (h hb))
#align finset.inf_mono Finset.inf_mono
-theorem inf_attach (s : Finset β) (f : β → α) : (s.attach.inf fun x => f x) = s.inf f :=
- @sup_attach αᵒᵈ _ _ _ _ _
-#align finset.inf_attach Finset.inf_attach
-
protected theorem inf_comm (s : Finset β) (t : Finset γ) (f : β → γ → α) :
(s.inf fun b => t.inf (f b)) = t.inf fun c => s.inf fun b => f b c :=
@Finset.sup_comm αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_comm Finset.inf_comm
+theorem inf_attach (s : Finset β) (f : β → α) : (s.attach.inf fun x => f x) = s.inf f :=
+ @sup_attach αᵒᵈ _ _ _ _ _
+#align finset.inf_attach Finset.inf_attach
+
theorem inf_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ˢ t).inf f = s.inf fun i => t.inf fun i' => f ⟨i, i'⟩ :=
@sup_product_left αᵒᵈ _ _ _ _ _ _ _
@@ -829,12 +820,33 @@ theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
Iff.intro (fun h _ hb => le_trans (le_sup' f hb) h) (sup'_le H f)
#align finset.sup'_le_iff Finset.sup'_le_iff
+theorem sup'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
+ (f : β → α) :
+ (s₁ ∪ s₂).sup' (h₁.mono <| subset_union_left _ _) f = s₁.sup' h₁ f ⊔ s₂.sup' h₂ f :=
+ eq_of_forall_ge_iff fun a => by simp [or_imp, forall_and]
+#align finset.sup'_union Finset.sup'_union
+
theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
(s.biUnion t).sup' (Hs.biUnion fun b _ => Ht b) f = s.sup' Hs (fun b => (t b).sup' (Ht b) f) :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
#align finset.sup'_bUnion Finset.sup'_biUnion
+protected theorem sup'_comm {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 :=
+ eq_of_forall_ge_iff fun a => by simpa using forall₂_swap
+#align finset.sup'_comm Finset.sup'_comm
+
+theorem sup'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' (hs.product ht) f = s.sup' hs fun i => t.sup' ht fun i' => f ⟨i, i'⟩ :=
+ eq_of_forall_ge_iff fun a => by simp [@forall_swap _ γ]
+#align finset.sup'_product_left Finset.sup'_product_left
+
+theorem sup'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).sup' (hs.product ht) f = t.sup' ht fun i' => s.sup' hs fun i => f ⟨i, i'⟩ := by
+ rw [sup'_product_left, Finset.sup'_comm]
+#align finset.sup'_product_right Finset.sup'_product_right
+
theorem comp_sup'_eq_sup'_comp [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) := by
rw [← WithBot.coe_eq_coe, coe_sup']
@@ -879,6 +891,19 @@ theorem sup'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
simp (config := { contextual := true }) only [sup'_le_iff, h₂]
#align finset.sup'_congr Finset.sup'_congr
+@[simp]
+theorem _root_.map_finset_sup' [SemilatticeSup β] [SupHomClass F α β] (f : F) {s : Finset ι} (hs)
+ (g : ι → α) : f (s.sup' hs g) = s.sup' hs (f ∘ g) := by
+ refine' hs.cons_induction _ _ <;> intros <;> simp [*]
+#align map_finset_sup' map_finset_sup'
+
+@[simp]
+theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
+ (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
+ (s.image f).sup' hs g = s.sup' hs' (g ∘ f) := by
+ rw [←WithBot.coe_eq_coe]; simp only [coe_sup', sup_image, WithBot.coe_sup]; rfl
+#align finset.sup'_image Finset.sup'_image
+
@[simp]
theorem sup'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty)
(hs' : s.Nonempty := Finset.map_nonempty.mp hs) : (s.map f).sup' hs g = s.sup' hs' (g ∘ f) := by
@@ -953,12 +978,33 @@ theorem le_inf'_iff {a : α} : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
sup'_le_iff (α := αᵒᵈ) H f
#align finset.le_inf'_iff Finset.le_inf'_iff
+theorem inf'_union [DecidableEq β] {s₁ s₂ : Finset β} (h₁ : s₁.Nonempty) (h₂ : s₂.Nonempty)
+ (f : β → α) :
+ (s₁ ∪ s₂).inf' (h₁.mono <| subset_union_left _ _) f = s₁.inf' h₁ f ⊓ s₂.inf' h₂ f :=
+ @sup'_union αᵒᵈ _ _ _ _ _ h₁ h₂ _
+#align finset.inf'_union Finset.inf'_union
+
theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
(s.biUnion t).inf' (Hs.biUnion fun b _ => Ht b) f = s.inf' Hs (fun b => (t b).inf' (Ht b) f) :=
sup'_biUnion (α := αᵒᵈ) _ Hs Ht
#align finset.inf'_bUnion Finset.inf'_biUnion
+protected theorem inf'_comm {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 :=
+ @Finset.sup'_comm αᵒᵈ _ _ _ _ _ hs ht _
+#align finset.inf'_comm Finset.inf'_comm
+
+theorem inf'_product_left {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' (hs.product ht) f = s.inf' hs fun i => t.inf' ht fun i' => f ⟨i, i'⟩ :=
+ @sup'_product_left αᵒᵈ _ _ _ _ _ hs ht _
+#align finset.inf'_product_left Finset.inf'_product_left
+
+theorem inf'_product_right {t : Finset γ} (hs : s.Nonempty) (ht : t.Nonempty) (f : β × γ → α) :
+ (s ×ˢ t).inf' (hs.product ht) f = t.inf' ht fun i' => s.inf' hs fun i => f ⟨i, i'⟩ :=
+ @sup'_product_right αᵒᵈ _ _ _ _ _ hs ht _
+#align finset.inf'_product_right Finset.inf'_product_right
+
theorem comp_inf'_eq_inf'_comp [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) :=
comp_sup'_eq_sup'_comp (α := αᵒᵈ) (γ := γᵒᵈ) H g g_inf
@@ -980,6 +1026,19 @@ theorem inf'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀
sup'_congr (α := αᵒᵈ) H h₁ h₂
#align finset.inf'_congr Finset.inf'_congr
+@[simp]
+theorem _root_.map_finset_inf' [SemilatticeInf β] [InfHomClass F α β] (f : F) {s : Finset ι} (hs)
+ (g : ι → α) : f (s.inf' hs g) = s.inf' hs (f ∘ g) := by
+ refine' hs.cons_induction _ _ <;> intros <;> simp [*]
+#align map_finset_inf' map_finset_inf'
+
+@[simp]
+theorem inf'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
+ (g : β → α) (hs' : s.Nonempty := (Nonempty.image_iff _).1 hs) :
+ (s.image f).inf' hs g = s.inf' hs' (g ∘ f) :=
+ @sup'_image αᵒᵈ _ _ _ _ _ _ hs _ hs'
+#align finset.inf'_image Finset.inf'_image
+
@[simp]
theorem inf'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty)
(hs' : s.Nonempty := Finset.map_nonempty.mp hs) : (s.map f).inf' hs g = s.inf' hs' (g ∘ f) :=
@@ -1073,6 +1132,41 @@ theorem ofDual_inf' [SemilatticeSup α] {s : Finset ι} (hs : s.Nonempty) (f :
rfl
#align finset.of_dual_inf' Finset.ofDual_inf'
+section DistribLattice
+variable [DistribLattice α] {s : Finset ι} {t : Finset κ} (hs : s.Nonempty) (ht : t.Nonempty)
+ {f : ι → α} {g : κ → α} {a : α}
+
+theorem sup'_inf_distrib_left (f : ι → α) (a : α) : a ⊓ s.sup' hs f = s.sup' hs λ i => a ⊓ f i := by
+ refine' hs.cons_induction (fun i => _) fun i s hi hs ih => _
+ · simp
+ · simp_rw [sup'_cons hs, inf_sup_left]
+ rw [ih]
+#align finset.sup'_inf_distrib_left Finset.sup'_inf_distrib_left
+
+theorem sup'_inf_distrib_right (f : ι → α) (a : α) : s.sup' hs f ⊓ a = s.sup' hs fun i => f i ⊓ a :=
+ by rw [inf_comm, sup'_inf_distrib_left]; simp_rw [inf_comm]
+#align finset.sup'_inf_distrib_right Finset.sup'_inf_distrib_right
+
+theorem sup'_inf_sup' (f : ι → α) (g : κ → α) :
+ s.sup' hs f ⊓ t.sup' ht g = (s ×ˢ t).sup' (hs.product ht) fun i => f i.1 ⊓ g i.2 := by
+ simp_rw [Finset.sup'_inf_distrib_right, Finset.sup'_inf_distrib_left, sup'_product_left hs ht]
+#align finset.sup'_inf_sup' Finset.sup'_inf_sup'
+
+theorem inf'_sup_distrib_left (f : ι → α) (a : α) : a ⊔ s.inf' hs f = s.inf' hs fun i => a ⊔ f i :=
+ @sup'_inf_distrib_left αᵒᵈ _ _ _ hs _ _
+#align finset.inf'_sup_distrib_left Finset.inf'_sup_distrib_left
+
+theorem inf'_sup_distrib_right (f : ι → α) (a : α) : s.inf' hs f ⊔ a = s.inf' hs fun i => f i ⊔ a :=
+ @sup'_inf_distrib_right αᵒᵈ _ _ _ hs _ _
+#align finset.inf'_sup_distrib_right Finset.inf'_sup_distrib_right
+
+theorem inf'_sup_inf' (f : ι → α) (g : κ → α) :
+ s.inf' hs f ⊔ t.inf' ht g = (s ×ˢ t).inf' (hs.product ht) fun i => f i.1 ⊔ g i.2 :=
+ @sup'_inf_sup' αᵒᵈ _ _ _ _ _ hs ht _ _
+#align finset.inf'_sup_inf' Finset.inf'_sup_inf'
+
+end DistribLattice
+
section LinearOrder
variable [LinearOrder α] {s : Finset ι} (H : s.Nonempty) {f : ι → α} {a : α}
This defines sets closed under supremum/infimum, shows that every set has a sup-closure/inf-closure and prove that if every sup-closed/inf-closed set in a sup-semilattice/inf-semilattice has a least upper bound/greatest lower, then the lattice is in fact complete.
As a bonus, we use our new predicate in Order.CompactlyGenerated
.
Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com>
@@ -1000,11 +1000,6 @@ theorem sup'_eq_sup {s : Finset β} (H : s.Nonempty) (f : β → α) : s.sup' H
le_antisymm (sup'_le H f fun _ => le_sup) (Finset.sup_le fun _ => le_sup' f)
#align finset.sup'_eq_sup Finset.sup'_eq_sup
-theorem sup_closed_of_sup_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
- (h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊔ b ∈ s) : t.sup id ∈ s :=
- sup'_eq_sup htne id ▸ sup'_induction _ _ h h_subset
-#align finset.sup_closed_of_sup_closed Finset.sup_closed_of_sup_closed
-
theorem coe_sup_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.sup f) : WithBot α) = s.sup ((↑) ∘ f) := by simp only [← sup'_eq_sup h, coe_sup' h]
#align finset.coe_sup_of_nonempty Finset.coe_sup_of_nonempty
@@ -1019,11 +1014,6 @@ theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H
sup'_eq_sup (α := αᵒᵈ) H f
#align finset.inf'_eq_inf Finset.inf'_eq_inf
-theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
- (h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
- sup_closed_of_sup_closed (α := αᵒᵈ) t htne h_subset h
-#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
-
theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.inf f) : WithTop α) = s.inf ((↑) ∘ f) :=
coe_sup_of_nonempty (α := αᵒᵈ) h f
@@ -108,7 +108,7 @@ protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a
exact ⟨fun k b hb => k _ _ hb rfl, fun k a' b hb h => h ▸ k _ hb⟩
#align finset.sup_le_iff Finset.sup_le_iff
-alias Finset.sup_le_iff ↔ _ sup_le
+alias ⟨_, sup_le⟩ := Finset.sup_le_iff
#align finset.sup_le Finset.sup_le
-- Porting note: removed `attribute [protected] sup_le`
@@ -393,7 +393,7 @@ protected theorem le_inf_iff {a : α} : a ≤ s.inf f ↔ ∀ b ∈ s, a ≤ f b
@Finset.sup_le_iff αᵒᵈ _ _ _ _ _ _
#align finset.le_inf_iff Finset.le_inf_iff
-alias Finset.le_inf_iff ↔ _ le_inf
+alias ⟨_, le_inf⟩ := Finset.le_inf_iff
#align finset.le_inf Finset.le_inf
-- Porting note: removed attribute [protected] le_inf
Autoimplicits are highly controversial and also defeat the performance-improving work in #6474.
The intent of this PR is to make autoImplicit
opt-in on a per-file basis, by disabling it in the lakefile and enabling it again with set_option autoImplicit true
in the few files that rely on it.
That also keeps this PR small, as opposed to attempting to "fix" files to not need it any more.
I claim that many of the uses of autoImplicit
in these files are accidental; situations such as:
variables
are in scope, but pasting the lemma in the wrong sectionHaving set_option autoImplicit false
as the default prevents these types of mistake being made in the 90% of files where autoImplicit
s are not used at all, and causes them to be caught by CI during review.
I think there were various points during the port where we encouraged porters to delete the universes u v
lines; I think having autoparams for universe variables only would cover a lot of the cases we actually use them, while avoiding any real shortcomings.
A Zulip poll (after combining overlapping votes accordingly) was in favor of this change with 5:5:18
as the no:dontcare:yes
vote ratio.
While this PR was being reviewed, a handful of files gained some more likely-accidental autoImplicits. In these places, set_option autoImplicit true
has been placed locally within a section, rather than at the top of the file.
@@ -17,6 +17,8 @@ import Mathlib.Order.Hom.Lattice
# Lattice operations on finsets
-/
+set_option autoImplicit true
+
variable {F α β γ ι κ : Type*}
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -18,7 +18,7 @@ import Mathlib.Order.Hom.Lattice
-/
-variable {F α β γ ι κ : Type _}
+variable {F α β γ ι κ : Type*}
namespace Finset
@@ -188,7 +188,7 @@ theorem sup_erase_bot [DecidableEq α] (s : Finset α) : (s.erase ⊥).sup id =
· exact le_sup (mem_erase.2 ⟨ha', ha⟩)
#align finset.sup_erase_bot Finset.sup_erase_bot
-theorem sup_sdiff_right {α β : Type _} [GeneralizedBooleanAlgebra α] (s : Finset β) (f : β → α)
+theorem sup_sdiff_right {α β : Type*} [GeneralizedBooleanAlgebra α] (s : Finset β) (f : β → α)
(a : α) : (s.sup fun b => f b \ a) = s.sup f \ a := by
refine' Finset.cons_induction_on s _ fun b t _ h => _
· rw [sup_empty, sup_empty, bot_sdiff]
@@ -242,7 +242,7 @@ theorem sup_induction {p : α → Prop} (hb : p ⊥) (hp : ∀ a₁, p a₁ →
· exact ih fun b h => hs b (mem_cons.2 (Or.inr h))
#align finset.sup_induction Finset.sup_induction
-theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s : Set α)
+theorem sup_le_of_le_directed {α : Type*} [SemilatticeSup α] [OrderBot α] (s : Set α)
(hs : s.Nonempty) (hdir : DirectedOn (· ≤ ·) s) (t : Finset α) :
(∀ x ∈ t, ∃ y ∈ s, x ≤ y) → ∃ x, x ∈ s ∧ t.sup id ≤ x := by
classical
@@ -267,7 +267,7 @@ theorem sup_le_of_le_directed {α : Type _} [SemilatticeSup α] [OrderBot α] (s
-- If we acquire sublattices
-- the hypotheses should be reformulated as `s : SubsemilatticeSupBot`
theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s)
- {ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup p ∈ s :=
+ {ι : Type*} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup p ∈ s :=
@sup_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.sup_mem Finset.sup_mem
@@ -465,7 +465,7 @@ theorem inf_induction {p : α → Prop} (ht : p ⊤) (hp : ∀ a₁, p a₁ →
#align finset.inf_induction Finset.inf_induction
theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s)
- {ι : Type _} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
+ {ι : Type*} (t : Finset ι) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf p ∈ s :=
@inf_induction _ _ _ _ _ _ (· ∈ s) w₁ w₂ h
#align finset.inf_mem Finset.inf_mem
@@ -572,7 +572,7 @@ section BoundedOrder
variable [BoundedOrder α] [DecidableEq ι]
--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
-theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+theorem inf_sup {κ : ι → Type*} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.inf fun i => (t i).sup (f i)) =
(s.pi t).sup fun g => s.attach.inf fun i => f _ <| g _ i.2 := by
induction' s using Finset.induction with i s hi ih
@@ -598,7 +598,7 @@ theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i))
· simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
#align finset.inf_sup Finset.inf_sup
-theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+theorem sup_inf {κ : ι → Type*} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
@inf_sup αᵒᵈ _ _ _ _ _ _ _ _
#align finset.sup_inf Finset.sup_inf
@@ -864,7 +864,7 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
| coe a₂ => exact hp a₁ h₁ a₂ h₂
#align finset.sup'_induction Finset.sup'_induction
-theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
+theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type*}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.sup' H p ∈ s :=
sup'_induction H p w h
#align finset.sup'_mem Finset.sup'_mem
@@ -967,7 +967,7 @@ theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
sup'_induction (α := αᵒᵈ) H f hp hs
#align finset.inf'_induction Finset.inf'_induction
-theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
+theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type*}
(t : Finset ι) (H : t.Nonempty) (p : ι → α) (h : ∀ i ∈ t, p i ∈ s) : t.inf' H p ∈ s :=
inf'_induction H p w h
#align finset.inf'_mem Finset.inf'_mem
@@ -1030,28 +1030,28 @@ theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
end Inf
@[simp]
-protected theorem sup_apply {C : β → Type _} [∀ b : β, SemilatticeSup (C b)]
+protected theorem sup_apply {C : β → Type*} [∀ 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 :=
comp_sup_eq_sup_comp (fun x : ∀ b : β, C b => x b) (fun _ _ => rfl) rfl
#align finset.sup_apply Finset.sup_apply
@[simp]
-protected theorem inf_apply {C : β → Type _} [∀ b : β, SemilatticeInf (C b)]
+protected theorem inf_apply {C : β → Type*} [∀ 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 :=
Finset.sup_apply (C := fun b => (C b)ᵒᵈ) s f b
#align finset.inf_apply Finset.inf_apply
@[simp]
-protected theorem sup'_apply {C : β → Type _} [∀ b : β, SemilatticeSup (C b)]
+protected theorem sup'_apply {C : β → Type*} [∀ 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 :=
comp_sup'_eq_sup'_comp H (fun x : ∀ b : β, C b => x b) fun _ _ => rfl
#align finset.sup'_apply Finset.sup'_apply
@[simp]
-protected theorem inf'_apply {C : β → Type _} [∀ b : β, SemilatticeInf (C b)]
+protected theorem inf'_apply {C : β → Type*} [∀ 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 :=
Finset.sup'_apply (C := fun b => (C b)ᵒᵈ) H f b
@@ -1810,11 +1810,11 @@ end Finset
section Lattice
-variable {ι' : Sort _} [CompleteLattice α]
+variable {ι' : Sort*} [CompleteLattice α]
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
-`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iSup_eq_iSup_finset'` for a version
-that works for `ι : Sort _`. -/
+`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `iSup_eq_iSup_finset'` for a version
+that works for `ι : Sort*`. -/
theorem iSup_eq_iSup_finset (s : ι → α) : ⨆ i, s i = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
classical
refine le_antisymm ?_ ?_
@@ -1823,23 +1823,23 @@ theorem iSup_eq_iSup_finset (s : ι → α) : ⨆ i, s i = ⨆ t : Finset ι,
#align supr_eq_supr_finset iSup_eq_iSup_finset
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
-`⨆ i ∈ t, s i`. This version works for `ι : Sort _`. See `iSup_eq_iSup_finset` for a version
-that assumes `ι : Type _` but has no `PLift`s. -/
+`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `iSup_eq_iSup_finset` for a version
+that assumes `ι : Type*` but has no `PLift`s. -/
theorem iSup_eq_iSup_finset' (s : ι' → α) :
⨆ i, s i = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
rw [← iSup_eq_iSup_finset, ← Equiv.plift.surjective.iSup_comp]; rfl
#align supr_eq_supr_finset' iSup_eq_iSup_finset'
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
-`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iInf_eq_iInf_finset'` for a version
-that works for `ι : Sort _`. -/
+`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `iInf_eq_iInf_finset'` for a version
+that works for `ι : Sort*`. -/
theorem iInf_eq_iInf_finset (s : ι → α) : ⨅ i, s i = ⨅ (t : Finset ι) (i ∈ t), s i :=
@iSup_eq_iSup_finset αᵒᵈ _ _ _
#align infi_eq_infi_finset iInf_eq_iInf_finset
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
-`⨅ i ∈ t, s i`. This version works for `ι : Sort _`. See `iInf_eq_iInf_finset` for a version
-that assumes `ι : Type _` but has no `PLift`s. -/
+`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `iInf_eq_iInf_finset` for a version
+that assumes `ι : Type*` but has no `PLift`s. -/
theorem iInf_eq_iInf_finset' (s : ι' → α) :
⨅ i, s i = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
@iSup_eq_iSup_finset' αᵒᵈ _ _ _
@@ -1849,33 +1849,33 @@ end Lattice
namespace Set
-variable {ι' : Sort _}
+variable {ι' : Sort*}
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
-of finite subfamilies. This version assumes `ι : Type _`. See also `iUnion_eq_iUnion_finset'` for
-a version that works for `ι : Sort _`. -/
+of finite subfamilies. This version assumes `ι : Type*`. See also `iUnion_eq_iUnion_finset'` for
+a version that works for `ι : Sort*`. -/
theorem iUnion_eq_iUnion_finset (s : ι → Set α) : ⋃ i, s i = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
iSup_eq_iSup_finset s
#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finset
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
-of finite subfamilies. This version works for `ι : Sort _`. See also `iUnion_eq_iUnion_finset` for
-a version that assumes `ι : Type _` but avoids `PLift`s in the right hand side. -/
+of finite subfamilies. This version works for `ι : Sort*`. See also `iUnion_eq_iUnion_finset` for
+a version that assumes `ι : Type*` but avoids `PLift`s in the right hand side. -/
theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
⋃ i, s i = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
iSup_eq_iSup_finset' s
#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
-intersections of finite subfamilies. This version assumes `ι : Type _`. See also
-`iInter_eq_iInter_finset'` for a version that works for `ι : Sort _`. -/
+intersections of finite subfamilies. This version assumes `ι : Type*`. See also
+`iInter_eq_iInter_finset'` for a version that works for `ι : Sort*`. -/
theorem iInter_eq_iInter_finset (s : ι → Set α) : ⋂ i, s i = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
iInf_eq_iInf_finset s
#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finset
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
-intersections of finite subfamilies. This version works for `ι : Sort _`. See also
-`iInter_eq_iInter_finset` for a version that assumes `ι : Type _` but avoids `PLift`s in the right
+intersections of finite subfamilies. This version works for `ι : Sort*`. See also
+`iInter_eq_iInter_finset` for a version that assumes `ι : Type*` but avoids `PLift`s in the right
hand side. -/
theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
⋂ i, s i = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
@@ -1710,9 +1710,7 @@ theorem exists_min_image (s : Finset β) (f : β → α) (h : s.Nonempty) :
end ExistsMaxMin
--- TODO names
-
-theorem is_glb_iff_is_least [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
+theorem isGLB_iff_isLeast [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
IsGLB (s : Set α) i ↔ IsLeast (↑s) i := by
refine' ⟨fun his => _, IsLeast.isGLB⟩
suffices i = min' s hs by
@@ -1720,23 +1718,23 @@ theorem is_glb_iff_is_least [LinearOrder α] (i : α) (s : Finset α) (hs : s.No
exact isLeast_min' s hs
rw [IsGLB, IsGreatest, mem_lowerBounds, mem_upperBounds] at his
exact le_antisymm (his.1 (Finset.min' s hs) (Finset.min'_mem s hs)) (his.2 _ (Finset.min'_le s))
-#align finset.is_glb_iff_is_least Finset.is_glb_iff_is_least
+#align finset.is_glb_iff_is_least Finset.isGLB_iff_isLeast
-theorem is_lub_iff_is_greatest [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
+theorem isLUB_iff_isGreatest [LinearOrder α] (i : α) (s : Finset α) (hs : s.Nonempty) :
IsLUB (s : Set α) i ↔ IsGreatest (↑s) i :=
- @is_glb_iff_is_least αᵒᵈ _ i s hs
-#align finset.is_lub_iff_is_greatest Finset.is_lub_iff_is_greatest
+ @isGLB_iff_isLeast αᵒᵈ _ i s hs
+#align finset.is_lub_iff_is_greatest Finset.isLUB_iff_isGreatest
-theorem is_glb_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsGLB (s : Set α) i)
+theorem isGLB_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsGLB (s : Set α) i)
(hs : s.Nonempty) : i ∈ s := by
rw [← mem_coe]
- exact ((is_glb_iff_is_least i s hs).mp his).1
-#align finset.is_glb_mem Finset.is_glb_mem
+ exact ((isGLB_iff_isLeast i s hs).mp his).1
+#align finset.is_glb_mem Finset.isGLB_mem
-theorem is_lub_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsLUB (s : Set α) i)
+theorem isLUB_mem [LinearOrder α] {i : α} (s : Finset α) (his : IsLUB (s : Set α) i)
(hs : s.Nonempty) : i ∈ s :=
- @is_glb_mem αᵒᵈ _ i s his hs
-#align finset.is_lub_mem Finset.is_lub_mem
+ @isGLB_mem αᵒᵈ _ i s his hs
+#align finset.is_lub_mem Finset.isLUB_mem
end Finset
@@ -1816,16 +1814,16 @@ variable {ι' : Sort _} [CompleteLattice α]
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iSup_eq_iSup_finset'` for a version
-that works for `ι : Sort*`. -/
+that works for `ι : Sort _`. -/
theorem iSup_eq_iSup_finset (s : ι → α) : ⨆ i, s i = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
classical
- refine le_antisymm ?_ ?_
- exact iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl
- exact iSup_le fun t => iSup_le fun b => iSup_le fun _ => le_iSup _ _
+ refine le_antisymm ?_ ?_
+ · exact iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl
+ · exact iSup_le fun t => iSup_le fun b => iSup_le fun _ => le_iSup _ _
#align supr_eq_supr_finset iSup_eq_iSup_finset
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
-`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `iSup_eq_iSup_finset` for a version
+`⨆ i ∈ t, s i`. This version works for `ι : Sort _`. See `iSup_eq_iSup_finset` for a version
that assumes `ι : Type _` but has no `PLift`s. -/
theorem iSup_eq_iSup_finset' (s : ι' → α) :
⨆ i, s i = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
@@ -1834,13 +1832,13 @@ theorem iSup_eq_iSup_finset' (s : ι' → α) :
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iInf_eq_iInf_finset'` for a version
-that works for `ι : Sort*`. -/
+that works for `ι : Sort _`. -/
theorem iInf_eq_iInf_finset (s : ι → α) : ⨅ i, s i = ⨅ (t : Finset ι) (i ∈ t), s i :=
@iSup_eq_iSup_finset αᵒᵈ _ _ _
#align infi_eq_infi_finset iInf_eq_iInf_finset
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
-`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `iInf_eq_iInf_finset` for a version
+`⨅ i ∈ t, s i`. This version works for `ι : Sort _`. See `iInf_eq_iInf_finset` for a version
that assumes `ι : Type _` but has no `PLift`s. -/
theorem iInf_eq_iInf_finset' (s : ι' → α) :
⨅ i, s i = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
@@ -1855,13 +1853,13 @@ variable {ι' : Sort _}
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
of finite subfamilies. This version assumes `ι : Type _`. See also `iUnion_eq_iUnion_finset'` for
-a version that works for `ι : Sort*`. -/
+a version that works for `ι : Sort _`. -/
theorem iUnion_eq_iUnion_finset (s : ι → Set α) : ⋃ i, s i = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
iSup_eq_iSup_finset s
#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finset
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
-of finite subfamilies. This version works for `ι : Sort*`. See also `iUnion_eq_iUnion_finset` for
+of finite subfamilies. This version works for `ι : Sort _`. See also `iUnion_eq_iUnion_finset` for
a version that assumes `ι : Type _` but avoids `PLift`s in the right hand side. -/
theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
⋃ i, s i = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
@@ -1870,13 +1868,13 @@ theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
intersections of finite subfamilies. This version assumes `ι : Type _`. See also
-`iInter_eq_iInter_finset'` for a version that works for `ι : Sort*`. -/
+`iInter_eq_iInter_finset'` for a version that works for `ι : Sort _`. -/
theorem iInter_eq_iInter_finset (s : ι → Set α) : ⋂ i, s i = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
iInf_eq_iInf_finset s
#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finset
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
-intersections of finite subfamilies. This version works for `ι : Sort*`. See also
+intersections of finite subfamilies. This version works for `ι : Sort _`. See also
`iInter_eq_iInter_finset` for a version that assumes `ι : Type _` but avoids `PLift`s in the right
hand side. -/
theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
Adds four Finset
lemmas:
Nonempty.inl
and Nonempty.inr
- unions with Nonempty sets are Nonemptysup'_mono
and inf'_mono
- analogues of sup_mono
and inf_mono
.Co-authored-by: Oliver Nash <github@olivernash.org>
@@ -884,6 +884,10 @@ theorem sup'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f)
rfl
#align finset.sup'_map Finset.sup'_map
+theorem sup'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonempty):
+ s₁.sup' h₁ f ≤ s₂.sup' (h₁.mono h) f :=
+ Finset.sup'_le h₁ _ (fun _ hb => le_sup' _ (h hb))
+
end Sup'
section Inf'
@@ -980,6 +984,10 @@ theorem inf'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f)
sup'_map (α := αᵒᵈ) _ hs hs'
#align finset.inf'_map Finset.inf'_map
+theorem inf'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonempty) :
+ s₂.inf' (h₁.mono h) f ≤ s₁.inf' h₁ f :=
+ Finset.le_inf' h₁ _ (fun _ hb => inf'_le _ (h hb))
+
end Inf'
section Sup
@@ -2,11 +2,6 @@
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 1d29de43a5ba4662dd33b5cfeecfc2a27a5a8a29
-! 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
@@ -16,6 +11,8 @@ import Mathlib.Data.Multiset.Lattice
import Mathlib.Order.CompleteLattice
import Mathlib.Order.Hom.Lattice
+#align_import data.finset.lattice from "leanprover-community/mathlib"@"1d29de43a5ba4662dd33b5cfeecfc2a27a5a8a29"
+
/-!
# Lattice operations on finsets
-/
finset.uIcc
on concrete structures (#5946)
Match https://github.com/leanprover-community/mathlib/pull/18838
Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -4,7 +4,7 @@ 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
+! leanprover-community/mathlib commit 1d29de43a5ba4662dd33b5cfeecfc2a27a5a8a29
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1812,7 +1812,7 @@ variable {ι' : Sort _} [CompleteLattice α]
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iSup_eq_iSup_finset'` for a version
that works for `ι : Sort*`. -/
-theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
+theorem iSup_eq_iSup_finset (s : ι → α) : ⨆ i, s i = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
classical
refine le_antisymm ?_ ?_
exact iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl
@@ -1823,14 +1823,14 @@ theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι,
`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `iSup_eq_iSup_finset` for a version
that assumes `ι : Type _` but has no `PLift`s. -/
theorem iSup_eq_iSup_finset' (s : ι' → α) :
- (⨆ i, s i) = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
+ ⨆ i, s i = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
rw [← iSup_eq_iSup_finset, ← Equiv.plift.surjective.iSup_comp]; rfl
#align supr_eq_supr_finset' iSup_eq_iSup_finset'
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iInf_eq_iInf_finset'` for a version
that works for `ι : Sort*`. -/
-theorem iInf_eq_iInf_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι) (i ∈ t), s i :=
+theorem iInf_eq_iInf_finset (s : ι → α) : ⨅ i, s i = ⨅ (t : Finset ι) (i ∈ t), s i :=
@iSup_eq_iSup_finset αᵒᵈ _ _ _
#align infi_eq_infi_finset iInf_eq_iInf_finset
@@ -1838,7 +1838,7 @@ theorem iInf_eq_iInf_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι)
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `iInf_eq_iInf_finset` for a version
that assumes `ι : Type _` but has no `PLift`s. -/
theorem iInf_eq_iInf_finset' (s : ι' → α) :
- (⨅ i, s i) = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
+ ⨅ i, s i = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
@iSup_eq_iSup_finset' αᵒᵈ _ _ _
#align infi_eq_infi_finset' iInf_eq_iInf_finset'
@@ -1851,7 +1851,7 @@ variable {ι' : Sort _}
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
of finite subfamilies. This version assumes `ι : Type _`. See also `iUnion_eq_iUnion_finset'` for
a version that works for `ι : Sort*`. -/
-theorem iUnion_eq_iUnion_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
+theorem iUnion_eq_iUnion_finset (s : ι → Set α) : ⋃ i, s i = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
iSup_eq_iSup_finset s
#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finset
@@ -1859,14 +1859,14 @@ theorem iUnion_eq_iUnion_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Fin
of finite subfamilies. This version works for `ι : Sort*`. See also `iUnion_eq_iUnion_finset` for
a version that assumes `ι : Type _` but avoids `PLift`s in the right hand side. -/
theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
- (⋃ i, s i) = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
+ ⋃ i, s i = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
iSup_eq_iSup_finset' s
#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
intersections of finite subfamilies. This version assumes `ι : Type _`. See also
`iInter_eq_iInter_finset'` for a version that works for `ι : Sort*`. -/
-theorem iInter_eq_iInter_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
+theorem iInter_eq_iInter_finset (s : ι → Set α) : ⋂ i, s i = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
iInf_eq_iInf_finset s
#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finset
@@ -1875,7 +1875,7 @@ intersections of finite subfamilies. This version works for `ι : Sort*`. See al
`iInter_eq_iInter_finset` for a version that assumes `ι : Type _` but avoids `PLift`s in the right
hand side. -/
theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
- (⋂ i, s i) = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
+ ⋂ i, s i = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
iInf_eq_iInf_finset' s
#align set.Inter_eq_Inter_finset' Set.iInter_eq_iInter_finset'
@@ -1919,111 +1919,111 @@ open Function
section Lattice
-theorem iSup_coe [SupSet β] (f : α → β) (s : Finset α) : (⨆ x ∈ (↑s : Set α), f x) = ⨆ x ∈ s, f x :=
+theorem iSup_coe [SupSet β] (f : α → β) (s : Finset α) : ⨆ x ∈ (↑s : Set α), f x = ⨆ x ∈ s, f x :=
rfl
#align finset.supr_coe Finset.iSup_coe
-theorem iInf_coe [InfSet β] (f : α → β) (s : Finset α) : (⨅ x ∈ (↑s : Set α), f x) = ⨅ x ∈ s, f x :=
+theorem iInf_coe [InfSet β] (f : α → β) (s : Finset α) : ⨅ x ∈ (↑s : Set α), f x = ⨅ x ∈ s, f x :=
rfl
#align finset.infi_coe Finset.iInf_coe
variable [CompleteLattice β]
-theorem iSup_singleton (a : α) (s : α → β) : (⨆ x ∈ ({a} : Finset α), s x) = s a := by simp
+theorem iSup_singleton (a : α) (s : α → β) : ⨆ x ∈ ({a} : Finset α), s x = s a := by simp
#align finset.supr_singleton Finset.iSup_singleton
-theorem iInf_singleton (a : α) (s : α → β) : (⨅ x ∈ ({a} : Finset α), s x) = s a := by simp
+theorem iInf_singleton (a : α) (s : α → β) : ⨅ x ∈ ({a} : Finset α), s x = s a := by simp
#align finset.infi_singleton Finset.iInf_singleton
-theorem iSup_option_toFinset (o : Option α) (f : α → β) : (⨆ x ∈ o.toFinset, f x) = ⨆ x ∈ o, f x :=
+theorem iSup_option_toFinset (o : Option α) (f : α → β) : ⨆ x ∈ o.toFinset, f x = ⨆ x ∈ o, f x :=
by simp
#align finset.supr_option_to_finset Finset.iSup_option_toFinset
-theorem iInf_option_toFinset (o : Option α) (f : α → β) : (⨅ x ∈ o.toFinset, f x) = ⨅ x ∈ o, f x :=
+theorem iInf_option_toFinset (o : Option α) (f : α → β) : ⨅ x ∈ o.toFinset, f x = ⨅ x ∈ o, f x :=
@iSup_option_toFinset _ βᵒᵈ _ _ _
#align finset.infi_option_to_finset Finset.iInf_option_toFinset
variable [DecidableEq α]
theorem iSup_union {f : α → β} {s t : Finset α} :
- (⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [iSup_or, iSup_sup_eq]
+ ⨆ x ∈ s ∪ t, f x = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [iSup_or, iSup_sup_eq]
#align finset.supr_union Finset.iSup_union
theorem iInf_union {f : α → β} {s t : Finset α} :
- (⨅ x ∈ s ∪ t, f x) = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
+ ⨅ x ∈ s ∪ t, f x = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
@iSup_union α βᵒᵈ _ _ _ _ _
#align finset.infi_union Finset.iInf_union
theorem iSup_insert (a : α) (s : Finset α) (t : α → β) :
- (⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x := by
+ ⨆ x ∈ insert a s, t x = t a ⊔ ⨆ x ∈ s, t x := by
rw [insert_eq]
simp only [iSup_union, Finset.iSup_singleton]
#align finset.supr_insert Finset.iSup_insert
theorem iInf_insert (a : α) (s : Finset α) (t : α → β) :
- (⨅ x ∈ insert a s, t x) = t a ⊓ ⨅ x ∈ s, t x :=
+ ⨅ x ∈ insert a s, t x = t a ⊓ ⨅ x ∈ s, t x :=
@iSup_insert α βᵒᵈ _ _ _ _ _
#align finset.infi_insert Finset.iInf_insert
theorem iSup_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
- (⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← iSup_coe, coe_image, iSup_image, iSup_coe]
+ ⨆ x ∈ s.image f, g x = ⨆ y ∈ s, g (f y) := by rw [← iSup_coe, coe_image, iSup_image, iSup_coe]
#align finset.supr_finset_image Finset.iSup_finset_image
theorem iInf_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
- (⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← iInf_coe, coe_image, iInf_image, iInf_coe]
+ ⨅ x ∈ s.image f, g x = ⨅ y ∈ s, g (f y) := by rw [← iInf_coe, coe_image, iInf_image, iInf_coe]
#align finset.infi_finset_image Finset.iInf_finset_image
theorem iSup_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
- (⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i := by
+ ⨆ i ∈ insert x t, Function.update f x s i = s ⊔ ⨆ i ∈ t, f i := by
simp only [Finset.iSup_insert, update_same]
rcongr (i hi); apply update_noteq; rintro rfl; exact hx hi
#align finset.supr_insert_update Finset.iSup_insert_update
theorem iInf_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
- (⨅ i ∈ insert x t, update f x s i) = s ⊓ ⨅ i ∈ t, f i :=
+ ⨅ i ∈ insert x t, update f x s i = s ⊓ ⨅ i ∈ t, f i :=
@iSup_insert_update α βᵒᵈ _ _ _ _ f _ hx
#align finset.infi_insert_update Finset.iInf_insert_update
theorem iSup_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
- (⨆ y ∈ s.biUnion t, f y) = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@iSup_comm _ α, iSup_and]
+ ⨆ y ∈ s.biUnion t, f y = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@iSup_comm _ α, iSup_and]
#align finset.supr_bUnion Finset.iSup_biUnion
theorem iInf_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
- (⨅ y ∈ s.biUnion t, f y) = ⨅ (x ∈ s) (y ∈ t x), f y :=
+ ⨅ y ∈ s.biUnion t, f y = ⨅ (x ∈ s) (y ∈ t x), f y :=
@iSup_biUnion _ βᵒᵈ _ _ _ _ _ _
#align finset.infi_bUnion Finset.iInf_biUnion
end Lattice
-theorem set_biUnion_coe (s : Finset α) (t : α → Set β) : (⋃ x ∈ (↑s : Set α), t x) = ⋃ x ∈ s, t x :=
+theorem set_biUnion_coe (s : Finset α) (t : α → Set β) : ⋃ x ∈ (↑s : Set α), t x = ⋃ x ∈ s, t x :=
rfl
#align finset.set_bUnion_coe Finset.set_biUnion_coe
-theorem set_biInter_coe (s : Finset α) (t : α → Set β) : (⋂ x ∈ (↑s : Set α), t x) = ⋂ x ∈ s, t x :=
+theorem set_biInter_coe (s : Finset α) (t : α → Set β) : ⋂ x ∈ (↑s : Set α), t x = ⋂ x ∈ s, t x :=
rfl
#align finset.set_bInter_coe Finset.set_biInter_coe
-theorem set_biUnion_singleton (a : α) (s : α → Set β) : (⋃ x ∈ ({a} : Finset α), s x) = s a :=
+theorem set_biUnion_singleton (a : α) (s : α → Set β) : ⋃ x ∈ ({a} : Finset α), s x = s a :=
iSup_singleton a s
#align finset.set_bUnion_singleton Finset.set_biUnion_singleton
-theorem set_biInter_singleton (a : α) (s : α → Set β) : (⋂ x ∈ ({a} : Finset α), s x) = s a :=
+theorem set_biInter_singleton (a : α) (s : α → Set β) : ⋂ x ∈ ({a} : Finset α), s x = s a :=
iInf_singleton a s
#align finset.set_bInter_singleton Finset.set_biInter_singleton
@[simp]
theorem set_biUnion_preimage_singleton (f : α → β) (s : Finset β) :
- (⋃ y ∈ s, f ⁻¹' {y}) = f ⁻¹' s :=
+ ⋃ y ∈ s, f ⁻¹' {y} = f ⁻¹' s :=
Set.biUnion_preimage_singleton f s
#align finset.set_bUnion_preimage_singleton Finset.set_biUnion_preimage_singleton
theorem set_biUnion_option_toFinset (o : Option α) (f : α → Set β) :
- (⋃ x ∈ o.toFinset, f x) = ⋃ x ∈ o, f x :=
+ ⋃ x ∈ o.toFinset, f x = ⋃ x ∈ o, f x :=
iSup_option_toFinset o f
#align finset.set_bUnion_option_to_finset Finset.set_biUnion_option_toFinset
theorem set_biInter_option_toFinset (o : Option α) (f : α → Set β) :
- (⋂ x ∈ o.toFinset, f x) = ⋂ x ∈ o, f x :=
+ ⋂ x ∈ o.toFinset, f x = ⋂ x ∈ o, f x :=
iInf_option_toFinset o f
#align finset.set_bInter_option_to_finset Finset.set_biInter_option_toFinset
@@ -2035,52 +2035,52 @@ theorem subset_set_biUnion_of_mem {s : Finset α} {f : α → Set β} {x : α} (
variable [DecidableEq α]
theorem set_biUnion_union (s t : Finset α) (u : α → Set β) :
- (⋃ x ∈ s ∪ t, u x) = (⋃ x ∈ s, u x) ∪ ⋃ x ∈ t, u x :=
+ ⋃ x ∈ s ∪ t, u x = (⋃ x ∈ s, u x) ∪ ⋃ x ∈ t, u x :=
iSup_union
#align finset.set_bUnion_union Finset.set_biUnion_union
theorem set_biInter_inter (s t : Finset α) (u : α → Set β) :
- (⋂ x ∈ s ∪ t, u x) = (⋂ x ∈ s, u x) ∩ ⋂ x ∈ t, u x :=
+ ⋂ x ∈ s ∪ t, u x = (⋂ x ∈ s, u x) ∩ ⋂ x ∈ t, u x :=
iInf_union
#align finset.set_bInter_inter Finset.set_biInter_inter
theorem set_biUnion_insert (a : α) (s : Finset α) (t : α → Set β) :
- (⋃ x ∈ insert a s, t x) = t a ∪ ⋃ x ∈ s, t x :=
+ ⋃ x ∈ insert a s, t x = t a ∪ ⋃ x ∈ s, t x :=
iSup_insert a s t
#align finset.set_bUnion_insert Finset.set_biUnion_insert
theorem set_biInter_insert (a : α) (s : Finset α) (t : α → Set β) :
- (⋂ x ∈ insert a s, t x) = t a ∩ ⋂ x ∈ s, t x :=
+ ⋂ x ∈ insert a s, t x = t a ∩ ⋂ x ∈ s, t x :=
iInf_insert a s t
#align finset.set_bInter_insert Finset.set_biInter_insert
theorem set_biUnion_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
- (⋃ x ∈ s.image f, g x) = ⋃ y ∈ s, g (f y) :=
+ ⋃ x ∈ s.image f, g x = ⋃ y ∈ s, g (f y) :=
iSup_finset_image
#align finset.set_bUnion_finset_image Finset.set_biUnion_finset_image
theorem set_biInter_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
- (⋂ x ∈ s.image f, g x) = ⋂ y ∈ s, g (f y) :=
+ ⋂ x ∈ s.image f, g x = ⋂ y ∈ s, g (f y) :=
iInf_finset_image
#align finset.set_bInter_finset_image Finset.set_biInter_finset_image
theorem set_biUnion_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
- (⋃ i ∈ insert x t, @update _ _ _ f x s i) = s ∪ ⋃ i ∈ t, f i :=
+ ⋃ i ∈ insert x t, @update _ _ _ f x s i = s ∪ ⋃ i ∈ t, f i :=
iSup_insert_update f hx
#align finset.set_bUnion_insert_update Finset.set_biUnion_insert_update
theorem set_biInter_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
- (⋂ i ∈ insert x t, @update _ _ _ f x s i) = s ∩ ⋂ i ∈ t, f i :=
+ ⋂ i ∈ insert x t, @update _ _ _ f x s i = s ∩ ⋂ i ∈ t, f i :=
iInf_insert_update f hx
#align finset.set_bInter_insert_update Finset.set_biInter_insert_update
theorem set_biUnion_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
- (⋃ y ∈ s.biUnion t, f y) = ⋃ (x ∈ s) (y ∈ t x), f y :=
+ ⋃ y ∈ s.biUnion t, f y = ⋃ (x ∈ s) (y ∈ t x), f y :=
iSup_biUnion s t f
#align finset.set_bUnion_bUnion Finset.set_biUnion_biUnion
theorem set_biInter_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
- (⋂ y ∈ s.biUnion t, f y) = ⋂ (x ∈ s) (y ∈ t x), f y :=
+ ⋂ y ∈ s.biUnion t, f y = ⋂ (x ∈ s) (y ∈ t x), f y :=
iInf_biUnion s t f
#align finset.set_bInter_bUnion Finset.set_biInter_biUnion
@@ -651,12 +651,12 @@ theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
#align finset.sup_himp_left Finset.sup_himp_left
@[simp]
-protected theorem compl_sup (s : Finset ι) (f : ι → α) : s.sup fᶜ = s.inf fun i => f iᶜ :=
+protected theorem compl_sup (s : Finset ι) (f : ι → α) : (s.sup f)ᶜ = s.inf fun i => (f i)ᶜ :=
map_finset_sup (OrderIso.compl α) _ _
#align finset.compl_sup Finset.compl_sup
@[simp]
-protected theorem compl_inf (s : Finset ι) (f : ι → α) : s.inf fᶜ = s.sup fun i => f iᶜ :=
+protected theorem compl_inf (s : Finset ι) (f : ι → α) : (s.inf f)ᶜ = s.sup fun i => (f i)ᶜ :=
map_finset_inf (OrderIso.compl α) _ _
#align finset.compl_inf Finset.compl_inf
SProd
to implement overloaded notation · ×ˢ ·
(#4200)
Currently, the following notations are changed from · ×ˢ ·
because Lean 4 can't deal with ambiguous notations.
| Definition | Notation |
| :
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>
@@ -169,7 +169,7 @@ theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x)
/-- See also `Finset.product_biUnion`. -/
theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
- (s ×ᶠ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ := by
+ (s ×ˢ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ := by
simp only [le_antisymm_iff, Finset.sup_le_iff, mem_product, and_imp, Prod.forall]
-- Porting note: was one expression.
refine ⟨fun b c hb hc => ?_, fun b hb c hc => ?_⟩
@@ -179,7 +179,7 @@ theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
#align finset.sup_product_left Finset.sup_product_left
theorem sup_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α) :
- (s ×ᶠ t).sup f = t.sup fun i' => s.sup fun i => f ⟨i, i'⟩ := by
+ (s ×ˢ t).sup f = t.sup fun i' => s.sup fun i => f ⟨i, i'⟩ := by
rw [sup_product_left, Finset.sup_comm]
#align finset.sup_product_right Finset.sup_product_right
@@ -428,12 +428,12 @@ protected theorem inf_comm (s : Finset β) (t : Finset γ) (f : β → γ → α
#align finset.inf_comm Finset.inf_comm
theorem inf_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
- (s ×ᶠ t).inf f = s.inf fun i => t.inf fun i' => f ⟨i, i'⟩ :=
+ (s ×ˢ t).inf f = s.inf fun i => t.inf fun i' => f ⟨i, i'⟩ :=
@sup_product_left αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_product_left Finset.inf_product_left
theorem inf_product_right (s : Finset β) (t : Finset γ) (f : β × γ → α) :
- (s ×ᶠ t).inf f = t.inf fun i' => s.inf fun i => f ⟨i, i'⟩ :=
+ (s ×ˢ t).inf f = t.inf fun i' => s.inf fun i => f ⟨i, i'⟩ :=
@sup_product_right αᵒᵈ _ _ _ _ _ _ _
#align finset.inf_product_right Finset.inf_product_right
@@ -533,7 +533,7 @@ protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i
#align finset.disjoint_sup_left Finset.disjoint_sup_left
theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
- s.sup f ⊓ t.sup g = (s ×ᶠ t).sup fun i => f i.1 ⊓ g i.2 := by
+ s.sup f ⊓ t.sup g = (s ×ˢ t).sup fun i => f i.1 ⊓ g i.2 := by
simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left, sup_product_left]
#align finset.sup_inf_sup Finset.sup_inf_sup
@@ -564,7 +564,7 @@ protected theorem codisjoint_inf_left :
#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
- s.inf f ⊔ t.inf g = (s ×ᶠ t).inf fun i => f i.1 ⊔ g i.2 :=
+ s.inf f ⊔ t.inf g = (s ×ˢ t).inf fun i => f i.1 ⊔ g i.2 :=
@sup_inf_sup αᵒᵈ _ _ _ _ _ _ _ _
#align finset.inf_sup_inf Finset.inf_sup_inf
@@ -574,7 +574,7 @@ section BoundedOrder
variable [BoundedOrder α] [DecidableEq ι]
---TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ᶠ s.pi t` from this proof
+--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ˢ s.pi t` from this proof
theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
(s.inf fun i => (t i).sup (f i)) =
(s.pi t).sup fun g => s.attach.inf fun i => f _ <| g _ i.2 := by
fix-comments.py
on all files.@@ -1821,7 +1821,7 @@ theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι,
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `iSup_eq_iSup_finset` for a version
-that assumes `ι : Type _` but has no `plift`s. -/
+that assumes `ι : Type _` but has no `PLift`s. -/
theorem iSup_eq_iSup_finset' (s : ι' → α) :
(⨆ i, s i) = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
rw [← iSup_eq_iSup_finset, ← Equiv.plift.surjective.iSup_comp]; rfl
@@ -1836,7 +1836,7 @@ theorem iInf_eq_iInf_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι)
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `iInf_eq_iInf_finset` for a version
-that assumes `ι : Type _` but has no `plift`s. -/
+that assumes `ι : Type _` but has no `PLift`s. -/
theorem iInf_eq_iInf_finset' (s : ι' → α) :
(⨅ i, s i) = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
@iSup_eq_iSup_finset' αᵒᵈ _ _ _
@@ -1857,7 +1857,7 @@ theorem iUnion_eq_iUnion_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Fin
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
of finite subfamilies. This version works for `ι : Sort*`. See also `iUnion_eq_iUnion_finset` for
-a version that assumes `ι : Type _` but avoids `plift`s in the right hand side. -/
+a version that assumes `ι : Type _` but avoids `PLift`s in the right hand side. -/
theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
(⋃ i, s i) = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
iSup_eq_iSup_finset' s
@@ -1872,7 +1872,7 @@ theorem iInter_eq_iInter_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Fin
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
intersections of finite subfamilies. This version works for `ι : Sort*`. See also
-`iInter_eq_iInter_finset` for a version that assumes `ι : Type _` but avoids `plift`s in the right
+`iInter_eq_iInter_finset` for a version that assumes `ι : Type _` but avoids `PLift`s in the right
hand side. -/
theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
(⋂ i, s i) = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
finset
distributivity lemmas (#3937)
Match https://github.com/leanprover-community/mathlib/pull/18611
@@ -4,12 +4,13 @@ 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 9d684a893c52e1d6692a504a118bfccbae04feeb
+! 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
@@ -20,7 +21,7 @@ import Mathlib.Order.Hom.Lattice
-/
-variable {F α β γ ι : Type _}
+variable {F α β γ ι κ : Type _}
namespace Finset
@@ -274,7 +275,7 @@ theorem sup_mem (s : Set α) (w₁ : ⊥ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y
#align finset.sup_mem Finset.sup_mem
@[simp]
-theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
+protected theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s ∈ S, f s = ⊥ := by
classical induction' S using Finset.induction with a S _ hi <;> simp [*]
#align finset.sup_eq_bot_iff Finset.sup_eq_bot_iff
@@ -472,7 +473,7 @@ theorem inf_mem (s : Set α) (w₁ : ⊤ ∈ s) (w₂ : ∀ (x) (_ : x ∈ s) (y
#align finset.inf_mem Finset.inf_mem
@[simp]
-theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
+protected theorem inf_eq_top_iff (f : β → α) (S : Finset β) : S.inf f = ⊤ ↔ ∀ s ∈ S, f s = ⊤ :=
@Finset.sup_eq_bot_iff αᵒᵈ _ _ _ _ _
#align finset.inf_eq_top_iff Finset.inf_eq_top_iff
@@ -508,7 +509,7 @@ variable [DistribLattice α]
section OrderBot
-variable [OrderBot α] {s : Finset β} {f : β → α} {a : α}
+variable [OrderBot α] {s : Finset ι} {t : Finset κ} {f : ι → α} {g : κ → α} {a : α}
theorem sup_inf_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊓ s.sup f = s.sup fun i => a ⊓ f i := by
@@ -523,19 +524,24 @@ theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
simp_rw [_root_.inf_comm]
#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_right
-protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
- simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
+protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ ⦃i⦄, i ∈ s → Disjoint a (f i) := by
+ simp only [disjoint_iff, sup_inf_distrib_left, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
-protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
- simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
+protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ ⦃i⦄, i ∈ s → Disjoint (f i) a := by
+ simp only [disjoint_iff, sup_inf_distrib_right, Finset.sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
+theorem sup_inf_sup (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
+ s.sup f ⊓ t.sup g = (s ×ᶠ t).sup fun i => f i.1 ⊓ g i.2 := by
+ simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left, sup_product_left]
+#align finset.sup_inf_sup Finset.sup_inf_sup
+
end OrderBot
section OrderTop
-variable [OrderTop α]
+variable [OrderTop α] {f : ι → α} {g : κ → α} {s : Finset ι} {t : Finset κ} {a : α}
theorem inf_sup_distrib_left (s : Finset ι) (f : ι → α) (a : α) :
a ⊔ s.inf f = s.inf fun i => a ⊔ f i :=
@@ -547,8 +553,61 @@ theorem inf_sup_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
@sup_inf_distrib_right αᵒᵈ _ _ _ _ _ _
#align finset.inf_sup_distrib_right Finset.inf_sup_distrib_right
+protected theorem codisjoint_inf_right :
+ Codisjoint a (s.inf f) ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint a (f i) :=
+ @Finset.disjoint_sup_right αᵒᵈ _ _ _ _ _ _
+#align finset.codisjoint_inf_right Finset.codisjoint_inf_right
+
+protected theorem codisjoint_inf_left :
+ Codisjoint (s.inf f) a ↔ ∀ ⦃i⦄, i ∈ s → Codisjoint (f i) a :=
+ @Finset.disjoint_sup_left αᵒᵈ _ _ _ _ _ _
+#align finset.codisjoint_inf_left Finset.codisjoint_inf_left
+
+theorem inf_sup_inf (s : Finset ι) (t : Finset κ) (f : ι → α) (g : κ → α) :
+ s.inf f ⊔ t.inf g = (s ×ᶠ t).inf fun i => f i.1 ⊔ g i.2 :=
+ @sup_inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.inf_sup_inf Finset.inf_sup_inf
+
end OrderTop
+section BoundedOrder
+
+variable [BoundedOrder α] [DecidableEq ι]
+
+--TODO: Extract out the obvious isomorphism `(insert i s).pi t ≃ t i ×ᶠ s.pi t` from this proof
+theorem inf_sup {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+ (s.inf fun i => (t i).sup (f i)) =
+ (s.pi t).sup fun g => s.attach.inf fun i => f _ <| g _ i.2 := by
+ induction' s using Finset.induction with i s hi ih
+ · simp
+ rw [inf_insert, ih, attach_insert, sup_inf_sup]
+ refine' eq_of_forall_ge_iff fun c => _
+ simp only [Finset.sup_le_iff, mem_product, mem_pi, and_imp, Prod.forall,
+ inf_insert, inf_image]
+ refine'
+ ⟨fun h g hg =>
+ h (g i <| mem_insert_self _ _) (fun j hj => g j <| mem_insert_of_mem hj)
+ (hg _ <| mem_insert_self _ _) fun j hj => hg _ <| mem_insert_of_mem hj,
+ fun h a g ha hg => _⟩
+ -- TODO: This `have` must be named to prevent it being shadowed by the internal `this` in `simpa`
+ have aux : ∀ j : { x // x ∈ s }, ↑j ≠ i := fun j : s => ne_of_mem_of_not_mem j.2 hi
+ -- porting note: `simpa` doesn't support placeholders in proof terms
+ have := h (fun j hj => if hji : j = i then cast (congr_arg κ hji.symm) a
+ else g _ <| mem_of_mem_insert_of_ne hj hji) (fun j hj => ?_)
+ simpa only [cast_eq, dif_pos, Function.comp, Subtype.coe_mk, dif_neg, aux] using this
+ rw [mem_insert] at hj
+ obtain (rfl | hj) := hj
+ · simpa
+ · simpa [ne_of_mem_of_not_mem hj hi] using hg _ _
+#align finset.inf_sup Finset.inf_sup
+
+theorem sup_inf {κ : ι → Type _} (s : Finset ι) (t : ∀ i, Finset (κ i)) (f : ∀ i, κ i → α) :
+ (s.sup fun i => (t i).inf (f i)) = (s.pi t).inf fun g => s.attach.sup fun i => f _ <| g _ i.2 :=
+ @inf_sup αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.sup_inf Finset.sup_inf
+
+end BoundedOrder
+
end DistribLattice
section BooleanAlgebra
@@ -576,6 +635,31 @@ theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
· rw [inf_cons, inf_cons, h, inf_sdiff]
#align finset.inf_sdiff_right Finset.inf_sdiff_right
+theorem inf_himp_right (s : Finset ι) (f : ι → α) (a : α) :
+ (s.inf fun b => f b ⇨ a) = s.sup f ⇨ a :=
+ @sup_sdiff_left αᵒᵈ _ _ _ _ _
+#align finset.inf_himp_right Finset.inf_himp_right
+
+theorem sup_himp_right (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.sup fun b => f b ⇨ a) = s.inf f ⇨ a :=
+ @inf_sdiff_left αᵒᵈ _ _ _ hs _ _
+#align finset.sup_himp_right Finset.sup_himp_right
+
+theorem sup_himp_left (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.sup fun b => a ⇨ f b) = a ⇨ s.sup f :=
+ @inf_sdiff_right αᵒᵈ _ _ _ hs _ _
+#align finset.sup_himp_left Finset.sup_himp_left
+
+@[simp]
+protected theorem compl_sup (s : Finset ι) (f : ι → α) : s.sup fᶜ = s.inf fun i => f iᶜ :=
+ map_finset_sup (OrderIso.compl α) _ _
+#align finset.compl_sup Finset.compl_sup
+
+@[simp]
+protected theorem compl_inf (s : Finset ι) (f : ι → α) : s.inf fᶜ = s.sup fun i => f iᶜ :=
+ map_finset_inf (OrderIso.compl α) _ _
+#align finset.compl_inf Finset.compl_inf
+
end BooleanAlgebra
section LinearOrder
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -125,10 +125,10 @@ theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f :=
#align finset.le_sup_of_le Finset.le_sup_of_le
@[simp]
-theorem sup_bunionᵢ [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
- (s.bunionᵢ t).sup f = s.sup fun x => (t x).sup f :=
+theorem sup_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
+ (s.biUnion t).sup f = s.sup fun x => (t x).sup f :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
-#align finset.sup_bUnion Finset.sup_bunionᵢ
+#align finset.sup_bUnion Finset.sup_biUnion
theorem sup_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.sup fun _ => c) = c :=
eq_of_forall_ge_iff (fun _ => Finset.sup_le_iff.trans h.forall_const)
@@ -166,7 +166,7 @@ theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x)
(s.attach.sup_map (Function.Embedding.subtype _) f).symm.trans <| congr_arg _ attach_map_val
#align finset.sup_attach Finset.sup_attach
-/-- See also `Finset.product_bunionᵢ`. -/
+/-- See also `Finset.product_biUnion`. -/
theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ᶠ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ := by
simp only [le_antisymm_iff, Finset.sup_le_iff, mem_product, and_imp, Prod.forall]
@@ -280,29 +280,29 @@ theorem sup_eq_bot_iff (f : β → α) (S : Finset β) : S.sup f = ⊥ ↔ ∀ s
end Sup
-theorem sup_eq_supᵢ [CompleteLattice β] (s : Finset α) (f : α → β) : s.sup f = ⨆ a ∈ s, f a :=
+theorem sup_eq_iSup [CompleteLattice β] (s : Finset α) (f : α → β) : s.sup f = ⨆ a ∈ s, f a :=
le_antisymm
- (Finset.sup_le (fun a ha => le_supᵢ_of_le a <| le_supᵢ (fun _ => f a) ha))
- (supᵢ_le fun _ => supᵢ_le fun ha => le_sup ha)
-#align finset.sup_eq_supr Finset.sup_eq_supᵢ
+ (Finset.sup_le (fun a ha => le_iSup_of_le a <| le_iSup (fun _ => f a) ha))
+ (iSup_le fun _ => iSup_le fun ha => le_sup ha)
+#align finset.sup_eq_supr Finset.sup_eq_iSup
-theorem sup_id_eq_supₛ [CompleteLattice α] (s : Finset α) : s.sup id = supₛ s := by
- simp [supₛ_eq_supᵢ, sup_eq_supᵢ]
-#align finset.sup_id_eq_Sup Finset.sup_id_eq_supₛ
+theorem sup_id_eq_sSup [CompleteLattice α] (s : Finset α) : s.sup id = sSup s := by
+ simp [sSup_eq_iSup, sup_eq_iSup]
+#align finset.sup_id_eq_Sup Finset.sup_id_eq_sSup
-theorem sup_id_set_eq_unionₛ (s : Finset (Set α)) : s.sup id = ⋃₀ ↑s :=
- sup_id_eq_supₛ _
-#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_unionₛ
+theorem sup_id_set_eq_sUnion (s : Finset (Set α)) : s.sup id = ⋃₀ ↑s :=
+ sup_id_eq_sSup _
+#align finset.sup_id_set_eq_sUnion Finset.sup_id_set_eq_sUnion
@[simp]
-theorem sup_set_eq_bunionᵢ (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x ∈ s, f x :=
- sup_eq_supᵢ _ _
-#align finset.sup_set_eq_bUnion Finset.sup_set_eq_bunionᵢ
+theorem sup_set_eq_biUnion (s : Finset α) (f : α → Set β) : s.sup f = ⋃ x ∈ s, f x :=
+ sup_eq_iSup _ _
+#align finset.sup_set_eq_bUnion Finset.sup_set_eq_biUnion
-theorem sup_eq_supₛ_image [CompleteLattice β] (s : Finset α) (f : α → β) :
- s.sup f = supₛ (f '' s) :=
- by classical rw [← Finset.coe_image, ← sup_id_eq_supₛ, sup_image, Function.comp.left_id]
-#align finset.sup_eq_Sup_image Finset.sup_eq_supₛ_image
+theorem sup_eq_sSup_image [CompleteLattice β] (s : Finset α) (f : α → β) :
+ s.sup f = sSup (f '' s) :=
+ by classical rw [← Finset.coe_image, ← sup_id_eq_sSup, sup_image, Function.comp.left_id]
+#align finset.sup_eq_Sup_image Finset.sup_eq_sSup_image
/-! ### inf -/
@@ -375,10 +375,10 @@ theorem _root_.map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass
#align map_finset_inf map_finset_inf
@[simp]
-theorem inf_bunionᵢ [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
- (s.bunionᵢ t).inf f = s.inf fun x => (t x).inf f :=
- @sup_bunionᵢ αᵒᵈ _ _ _ _ _ _ _ _
-#align finset.inf_bUnion Finset.inf_bunionᵢ
+theorem inf_biUnion [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
+ (s.biUnion t).inf f = s.inf fun x => (t x).inf f :=
+ @sup_biUnion αᵒᵈ _ _ _ _ _ _ _ _
+#align finset.inf_bUnion Finset.inf_biUnion
theorem inf_const {s : Finset β} (h : s.Nonempty) (c : α) : (s.inf fun _ => c) = c :=
@sup_const αᵒᵈ _ _ _ _ h _
@@ -654,27 +654,27 @@ end OrderTop
end LinearOrder
-theorem inf_eq_infᵢ [CompleteLattice β] (s : Finset α) (f : α → β) : s.inf f = ⨅ a ∈ s, f a :=
- @sup_eq_supᵢ _ βᵒᵈ _ _ _
-#align finset.inf_eq_infi Finset.inf_eq_infᵢ
+theorem inf_eq_iInf [CompleteLattice β] (s : Finset α) (f : α → β) : s.inf f = ⨅ a ∈ s, f a :=
+ @sup_eq_iSup _ βᵒᵈ _ _ _
+#align finset.inf_eq_infi Finset.inf_eq_iInf
-theorem inf_id_eq_infₛ [CompleteLattice α] (s : Finset α) : s.inf id = infₛ s :=
- @sup_id_eq_supₛ αᵒᵈ _ _
-#align finset.inf_id_eq_Inf Finset.inf_id_eq_infₛ
+theorem inf_id_eq_sInf [CompleteLattice α] (s : Finset α) : s.inf id = sInf s :=
+ @sup_id_eq_sSup αᵒᵈ _ _
+#align finset.inf_id_eq_Inf Finset.inf_id_eq_sInf
-theorem inf_id_set_eq_interₛ (s : Finset (Set α)) : s.inf id = ⋂₀ ↑s :=
- inf_id_eq_infₛ _
-#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_interₛ
+theorem inf_id_set_eq_sInter (s : Finset (Set α)) : s.inf id = ⋂₀ ↑s :=
+ inf_id_eq_sInf _
+#align finset.inf_id_set_eq_sInter Finset.inf_id_set_eq_sInter
@[simp]
-theorem inf_set_eq_interᵢ (s : Finset α) (f : α → Set β) : s.inf f = ⋂ x ∈ s, f x :=
- inf_eq_infᵢ _ _
-#align finset.inf_set_eq_bInter Finset.inf_set_eq_interᵢ
+theorem inf_set_eq_iInter (s : Finset α) (f : α → Set β) : s.inf f = ⋂ x ∈ s, f x :=
+ inf_eq_iInf _ _
+#align finset.inf_set_eq_bInter Finset.inf_set_eq_iInter
-theorem inf_eq_infₛ_image [CompleteLattice β] (s : Finset α) (f : α → β) :
- s.inf f = infₛ (f '' s) :=
- @sup_eq_supₛ_image _ βᵒᵈ _ _ _
-#align finset.inf_eq_Inf_image Finset.inf_eq_infₛ_image
+theorem inf_eq_sInf_image [CompleteLattice β] (s : Finset α) (f : α → β) :
+ s.inf f = sInf (f '' s) :=
+ @sup_eq_sSup_image _ βᵒᵈ _ _ _
+#align finset.inf_eq_Inf_image Finset.inf_eq_sInf_image
section Sup'
@@ -746,11 +746,11 @@ theorem sup'_le_iff {a : α} : s.sup' H f ≤ a ↔ ∀ b ∈ s, f b ≤ a :=
Iff.intro (fun h _ hb => le_trans (le_sup' f hb) h) (sup'_le H f)
#align finset.sup'_le_iff Finset.sup'_le_iff
-theorem sup'_bunionᵢ [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
+theorem sup'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
- (s.bunionᵢ t).sup' (Hs.bunionᵢ fun b _ => Ht b) f = s.sup' Hs (fun b => (t b).sup' (Ht b) f) :=
+ (s.biUnion t).sup' (Hs.biUnion fun b _ => Ht b) f = s.sup' Hs (fun b => (t b).sup' (Ht b) f) :=
eq_of_forall_ge_iff fun c => by simp [@forall_swap _ β]
-#align finset.sup'_bUnion Finset.sup'_bunionᵢ
+#align finset.sup'_bUnion Finset.sup'_biUnion
theorem comp_sup'_eq_sup'_comp [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) := by
@@ -866,11 +866,11 @@ theorem le_inf'_iff {a : α} : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
sup'_le_iff (α := αᵒᵈ) H f
#align finset.le_inf'_iff Finset.le_inf'_iff
-theorem inf'_bunionᵢ [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
+theorem inf'_biUnion [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
- (s.bunionᵢ t).inf' (Hs.bunionᵢ fun b _ => Ht b) f = s.inf' Hs (fun b => (t b).inf' (Ht b) f) :=
- sup'_bunionᵢ (α := αᵒᵈ) _ Hs Ht
-#align finset.inf'_bUnion Finset.inf'_bunionᵢ
+ (s.biUnion t).inf' (Hs.biUnion fun b _ => Ht b) f = s.inf' Hs (fun b => (t b).inf' (Ht b) f) :=
+ sup'_biUnion (α := αᵒᵈ) _ Hs Ht
+#align finset.inf'_bUnion Finset.inf'_biUnion
theorem comp_inf'_eq_inf'_comp [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) :=
@@ -1700,11 +1700,11 @@ theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Finset β}
simp_rw [val_toFinset]
#align finset.mem_sup Finset.mem_sup
-theorem sup_eq_bunionᵢ {α β} [DecidableEq β] (s : Finset α) (t : α → Finset β) :
- s.sup t = s.bunionᵢ t := by
+theorem sup_eq_biUnion {α β} [DecidableEq β] (s : Finset α) (t : α → Finset β) :
+ s.sup t = s.biUnion t := by
ext
- rw [mem_sup, mem_bunionᵢ]
-#align finset.sup_eq_bUnion Finset.sup_eq_bunionᵢ
+ rw [mem_sup, mem_biUnion]
+#align finset.sup_eq_bUnion Finset.sup_eq_biUnion
@[simp]
theorem sup_singleton'' [DecidableEq α] (s : Finset β) (f : β → α) :
@@ -1726,37 +1726,37 @@ section Lattice
variable {ι' : Sort _} [CompleteLattice α]
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
-`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `supᵢ_eq_supᵢ_finset'` for a version
+`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iSup_eq_iSup_finset'` for a version
that works for `ι : Sort*`. -/
-theorem supᵢ_eq_supᵢ_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
+theorem iSup_eq_iSup_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
classical
refine le_antisymm ?_ ?_
- exact supᵢ_le fun b => le_supᵢ_of_le {b} <| le_supᵢ_of_le b <| le_supᵢ_of_le (by simp) <| le_rfl
- exact supᵢ_le fun t => supᵢ_le fun b => supᵢ_le fun _ => le_supᵢ _ _
-#align supr_eq_supr_finset supᵢ_eq_supᵢ_finset
+ exact iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl
+ exact iSup_le fun t => iSup_le fun b => iSup_le fun _ => le_iSup _ _
+#align supr_eq_supr_finset iSup_eq_iSup_finset
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
-`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `supᵢ_eq_supᵢ_finset` for a version
+`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `iSup_eq_iSup_finset` for a version
that assumes `ι : Type _` but has no `plift`s. -/
-theorem supᵢ_eq_supᵢ_finset' (s : ι' → α) :
+theorem iSup_eq_iSup_finset' (s : ι' → α) :
(⨆ i, s i) = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
- rw [← supᵢ_eq_supᵢ_finset, ← Equiv.plift.surjective.supᵢ_comp]; rfl
-#align supr_eq_supr_finset' supᵢ_eq_supᵢ_finset'
+ rw [← iSup_eq_iSup_finset, ← Equiv.plift.surjective.iSup_comp]; rfl
+#align supr_eq_supr_finset' iSup_eq_iSup_finset'
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
-`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `infᵢ_eq_infᵢ_finset'` for a version
+`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `iInf_eq_iInf_finset'` for a version
that works for `ι : Sort*`. -/
-theorem infᵢ_eq_infᵢ_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι) (i ∈ t), s i :=
- @supᵢ_eq_supᵢ_finset αᵒᵈ _ _ _
-#align infi_eq_infi_finset infᵢ_eq_infᵢ_finset
+theorem iInf_eq_iInf_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι) (i ∈ t), s i :=
+ @iSup_eq_iSup_finset αᵒᵈ _ _ _
+#align infi_eq_infi_finset iInf_eq_iInf_finset
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
-`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `infᵢ_eq_infᵢ_finset` for a version
+`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `iInf_eq_iInf_finset` for a version
that assumes `ι : Type _` but has no `plift`s. -/
-theorem infᵢ_eq_infᵢ_finset' (s : ι' → α) :
+theorem iInf_eq_iInf_finset' (s : ι' → α) :
(⨅ i, s i) = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
- @supᵢ_eq_supᵢ_finset' αᵒᵈ _ _ _
-#align infi_eq_infi_finset' infᵢ_eq_infᵢ_finset'
+ @iSup_eq_iSup_finset' αᵒᵈ _ _ _
+#align infi_eq_infi_finset' iInf_eq_iInf_finset'
end Lattice
@@ -1765,35 +1765,35 @@ namespace Set
variable {ι' : Sort _}
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
-of finite subfamilies. This version assumes `ι : Type _`. See also `unionᵢ_eq_unionᵢ_finset'` for
+of finite subfamilies. This version assumes `ι : Type _`. See also `iUnion_eq_iUnion_finset'` for
a version that works for `ι : Sort*`. -/
-theorem unionᵢ_eq_unionᵢ_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
- supᵢ_eq_supᵢ_finset s
-#align set.Union_eq_Union_finset Set.unionᵢ_eq_unionᵢ_finset
+theorem iUnion_eq_iUnion_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
+ iSup_eq_iSup_finset s
+#align set.Union_eq_Union_finset Set.iUnion_eq_iUnion_finset
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
-of finite subfamilies. This version works for `ι : Sort*`. See also `unionᵢ_eq_unionᵢ_finset` for
+of finite subfamilies. This version works for `ι : Sort*`. See also `iUnion_eq_iUnion_finset` for
a version that assumes `ι : Type _` but avoids `plift`s in the right hand side. -/
-theorem unionᵢ_eq_unionᵢ_finset' (s : ι' → Set α) :
+theorem iUnion_eq_iUnion_finset' (s : ι' → Set α) :
(⋃ i, s i) = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
- supᵢ_eq_supᵢ_finset' s
-#align set.Union_eq_Union_finset' Set.unionᵢ_eq_unionᵢ_finset'
+ iSup_eq_iSup_finset' s
+#align set.Union_eq_Union_finset' Set.iUnion_eq_iUnion_finset'
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
intersections of finite subfamilies. This version assumes `ι : Type _`. See also
-`interᵢ_eq_interᵢ_finset'` for a version that works for `ι : Sort*`. -/
-theorem interᵢ_eq_interᵢ_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
- infᵢ_eq_infᵢ_finset s
-#align set.Inter_eq_Inter_finset Set.interᵢ_eq_interᵢ_finset
+`iInter_eq_iInter_finset'` for a version that works for `ι : Sort*`. -/
+theorem iInter_eq_iInter_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
+ iInf_eq_iInf_finset s
+#align set.Inter_eq_Inter_finset Set.iInter_eq_iInter_finset
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
intersections of finite subfamilies. This version works for `ι : Sort*`. See also
-`interᵢ_eq_interᵢ_finset` for a version that assumes `ι : Type _` but avoids `plift`s in the right
+`iInter_eq_iInter_finset` for a version that assumes `ι : Type _` but avoids `plift`s in the right
hand side. -/
-theorem interᵢ_eq_interᵢ_finset' (s : ι' → Set α) :
+theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
(⋂ i, s i) = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
- infᵢ_eq_infᵢ_finset' s
-#align set.Inter_eq_Inter_finset' Set.interᵢ_eq_interᵢ_finset'
+ iInf_eq_iInf_finset' s
+#align set.Inter_eq_Inter_finset' Set.iInter_eq_iInter_finset'
end Set
@@ -1835,169 +1835,169 @@ open Function
section Lattice
-theorem supᵢ_coe [SupSet β] (f : α → β) (s : Finset α) : (⨆ x ∈ (↑s : Set α), f x) = ⨆ x ∈ s, f x :=
+theorem iSup_coe [SupSet β] (f : α → β) (s : Finset α) : (⨆ x ∈ (↑s : Set α), f x) = ⨆ x ∈ s, f x :=
rfl
-#align finset.supr_coe Finset.supᵢ_coe
+#align finset.supr_coe Finset.iSup_coe
-theorem infᵢ_coe [InfSet β] (f : α → β) (s : Finset α) : (⨅ x ∈ (↑s : Set α), f x) = ⨅ x ∈ s, f x :=
+theorem iInf_coe [InfSet β] (f : α → β) (s : Finset α) : (⨅ x ∈ (↑s : Set α), f x) = ⨅ x ∈ s, f x :=
rfl
-#align finset.infi_coe Finset.infᵢ_coe
+#align finset.infi_coe Finset.iInf_coe
variable [CompleteLattice β]
-theorem supᵢ_singleton (a : α) (s : α → β) : (⨆ x ∈ ({a} : Finset α), s x) = s a := by simp
-#align finset.supr_singleton Finset.supᵢ_singleton
+theorem iSup_singleton (a : α) (s : α → β) : (⨆ x ∈ ({a} : Finset α), s x) = s a := by simp
+#align finset.supr_singleton Finset.iSup_singleton
-theorem infᵢ_singleton (a : α) (s : α → β) : (⨅ x ∈ ({a} : Finset α), s x) = s a := by simp
-#align finset.infi_singleton Finset.infᵢ_singleton
+theorem iInf_singleton (a : α) (s : α → β) : (⨅ x ∈ ({a} : Finset α), s x) = s a := by simp
+#align finset.infi_singleton Finset.iInf_singleton
-theorem supᵢ_option_toFinset (o : Option α) (f : α → β) : (⨆ x ∈ o.toFinset, f x) = ⨆ x ∈ o, f x :=
+theorem iSup_option_toFinset (o : Option α) (f : α → β) : (⨆ x ∈ o.toFinset, f x) = ⨆ x ∈ o, f x :=
by simp
-#align finset.supr_option_to_finset Finset.supᵢ_option_toFinset
+#align finset.supr_option_to_finset Finset.iSup_option_toFinset
-theorem infᵢ_option_toFinset (o : Option α) (f : α → β) : (⨅ x ∈ o.toFinset, f x) = ⨅ x ∈ o, f x :=
- @supᵢ_option_toFinset _ βᵒᵈ _ _ _
-#align finset.infi_option_to_finset Finset.infᵢ_option_toFinset
+theorem iInf_option_toFinset (o : Option α) (f : α → β) : (⨅ x ∈ o.toFinset, f x) = ⨅ x ∈ o, f x :=
+ @iSup_option_toFinset _ βᵒᵈ _ _ _
+#align finset.infi_option_to_finset Finset.iInf_option_toFinset
variable [DecidableEq α]
-theorem supᵢ_union {f : α → β} {s t : Finset α} :
- (⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [supᵢ_or, supᵢ_sup_eq]
-#align finset.supr_union Finset.supᵢ_union
+theorem iSup_union {f : α → β} {s t : Finset α} :
+ (⨆ x ∈ s ∪ t, f x) = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [iSup_or, iSup_sup_eq]
+#align finset.supr_union Finset.iSup_union
-theorem infᵢ_union {f : α → β} {s t : Finset α} :
+theorem iInf_union {f : α → β} {s t : Finset α} :
(⨅ x ∈ s ∪ t, f x) = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
- @supᵢ_union α βᵒᵈ _ _ _ _ _
-#align finset.infi_union Finset.infᵢ_union
+ @iSup_union α βᵒᵈ _ _ _ _ _
+#align finset.infi_union Finset.iInf_union
-theorem supᵢ_insert (a : α) (s : Finset α) (t : α → β) :
+theorem iSup_insert (a : α) (s : Finset α) (t : α → β) :
(⨆ x ∈ insert a s, t x) = t a ⊔ ⨆ x ∈ s, t x := by
rw [insert_eq]
- simp only [supᵢ_union, Finset.supᵢ_singleton]
-#align finset.supr_insert Finset.supᵢ_insert
+ simp only [iSup_union, Finset.iSup_singleton]
+#align finset.supr_insert Finset.iSup_insert
-theorem infᵢ_insert (a : α) (s : Finset α) (t : α → β) :
+theorem iInf_insert (a : α) (s : Finset α) (t : α → β) :
(⨅ x ∈ insert a s, t x) = t a ⊓ ⨅ x ∈ s, t x :=
- @supᵢ_insert α βᵒᵈ _ _ _ _ _
-#align finset.infi_insert Finset.infᵢ_insert
+ @iSup_insert α βᵒᵈ _ _ _ _ _
+#align finset.infi_insert Finset.iInf_insert
-theorem supᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
- (⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← supᵢ_coe, coe_image, supᵢ_image, supᵢ_coe]
-#align finset.supr_finset_image Finset.supᵢ_finset_image
+theorem iSup_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
+ (⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← iSup_coe, coe_image, iSup_image, iSup_coe]
+#align finset.supr_finset_image Finset.iSup_finset_image
-theorem infᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
- (⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← infᵢ_coe, coe_image, infᵢ_image, infᵢ_coe]
-#align finset.infi_finset_image Finset.infᵢ_finset_image
+theorem iInf_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
+ (⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← iInf_coe, coe_image, iInf_image, iInf_coe]
+#align finset.infi_finset_image Finset.iInf_finset_image
-theorem supᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
+theorem iSup_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i := by
- simp only [Finset.supᵢ_insert, update_same]
+ simp only [Finset.iSup_insert, update_same]
rcongr (i hi); apply update_noteq; rintro rfl; exact hx hi
-#align finset.supr_insert_update Finset.supᵢ_insert_update
+#align finset.supr_insert_update Finset.iSup_insert_update
-theorem infᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
+theorem iInf_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
(⨅ i ∈ insert x t, update f x s i) = s ⊓ ⨅ i ∈ t, f i :=
- @supᵢ_insert_update α βᵒᵈ _ _ _ _ f _ hx
-#align finset.infi_insert_update Finset.infᵢ_insert_update
+ @iSup_insert_update α βᵒᵈ _ _ _ _ f _ hx
+#align finset.infi_insert_update Finset.iInf_insert_update
-theorem supᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → β) :
- (⨆ y ∈ s.bunionᵢ t, f y) = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@supᵢ_comm _ α, supᵢ_and]
-#align finset.supr_bUnion Finset.supᵢ_bunionᵢ
+theorem iSup_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
+ (⨆ y ∈ s.biUnion t, f y) = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@iSup_comm _ α, iSup_and]
+#align finset.supr_bUnion Finset.iSup_biUnion
-theorem infᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → β) :
- (⨅ y ∈ s.bunionᵢ t, f y) = ⨅ (x ∈ s) (y ∈ t x), f y :=
- @supᵢ_bunionᵢ _ βᵒᵈ _ _ _ _ _ _
-#align finset.infi_bUnion Finset.infᵢ_bunionᵢ
+theorem iInf_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
+ (⨅ y ∈ s.biUnion t, f y) = ⨅ (x ∈ s) (y ∈ t x), f y :=
+ @iSup_biUnion _ βᵒᵈ _ _ _ _ _ _
+#align finset.infi_bUnion Finset.iInf_biUnion
end Lattice
-theorem set_bunionᵢ_coe (s : Finset α) (t : α → Set β) : (⋃ x ∈ (↑s : Set α), t x) = ⋃ x ∈ s, t x :=
+theorem set_biUnion_coe (s : Finset α) (t : α → Set β) : (⋃ x ∈ (↑s : Set α), t x) = ⋃ x ∈ s, t x :=
rfl
-#align finset.set_bUnion_coe Finset.set_bunionᵢ_coe
+#align finset.set_bUnion_coe Finset.set_biUnion_coe
-theorem set_binterᵢ_coe (s : Finset α) (t : α → Set β) : (⋂ x ∈ (↑s : Set α), t x) = ⋂ x ∈ s, t x :=
+theorem set_biInter_coe (s : Finset α) (t : α → Set β) : (⋂ x ∈ (↑s : Set α), t x) = ⋂ x ∈ s, t x :=
rfl
-#align finset.set_bInter_coe Finset.set_binterᵢ_coe
+#align finset.set_bInter_coe Finset.set_biInter_coe
-theorem set_bunionᵢ_singleton (a : α) (s : α → Set β) : (⋃ x ∈ ({a} : Finset α), s x) = s a :=
- supᵢ_singleton a s
-#align finset.set_bUnion_singleton Finset.set_bunionᵢ_singleton
+theorem set_biUnion_singleton (a : α) (s : α → Set β) : (⋃ x ∈ ({a} : Finset α), s x) = s a :=
+ iSup_singleton a s
+#align finset.set_bUnion_singleton Finset.set_biUnion_singleton
-theorem set_binterᵢ_singleton (a : α) (s : α → Set β) : (⋂ x ∈ ({a} : Finset α), s x) = s a :=
- infᵢ_singleton a s
-#align finset.set_bInter_singleton Finset.set_binterᵢ_singleton
+theorem set_biInter_singleton (a : α) (s : α → Set β) : (⋂ x ∈ ({a} : Finset α), s x) = s a :=
+ iInf_singleton a s
+#align finset.set_bInter_singleton Finset.set_biInter_singleton
@[simp]
-theorem set_bunionᵢ_preimage_singleton (f : α → β) (s : Finset β) :
+theorem set_biUnion_preimage_singleton (f : α → β) (s : Finset β) :
(⋃ y ∈ s, f ⁻¹' {y}) = f ⁻¹' s :=
- Set.bunionᵢ_preimage_singleton f s
-#align finset.set_bUnion_preimage_singleton Finset.set_bunionᵢ_preimage_singleton
+ Set.biUnion_preimage_singleton f s
+#align finset.set_bUnion_preimage_singleton Finset.set_biUnion_preimage_singleton
-theorem set_bunionᵢ_option_toFinset (o : Option α) (f : α → Set β) :
+theorem set_biUnion_option_toFinset (o : Option α) (f : α → Set β) :
(⋃ x ∈ o.toFinset, f x) = ⋃ x ∈ o, f x :=
- supᵢ_option_toFinset o f
-#align finset.set_bUnion_option_to_finset Finset.set_bunionᵢ_option_toFinset
+ iSup_option_toFinset o f
+#align finset.set_bUnion_option_to_finset Finset.set_biUnion_option_toFinset
-theorem set_binterᵢ_option_toFinset (o : Option α) (f : α → Set β) :
+theorem set_biInter_option_toFinset (o : Option α) (f : α → Set β) :
(⋂ x ∈ o.toFinset, f x) = ⋂ x ∈ o, f x :=
- infᵢ_option_toFinset o f
-#align finset.set_bInter_option_to_finset Finset.set_binterᵢ_option_toFinset
+ iInf_option_toFinset o f
+#align finset.set_bInter_option_to_finset Finset.set_biInter_option_toFinset
-theorem subset_set_bunionᵢ_of_mem {s : Finset α} {f : α → Set β} {x : α} (h : x ∈ s) :
+theorem subset_set_biUnion_of_mem {s : Finset α} {f : α → Set β} {x : α} (h : x ∈ s) :
f x ⊆ ⋃ y ∈ s, f y :=
- show f x ≤ ⨆ y ∈ s, f y from le_supᵢ_of_le x <| by simp only [h, supᵢ_pos, le_refl]
-#align finset.subset_set_bUnion_of_mem Finset.subset_set_bunionᵢ_of_mem
+ show f x ≤ ⨆ y ∈ s, f y from le_iSup_of_le x <| by simp only [h, iSup_pos, le_refl]
+#align finset.subset_set_bUnion_of_mem Finset.subset_set_biUnion_of_mem
variable [DecidableEq α]
-theorem set_bunionᵢ_union (s t : Finset α) (u : α → Set β) :
+theorem set_biUnion_union (s t : Finset α) (u : α → Set β) :
(⋃ x ∈ s ∪ t, u x) = (⋃ x ∈ s, u x) ∪ ⋃ x ∈ t, u x :=
- supᵢ_union
-#align finset.set_bUnion_union Finset.set_bunionᵢ_union
+ iSup_union
+#align finset.set_bUnion_union Finset.set_biUnion_union
-theorem set_binterᵢ_inter (s t : Finset α) (u : α → Set β) :
+theorem set_biInter_inter (s t : Finset α) (u : α → Set β) :
(⋂ x ∈ s ∪ t, u x) = (⋂ x ∈ s, u x) ∩ ⋂ x ∈ t, u x :=
- infᵢ_union
-#align finset.set_bInter_inter Finset.set_binterᵢ_inter
+ iInf_union
+#align finset.set_bInter_inter Finset.set_biInter_inter
-theorem set_bunionᵢ_insert (a : α) (s : Finset α) (t : α → Set β) :
+theorem set_biUnion_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋃ x ∈ insert a s, t x) = t a ∪ ⋃ x ∈ s, t x :=
- supᵢ_insert a s t
-#align finset.set_bUnion_insert Finset.set_bunionᵢ_insert
+ iSup_insert a s t
+#align finset.set_bUnion_insert Finset.set_biUnion_insert
-theorem set_binterᵢ_insert (a : α) (s : Finset α) (t : α → Set β) :
+theorem set_biInter_insert (a : α) (s : Finset α) (t : α → Set β) :
(⋂ x ∈ insert a s, t x) = t a ∩ ⋂ x ∈ s, t x :=
- infᵢ_insert a s t
-#align finset.set_bInter_insert Finset.set_binterᵢ_insert
+ iInf_insert a s t
+#align finset.set_bInter_insert Finset.set_biInter_insert
-theorem set_bunionᵢ_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
+theorem set_biUnion_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋃ x ∈ s.image f, g x) = ⋃ y ∈ s, g (f y) :=
- supᵢ_finset_image
-#align finset.set_bUnion_finset_image Finset.set_bunionᵢ_finset_image
+ iSup_finset_image
+#align finset.set_bUnion_finset_image Finset.set_biUnion_finset_image
-theorem set_binterᵢ_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
+theorem set_biInter_finset_image {f : γ → α} {g : α → Set β} {s : Finset γ} :
(⋂ x ∈ s.image f, g x) = ⋂ y ∈ s, g (f y) :=
- infᵢ_finset_image
-#align finset.set_bInter_finset_image Finset.set_binterᵢ_finset_image
+ iInf_finset_image
+#align finset.set_bInter_finset_image Finset.set_biInter_finset_image
-theorem set_bunionᵢ_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
+theorem set_biUnion_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋃ i ∈ insert x t, @update _ _ _ f x s i) = s ∪ ⋃ i ∈ t, f i :=
- supᵢ_insert_update f hx
-#align finset.set_bUnion_insert_update Finset.set_bunionᵢ_insert_update
+ iSup_insert_update f hx
+#align finset.set_bUnion_insert_update Finset.set_biUnion_insert_update
-theorem set_binterᵢ_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
+theorem set_biInter_insert_update {x : α} {t : Finset α} (f : α → Set β) {s : Set β} (hx : x ∉ t) :
(⋂ i ∈ insert x t, @update _ _ _ f x s i) = s ∩ ⋂ i ∈ t, f i :=
- infᵢ_insert_update f hx
-#align finset.set_bInter_insert_update Finset.set_binterᵢ_insert_update
-
-theorem set_bunionᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
- (⋃ y ∈ s.bunionᵢ t, f y) = ⋃ (x ∈ s) (y ∈ t x), f y :=
- supᵢ_bunionᵢ s t f
-#align finset.set_bUnion_bUnion Finset.set_bunionᵢ_bunionᵢ
-
-theorem set_binterᵢ_bunionᵢ (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
- (⋂ y ∈ s.bunionᵢ t, f y) = ⋂ (x ∈ s) (y ∈ t x), f y :=
- infᵢ_bunionᵢ s t f
-#align finset.set_bInter_bUnion Finset.set_binterᵢ_bunionᵢ
+ iInf_insert_update f hx
+#align finset.set_bInter_insert_update Finset.set_biInter_insert_update
+
+theorem set_biUnion_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
+ (⋃ y ∈ s.biUnion t, f y) = ⋃ (x ∈ s) (y ∈ t x), f y :=
+ iSup_biUnion s t f
+#align finset.set_bUnion_bUnion Finset.set_biUnion_biUnion
+
+theorem set_biInter_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → Set β) :
+ (⋂ y ∈ s.biUnion t, f y) = ⋂ (x ∈ s) (y ∈ t x), f y :=
+ iInf_biUnion s t f
+#align finset.set_bInter_bUnion Finset.set_biInter_biUnion
end Finset
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -455,8 +455,7 @@ theorem inf_coe {P : α → Prop} {Ptop : P ⊤} {Pinf : ∀ ⦃x y⦄, P x →
#align finset.inf_coe Finset.inf_coe
theorem _root_.List.foldr_inf_eq_inf_toFinset [DecidableEq α] (l : List α) :
- l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id :=
- by
+ l.foldr (· ⊓ ·) ⊤ = l.toFinset.inf id := by
rw [← coe_fold_r, ← Multiset.fold_dedup_idem, inf_def, ← List.toFinset_coe, toFinset_val,
Multiset.map_id]
rfl
@@ -1188,8 +1187,7 @@ theorem min_of_nonempty {s : Finset α} (h : s.Nonempty) : ∃ a : α, s.min = a
theorem min_eq_top {s : Finset α} : s.min = ⊤ ↔ s = ∅ :=
⟨fun h =>
- s.eq_empty_or_nonempty.elim id fun H =>
- by
+ s.eq_empty_or_nonempty.elim id fun H => by
let ⟨a, ha⟩ := min_of_nonempty H
rw [h] at ha; cases ha; done, -- Porting note: error without `done`
fun h => h.symm ▸ min_empty⟩
@@ -1577,8 +1575,7 @@ ordered type : a predicate is true on all `s : Finset α` provided that:
`f x ≤ f a`, `p s` implies `p (insert a s)`. -/
@[elab_as_elim]
theorem induction_on_max_value [DecidableEq ι] (f : ι → α) {p : Finset ι → Prop} (s : Finset ι)
- (h0 : p ∅) (step : ∀ a s, a ∉ s → (∀ x ∈ s, f x ≤ f a) → p s → p (insert a s)) : p s :=
- by
+ (h0 : p ∅) (step : ∀ a s, a ∉ s → (∀ x ∈ s, f x ≤ f a) → p s → p (insert a s)) : p s := by
induction' s using Finset.strongInductionOn with s ihs
rcases(s.image f).eq_empty_or_nonempty with (hne | hne)
· simp only [image_eq_empty] at hne
@@ -1697,8 +1694,7 @@ end Multiset
namespace Finset
theorem mem_sup {α β} [DecidableEq β] {s : Finset α} {f : α → Finset β} {x : β} :
- x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v :=
- by
+ x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v := by
change _ ↔ ∃ v ∈ s, x ∈ (f v).val
rw [← Multiset.mem_sup, ← Multiset.mem_toFinset, sup_toFinset]
simp_rw [val_toFinset]
@@ -1894,8 +1890,7 @@ theorem infᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
#align finset.infi_finset_image Finset.infᵢ_finset_image
theorem supᵢ_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
- (⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i :=
- by
+ (⨆ i ∈ insert x t, Function.update f x s i) = s ⊔ ⨆ i ∈ t, f i := by
simp only [Finset.supᵢ_insert, update_same]
rcongr (i hi); apply update_noteq; rintro rfl; exact hx hi
#align finset.supr_insert_update Finset.supᵢ_insert_update
finset
lemmas around (#3748)
Match https://github.com/leanprover-community/mathlib/pull/18900
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -4,7 +4,7 @@ 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 c813ed7de0f5115f956239124e9b30f3a621966f
+! leanprover-community/mathlib commit 9d684a893c52e1d6692a504a118bfccbae04feeb
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,13 +13,14 @@ import Mathlib.Data.Finset.Option
import Mathlib.Data.Finset.Prod
import Mathlib.Data.Multiset.Lattice
import Mathlib.Order.CompleteLattice
+import Mathlib.Order.Hom.Lattice
/-!
# Lattice operations on finsets
-/
-variable {α β γ ι : Type _}
+variable {F α β γ ι : Type _}
namespace Finset
@@ -93,6 +94,13 @@ theorem sup_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
exact Finset.fold_congr hfg
#align finset.sup_congr Finset.sup_congr
+@[simp]
+theorem _root_.map_finset_sup [SemilatticeSup β] [OrderBot β] [SupBotHomClass F α β] (f : F)
+ (s : Finset ι) (g : ι → α) : f (s.sup g) = s.sup (f ∘ g) :=
+ Finset.cons_induction_on s (map_bot f) fun i s _ h => by
+ rw [sup_cons, sup_cons, map_sup, h, Function.comp_apply]
+#align map_finset_sup map_finset_sup
+
@[simp]
protected theorem sup_le_iff {a : α} : s.sup f ≤ a ↔ ∀ b ∈ s, f b ≤ a := by
apply Iff.trans Multiset.sup_le
@@ -359,6 +367,13 @@ theorem inf_congr {f g : β → α} (hs : s₁ = s₂) (hfg : ∀ a ∈ s₂, f
exact Finset.fold_congr hfg
#align finset.inf_congr Finset.inf_congr
+@[simp]
+theorem _root_.map_finset_inf [SemilatticeInf β] [OrderTop β] [InfTopHomClass F α β] (f : F)
+ (s : Finset ι) (g : ι → α) : f (s.inf g) = s.inf (f ∘ g) :=
+ Finset.cons_induction_on s (map_top f) fun i s _ h => by
+ rw [inf_cons, inf_cons, map_inf, h, Function.comp_apply]
+#align map_finset_inf map_finset_inf
+
@[simp]
theorem inf_bunionᵢ [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
(s.bunionᵢ t).inf f = s.inf fun x => (t x).inf f :=
@@ -426,27 +441,6 @@ theorem inf_erase_top [DecidableEq α] (s : Finset α) : (s.erase ⊤).inf id =
@sup_erase_bot αᵒᵈ _ _ _ _
#align finset.inf_erase_top Finset.inf_erase_top
-theorem sup_sdiff_left {α β : Type _} [BooleanAlgebra α] (s : Finset β) (f : β → α) (a : α) :
- (s.sup fun b => a \ f b) = a \ s.inf f := by
- refine' Finset.cons_induction_on s _ fun b t _ h => _
- · rw [sup_empty, inf_empty, sdiff_top]
- · rw [sup_cons, inf_cons, h, sdiff_inf]
-#align finset.sup_sdiff_left Finset.sup_sdiff_left
-
-theorem inf_sdiff_left {α β : Type _} [BooleanAlgebra α] {s : Finset β} (hs : s.Nonempty)
- (f : β → α) (a : α) : (s.inf fun b => a \ f b) = a \ s.sup f := by
- induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
- · rw [sup_singleton, inf_singleton]
- · rw [sup_cons, inf_cons, h, sdiff_sup]
-#align finset.inf_sdiff_left Finset.inf_sdiff_left
-
-theorem inf_sdiff_right {α β : Type _} [BooleanAlgebra α] {s : Finset β} (hs : s.Nonempty)
- (f : β → α) (a : α) : (s.inf fun b => f b \ a) = s.inf f \ a := by
- induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
- · rw [inf_singleton, inf_singleton]
- · rw [inf_cons, inf_cons, h, inf_sdiff]
-#align finset.inf_sdiff_right Finset.inf_sdiff_right
-
theorem comp_inf_eq_inf_comp [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) :=
@comp_sup_eq_sup_comp αᵒᵈ _ γᵒᵈ _ _ _ _ _ _ _ g_inf top
@@ -558,6 +552,33 @@ end OrderTop
end DistribLattice
+section BooleanAlgebra
+
+variable [BooleanAlgebra α] {s : Finset ι}
+
+theorem sup_sdiff_left (s : Finset ι) (f : ι → α) (a : α) :
+ (s.sup fun b => a \ f b) = a \ s.inf f := by
+ refine' Finset.cons_induction_on s _ fun b t _ h => _
+ · rw [sup_empty, inf_empty, sdiff_top]
+ · rw [sup_cons, inf_cons, h, sdiff_inf]
+#align finset.sup_sdiff_left Finset.sup_sdiff_left
+
+theorem inf_sdiff_left (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.inf fun b => a \ f b) = a \ s.sup f := by
+ induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
+ · rw [sup_singleton, inf_singleton]
+ · rw [sup_cons, inf_cons, h, sdiff_sup]
+#align finset.inf_sdiff_left Finset.inf_sdiff_left
+
+theorem inf_sdiff_right (hs : s.Nonempty) (f : ι → α) (a : α) :
+ (s.inf fun b => f b \ a) = s.inf f \ a := by
+ induction' hs using Finset.Nonempty.cons_induction with b b t _ _ h
+ · rw [inf_singleton, inf_singleton]
+ · rw [inf_cons, inf_cons, h, inf_sdiff]
+#align finset.inf_sdiff_right Finset.inf_sdiff_right
+
+end BooleanAlgebra
+
section LinearOrder
variable [LinearOrder α]
finset.sup_finset_image
(#3713)
Match https://github.com/leanprover-community/mathlib/pull/18893
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -4,7 +4,7 @@ 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 a968611b6a772cf7bdf61146e6d62fc882c92372
+! leanprover-community/mathlib commit c813ed7de0f5115f956239124e9b30f3a621966f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1868,11 +1868,6 @@ theorem supᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
(⨆ x ∈ s.image f, g x) = ⨆ y ∈ s, g (f y) := by rw [← supᵢ_coe, coe_image, supᵢ_image, supᵢ_coe]
#align finset.supr_finset_image Finset.supᵢ_finset_image
-theorem sup_finset_image {β γ : Type _} [SemilatticeSup β] [OrderBot β] (f : γ → α) (g : α → β)
- (s : Finset γ) : (s.image f).sup g = s.sup (g ∘ f) := by
- classical induction' s using Finset.induction_on with a s' _ ih <;> simp [*]
-#align finset.sup_finset_image Finset.sup_finset_image
-
theorem infᵢ_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
(⨅ x ∈ s.image f, g x) = ⨅ y ∈ s, g (f y) := by rw [← infᵢ_coe, coe_image, infᵢ_image, infᵢ_coe]
#align finset.infi_finset_image Finset.infᵢ_finset_image
@@ -4,7 +4,7 @@ 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 1c857a1f6798cb054be942199463c2cf904cb937
+! leanprover-community/mathlib commit a968611b6a772cf7bdf61146e6d62fc882c92372
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -113,6 +113,9 @@ theorem le_sup {b : β} (hb : b ∈ s) : f b ≤ s.sup f :=
Finset.sup_le_iff.1 le_rfl _ hb
#align finset.le_sup Finset.le_sup
+theorem le_sup_of_le {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup f := h.trans <| le_sup hb
+#align finset.le_sup_of_le Finset.le_sup_of_le
+
@[simp]
theorem sup_bunionᵢ [DecidableEq β] (s : Finset γ) (t : γ → Finset β) :
(s.bunionᵢ t).sup f = s.sup fun x => (t x).sup f :=
@@ -388,6 +391,9 @@ theorem inf_le {b : β} (hb : b ∈ s) : s.inf f ≤ f b :=
Finset.le_inf_iff.1 le_rfl _ hb
#align finset.inf_le Finset.inf_le
+theorem inf_le_of_le {b : β} (hb : b ∈ s) (h : f b ≤ a) : s.inf f ≤ a := (inf_le hb).trans h
+#align finset.inf_le_of_le Finset.inf_le_of_le
+
theorem inf_mono_fun {g : β → α} (h : ∀ b ∈ s, f b ≤ g b) : s.inf f ≤ s.inf g :=
Finset.le_inf fun b hb => le_trans (inf_le hb) (h b hb)
#align finset.inf_mono_fun Finset.inf_mono_fun
@@ -702,6 +708,10 @@ theorem le_sup' {b : β} (h : b ∈ s) : f b ≤ s.sup' ⟨b, h⟩ f := by
exact le_sup (f := fun c => WithBot.some (f c)) h
#align finset.le_sup' Finset.le_sup'
+theorem le_sup'_of_le {a : α} {b : β} (hb : b ∈ s) (h : a ≤ f b) : a ≤ s.sup' ⟨b, hb⟩ f :=
+ h.trans <| le_sup' _ hb
+#align finset.le_sup'_of_le Finset.le_sup'_of_le
+
@[simp]
theorem sup'_const (a : α) : s.sup' H (fun _ => a) = a := by
apply le_antisymm
@@ -823,6 +833,9 @@ theorem inf'_le {b : β} (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
le_sup' (α := αᵒᵈ) f h
#align finset.inf'_le Finset.inf'_le
+theorem inf'_le_of_le (hb : b ∈ s) (h : f b ≤ a) : s.inf' ⟨b, hb⟩ f ≤ a := (inf'_le _ hb).trans h
+#align finset.inf'_le_of_le Finset.inf'_le_of_le
+
@[simp]
theorem inf'_const (a : α) : (s.inf' H fun _ => a) = a :=
sup'_const (α := αᵒᵈ) H a
I have renamed hypotheses in WithBot.recBotCoe
, WithTop.recTopCoe
and Finset.cons_induction
on the basis that rather than
cases f₁ using WithBot.recBotCoe with
| h₁ => …
| h₂ f₁ => …
we would prefer to be able to write
cases f₁ using WithBot.recBotCoe with
| bot => …
| coe f₁ => …
and rather than
induction s using cons_induction with
| h₁ => …
| [@h](https://github.com/h)₂ c s hc ih => …
we would prefer
induction s using cons_induction with
| empty => …
| [@cons](https://github.com/cons) c t hc ih => …
I also tidied up some of inf' stuff in Finset.Lattice by using named arguments to specify the dual type instead of @
s and _ _ _
.
@@ -568,35 +568,27 @@ theorem comp_sup_eq_sup_comp_of_is_total [SemilatticeSup β] [OrderBot β] (g :
@[simp]
protected theorem le_sup_iff (ha : ⊥ < a) : a ≤ s.sup f ↔ ∃ b ∈ s, a ≤ f b := by
apply Iff.intro
- · intro h'
- induction s using Finset.cons_induction with
- | h₁ => exact False.elim (not_le_of_lt ha h')
- | @h₂ c s hc ih =>
- rw [sup_cons, _root_.le_sup_iff] at h'
- cases h' with
- | inl h => exact ⟨c, mem_cons.2 (Or.inl rfl), h⟩
- | inr h =>
- rcases ih h with ⟨b, hb, hle⟩
- exact ⟨b, mem_cons.2 (Or.inr hb), hle⟩
- · rintro ⟨b, hb, hle⟩
- exact le_trans hle (le_sup hb)
+ · induction s using cons_induction with
+ | empty => exact (absurd · (not_le_of_lt ha))
+ | @cons c t hc ih =>
+ rw [sup_cons, le_sup_iff]
+ exact fun
+ | Or.inl h => ⟨c, mem_cons.2 (Or.inl rfl), h⟩
+ | Or.inr h => let ⟨b, hb, hle⟩ := ih h; ⟨b, mem_cons.2 (Or.inr hb), hle⟩
+ · exact fun ⟨b, hb, hle⟩ => le_trans hle (le_sup hb)
#align finset.le_sup_iff Finset.le_sup_iff
@[simp]
protected theorem lt_sup_iff : a < s.sup f ↔ ∃ b ∈ s, a < f b := by
apply Iff.intro
- · intro h'
- induction s using Finset.cons_induction with
- | h₁ => exact False.elim (not_lt_bot h')
- | @h₂ c s hc ih =>
- rw [sup_cons, _root_.lt_sup_iff] at h'
- cases h' with
- | inl h => exact ⟨c, mem_cons.2 (Or.inl rfl), h⟩
- | inr h =>
- rcases ih h with ⟨b, hb, hlt⟩
- exact ⟨b, mem_cons.2 (Or.inr hb), hlt⟩
- · rintro ⟨b, hb, hlt⟩
- exact lt_of_lt_of_le hlt (le_sup hb)
+ · induction s using cons_induction with
+ | empty => exact (absurd · not_lt_bot)
+ | @cons c t hc ih =>
+ rw [sup_cons, lt_sup_iff]
+ exact fun
+ | Or.inl h => ⟨c, mem_cons.2 (Or.inl rfl), h⟩
+ | Or.inr h => let ⟨b, hb, hlt⟩ := ih h; ⟨b, mem_cons.2 (Or.inr hb), hlt⟩
+ · exact fun ⟨b, hb, hlt⟩ => lt_of_lt_of_le hlt (le_sup hb)
#align finset.lt_sup_iff Finset.lt_sup_iff
@[simp]
@@ -738,14 +730,14 @@ theorem comp_sup'_eq_sup'_comp [SemilatticeSup γ] {s : Finset β} (H : s.Nonemp
rw [coe_sup']
refine' comp_sup_eq_sup_comp g' _ rfl
intro f₁ f₂
- induction f₁ using WithBot.recBotCoe with
- | h₁ =>
+ cases f₁ using WithBot.recBotCoe with
+ | bot =>
rw [bot_sup_eq]
exact bot_sup_eq.symm
- | h₂ f₁ =>
- induction f₂ using WithBot.recBotCoe with
- | h₁ => rfl
- | h₂ f₂ => exact congr_arg _ (g_sup f₁ f₂)
+ | coe f₁ =>
+ cases f₂ using WithBot.recBotCoe with
+ | bot => rfl
+ | coe f₂ => exact congr_arg _ (g_sup f₁ f₂)
#align finset.comp_sup'_eq_sup'_comp Finset.comp_sup'_eq_sup'_comp
theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊔ a₂))
@@ -753,12 +745,12 @@ theorem sup'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p
show @WithBot.recBotCoe α (fun _ => Prop) True p ↑(s.sup' H f)
rw [coe_sup']
refine' sup_induction trivial _ hs
- rintro (_ | a₁) h1 a₂ h2
+ rintro (_ | a₁) h₁ a₂ h₂
· rw [WithBot.none_eq_bot, bot_sup_eq]
- exact h2
- induction a₂ using WithBot.recBotCoe with
- | h₁ => exact h1
- | h₂ a₂ => exact hp a₁ h1 a₂ h2
+ exact h₂
+ · cases a₂ using WithBot.recBotCoe with
+ | bot => exact h₁
+ | coe a₂ => exact hp a₁ h₁ a₂ h₂
#align finset.sup'_induction Finset.sup'_induction
theorem sup'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊔ y ∈ s) {ι : Type _}
@@ -824,37 +816,37 @@ theorem inf'_singleton {b : β} {h : ({b} : Finset β).Nonempty} : ({b} : Finset
#align finset.inf'_singleton Finset.inf'_singleton
theorem le_inf' {a : α} (hs : ∀ b ∈ s, a ≤ f b) : a ≤ s.inf' H f :=
- @sup'_le αᵒᵈ _ _ _ H f _ hs
+ sup'_le (α := αᵒᵈ) H f hs
#align finset.le_inf' Finset.le_inf'
theorem inf'_le {b : β} (h : b ∈ s) : s.inf' ⟨b, h⟩ f ≤ f b :=
- @le_sup' αᵒᵈ _ _ _ f _ h
+ le_sup' (α := αᵒᵈ) f h
#align finset.inf'_le Finset.inf'_le
@[simp]
theorem inf'_const (a : α) : (s.inf' H fun _ => a) = a :=
- @sup'_const αᵒᵈ _ _ _ H _
+ sup'_const (α := αᵒᵈ) H a
#align finset.inf'_const Finset.inf'_const
@[simp]
theorem le_inf'_iff {a : α} : a ≤ s.inf' H f ↔ ∀ b ∈ s, a ≤ f b :=
- @sup'_le_iff αᵒᵈ _ _ _ H f _
+ sup'_le_iff (α := αᵒᵈ) H f
#align finset.le_inf'_iff Finset.le_inf'_iff
theorem inf'_bunionᵢ [DecidableEq β] {s : Finset γ} (Hs : s.Nonempty) {t : γ → Finset β}
(Ht : ∀ b, (t b).Nonempty) :
(s.bunionᵢ t).inf' (Hs.bunionᵢ fun b _ => Ht b) f = s.inf' Hs (fun b => (t b).inf' (Ht b) f) :=
- @sup'_bunionᵢ αᵒᵈ _ _ _ _ _ _ Hs _ Ht
+ sup'_bunionᵢ (α := αᵒᵈ) _ Hs Ht
#align finset.inf'_bUnion Finset.inf'_bunionᵢ
theorem comp_inf'_eq_inf'_comp [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) :=
- @comp_sup'_eq_sup'_comp αᵒᵈ _ γᵒᵈ _ _ _ H f g g_inf
+ comp_sup'_eq_sup'_comp (α := αᵒᵈ) (γ := γᵒᵈ) H g g_inf
#align finset.comp_inf'_eq_inf'_comp Finset.comp_inf'_eq_inf'_comp
theorem inf'_induction {p : α → Prop} (hp : ∀ a₁, p a₁ → ∀ a₂, p a₂ → p (a₁ ⊓ a₂))
(hs : ∀ b ∈ s, p (f b)) : p (s.inf' H f) :=
- @sup'_induction αᵒᵈ _ _ _ H f _ hp hs
+ sup'_induction (α := αᵒᵈ) H f hp hs
#align finset.inf'_induction Finset.inf'_induction
theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x ⊓ y ∈ s) {ι : Type _}
@@ -865,13 +857,13 @@ theorem inf'_mem (s : Set α) (w : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), x
@[congr]
theorem inf'_congr {t : Finset β} {f g : β → α} (h₁ : s = t) (h₂ : ∀ x ∈ s, f x = g x) :
s.inf' H f = t.inf' (h₁ ▸ H) g :=
- @sup'_congr αᵒᵈ _ _ _ H _ _ _ h₁ h₂
+ sup'_congr (α := αᵒᵈ) H h₁ h₂
#align finset.inf'_congr Finset.inf'_congr
@[simp]
theorem inf'_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : (s.map f).Nonempty)
(hs' : s.Nonempty := Finset.map_nonempty.mp hs) : (s.map f).inf' hs g = s.inf' hs' (g ∘ f) :=
- @sup'_map αᵒᵈ _ _ _ _ _ _ hs hs'
+ sup'_map (α := αᵒᵈ) _ hs hs'
#align finset.inf'_map Finset.inf'_map
end Inf'
@@ -900,17 +892,17 @@ section Inf
variable [SemilatticeInf α] [OrderTop α]
theorem inf'_eq_inf {s : Finset β} (H : s.Nonempty) (f : β → α) : s.inf' H f = s.inf f :=
- @sup'_eq_sup αᵒᵈ _ _ _ _ H f
+ sup'_eq_sup (α := αᵒᵈ) H f
#align finset.inf'_eq_inf Finset.inf'_eq_inf
theorem inf_closed_of_inf_closed {s : Set α} (t : Finset α) (htne : t.Nonempty) (h_subset : ↑t ⊆ s)
(h : ∀ (a) (_ : a ∈ s) (b) (_ : b ∈ s), a ⊓ b ∈ s) : t.inf id ∈ s :=
- @sup_closed_of_sup_closed αᵒᵈ _ _ _ t htne h_subset h
+ sup_closed_of_sup_closed (α := αᵒᵈ) t htne h_subset h
#align finset.inf_closed_of_inf_closed Finset.inf_closed_of_inf_closed
theorem coe_inf_of_nonempty {s : Finset β} (h : s.Nonempty) (f : β → α) :
(↑(s.inf f) : WithTop α) = s.inf ((↑) ∘ f) :=
- @coe_sup_of_nonempty αᵒᵈ _ _ _ _ h f
+ coe_sup_of_nonempty (α := αᵒᵈ) h f
#align finset.coe_inf_of_nonempty Finset.coe_inf_of_nonempty
end Inf
@@ -926,7 +918,7 @@ protected theorem sup_apply {C : β → Type _} [∀ b : β, SemilatticeSup (C b
protected theorem inf_apply {C : β → Type _} [∀ 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 :=
- @Finset.sup_apply _ _ (fun b => (C b)ᵒᵈ) _ _ s f b
+ Finset.sup_apply (C := fun b => (C b)ᵒᵈ) s f b
#align finset.inf_apply Finset.inf_apply
@[simp]
@@ -940,7 +932,7 @@ protected theorem sup'_apply {C : β → Type _} [∀ b : β, SemilatticeSup (C
protected theorem inf'_apply {C : β → Type _} [∀ 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 :=
- @Finset.sup'_apply _ _ (fun b => (C b)ᵒᵈ) _ _ H f b
+ Finset.sup'_apply (C := fun b => (C b)ᵒᵈ) H f b
#align finset.inf'_apply Finset.inf'_apply
@[simp]
@@ -991,17 +983,17 @@ theorem sup'_lt_iff : s.sup' H f < a ↔ ∀ i ∈ s, f i < a := by
@[simp]
theorem inf'_le_iff : s.inf' H f ≤ a ↔ ∃ i ∈ s, f i ≤ a :=
- @le_sup'_iff αᵒᵈ _ _ _ H f _
+ le_sup'_iff (α := αᵒᵈ) H
#align finset.inf'_le_iff Finset.inf'_le_iff
@[simp]
theorem inf'_lt_iff : s.inf' H f < a ↔ ∃ i ∈ s, f i < a :=
- @lt_sup'_iff αᵒᵈ _ _ _ H f _
+ lt_sup'_iff (α := αᵒᵈ) H
#align finset.inf'_lt_iff Finset.inf'_lt_iff
@[simp]
theorem lt_inf'_iff : a < s.inf' H f ↔ ∀ i ∈ s, a < f i :=
- @sup'_lt_iff αᵒᵈ _ _ _ H f _
+ sup'_lt_iff (α := αᵒᵈ) H
#align finset.lt_inf'_iff Finset.lt_inf'_iff
theorem exists_mem_eq_sup' (f : ι → α) : ∃ i, i ∈ s ∧ s.sup' H f = f i := by
@@ -1015,7 +1007,7 @@ theorem exists_mem_eq_sup' (f : ι → α) : ∃ i, i ∈ s ∧ s.sup' H f = f i
#align finset.exists_mem_eq_sup' Finset.exists_mem_eq_sup'
theorem exists_mem_eq_inf' (f : ι → α) : ∃ i, i ∈ s ∧ s.inf' H f = f i :=
- @exists_mem_eq_sup' αᵒᵈ _ _ _ H f
+ exists_mem_eq_sup' (α := αᵒᵈ) H f
#align finset.exists_mem_eq_inf' Finset.exists_mem_eq_inf'
theorem exists_mem_eq_sup [OrderBot α] (s : Finset ι) (h : s.Nonempty) (f : ι → α) :
@@ -1025,7 +1017,7 @@ theorem exists_mem_eq_sup [OrderBot α] (s : Finset ι) (h : s.Nonempty) (f : ι
theorem exists_mem_eq_inf [OrderTop α] (s : Finset ι) (h : s.Nonempty) (f : ι → α) :
∃ i, i ∈ s ∧ s.inf f = f i :=
- @exists_mem_eq_sup αᵒᵈ _ _ _ _ h f
+ exists_mem_eq_sup (α := αᵒᵈ) s h f
#align finset.exists_mem_eq_inf Finset.exists_mem_eq_inf
end LinearOrder
congr!
and convert
(#2606)
congr!
, convert
, and convert_to
to control parts of the congruence algorithm, in particular transparency settings when applying congruence lemmas.congr!
now applies congruence lemmas with reducible transparency by default. This prevents it from unfolding definitions when applying congruence lemmas. It also now tries both the LHS-biased and RHS-biased simp congruence lemmas, with a configuration option to set which it should try first.HEq
congruence lemma generator that gives each hypothesis access to the proofs of previous hypotheses. This means that if you have an equality ⊢ ⟨a, x⟩ = ⟨b, y⟩
of sigma types, congr!
turns this into goals ⊢ a = b
and ⊢ a = b → HEq x y
(note that congr!
will also auto-introduce a = b
for you in the second goal). This congruence lemma generator applies to more cases than the simp congruence lemma generator does.congr!
(and hence convert
) are more careful about applying lemmas that don't force definitions to unfold. There were a number of cases in mathlib where the implementation of congr
was being abused to unfold definitions.set_option trace.congr! true
you can see what congr!
sees when it is deciding on congruence lemmas.convert_to
to do using 1
when there is no using
clause, to match its documentation.Note that congr!
is more capable than congr
at finding a way to equate left-hand sides and right-hand sides, so you will frequently need to limit its depth with a using
clause. However, there is also a new heuristic to prevent considering unlikely-to-be-provable type equalities (controlled by the typeEqs
option), which can help limit the depth automatically.
There is also a predefined configuration that you can invoke with, for example, convert (config := .unfoldSameFun) h
, that causes it to behave more like congr
, including using default transparency when unfolding.
@@ -1450,7 +1450,9 @@ theorem max_erase_ne_self {s : Finset α} : (s.erase x).max ≠ x := by
theorem min_erase_ne_self {s : Finset α} : (s.erase x).min ≠ x := by
-- Porting note: old proof `convert @max_erase_ne_self αᵒᵈ _ _ _`
- convert @max_erase_ne_self αᵒᵈ _ (toDual x) (s.map toDual.toEmbedding)
+ convert @max_erase_ne_self αᵒᵈ _ (toDual x) (s.map toDual.toEmbedding) using 1
+ apply congr_arg -- porting note: forces unfolding to see `Finset.min` is `Finset.max`
+ congr!
· ext; simp only [mem_map_equiv]; exact Iff.rfl
#align finset.min_erase_ne_self Finset.min_erase_ne_self
@@ -4,7 +4,7 @@ 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 9003f28797c0664a49e4179487267c494477d853
+! leanprover-community/mathlib commit 1c857a1f6798cb054be942199463c2cf904cb937
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -524,11 +524,11 @@ theorem sup_inf_distrib_right (s : Finset ι) (f : ι → α) (a : α) :
simp_rw [_root_.inf_comm]
#align finset.sup_inf_distrib_right Finset.sup_inf_distrib_right
-theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
+protected theorem disjoint_sup_right : Disjoint a (s.sup f) ↔ ∀ i ∈ s, Disjoint a (f i) := by
simp only [disjoint_iff, sup_inf_distrib_left, sup_eq_bot_iff]
#align finset.disjoint_sup_right Finset.disjoint_sup_right
-theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
+protected theorem disjoint_sup_left : Disjoint (s.sup f) a ↔ ∀ i ∈ s, Disjoint (f i) a := by
simp only [disjoint_iff, sup_inf_distrib_right, sup_eq_bot_iff]
#align finset.disjoint_sup_left Finset.disjoint_sup_left
congr!
and improvement to convert
(#2566)
This introduces a tactic congr!
that is an analogue to mathlib 3's congr'
. It is a more insistent version of congr
that makes use of more congruence lemmas (including user congruence lemmas), propext
, funext
, and Subsingleton
instances. It also has a feature to lift reflexive relations to equalities. Along with funext
, the tactic does intros
, allowing congr!
to get access to function bodies; the introduced variables can be named using rename_i
if needed.
This also modifies convert
to use congr!
rather than congr
, which makes it work more like the mathlib3 version of the tactic.
@@ -1451,7 +1451,6 @@ theorem max_erase_ne_self {s : Finset α} : (s.erase x).max ≠ x := by
theorem min_erase_ne_self {s : Finset α} : (s.erase x).min ≠ x := by
-- Porting note: old proof `convert @max_erase_ne_self αᵒᵈ _ _ _`
convert @max_erase_ne_self αᵒᵈ _ (toDual x) (s.map toDual.toEmbedding)
- · funext _ _; simp only [eq_iff_true_of_subsingleton]
· ext; simp only [mem_map_equiv]; exact Iff.rfl
#align finset.min_erase_ne_self Finset.min_erase_ne_self
Type*
to Type _
(#1866)
A bunch of docstrings were still mentioning Type*
. This changes them to Type _
.
@@ -1703,7 +1703,7 @@ section Lattice
variable {ι' : Sort _} [CompleteLattice α]
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
-`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `supᵢ_eq_supᵢ_finset'` for a version
+`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `supᵢ_eq_supᵢ_finset'` for a version
that works for `ι : Sort*`. -/
theorem supᵢ_eq_supᵢ_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
classical
@@ -1714,14 +1714,14 @@ theorem supᵢ_eq_supᵢ_finset (s : ι → α) : (⨆ i, s i) = ⨆ t : Finset
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `supᵢ_eq_supᵢ_finset` for a version
-that assumes `ι : Type*` but has no `plift`s. -/
+that assumes `ι : Type _` but has no `plift`s. -/
theorem supᵢ_eq_supᵢ_finset' (s : ι' → α) :
(⨆ i, s i) = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
rw [← supᵢ_eq_supᵢ_finset, ← Equiv.plift.surjective.supᵢ_comp]; rfl
#align supr_eq_supr_finset' supᵢ_eq_supᵢ_finset'
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
-`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `infᵢ_eq_infᵢ_finset'` for a version
+`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type _`. See `infᵢ_eq_infᵢ_finset'` for a version
that works for `ι : Sort*`. -/
theorem infᵢ_eq_infᵢ_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset ι) (i ∈ t), s i :=
@supᵢ_eq_supᵢ_finset αᵒᵈ _ _ _
@@ -1729,7 +1729,7 @@ theorem infᵢ_eq_infᵢ_finset (s : ι → α) : (⨅ i, s i) = ⨅ (t : Finset
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `infᵢ_eq_infᵢ_finset` for a version
-that assumes `ι : Type*` but has no `plift`s. -/
+that assumes `ι : Type _` but has no `plift`s. -/
theorem infᵢ_eq_infᵢ_finset' (s : ι' → α) :
(⨅ i, s i) = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
@supᵢ_eq_supᵢ_finset' αᵒᵈ _ _ _
@@ -1742,7 +1742,7 @@ namespace Set
variable {ι' : Sort _}
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
-of finite subfamilies. This version assumes `ι : Type*`. See also `unionᵢ_eq_unionᵢ_finset'` for
+of finite subfamilies. This version assumes `ι : Type _`. See also `unionᵢ_eq_unionᵢ_finset'` for
a version that works for `ι : Sort*`. -/
theorem unionᵢ_eq_unionᵢ_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t : Finset ι, ⋃ i ∈ t, s i :=
supᵢ_eq_supᵢ_finset s
@@ -1750,14 +1750,14 @@ theorem unionᵢ_eq_unionᵢ_finset (s : ι → Set α) : (⋃ i, s i) = ⋃ t :
/-- Union of an indexed family of sets `s : ι → Set α` is equal to the union of the unions
of finite subfamilies. This version works for `ι : Sort*`. See also `unionᵢ_eq_unionᵢ_finset` for
-a version that assumes `ι : Type*` but avoids `plift`s in the right hand side. -/
+a version that assumes `ι : Type _` but avoids `plift`s in the right hand side. -/
theorem unionᵢ_eq_unionᵢ_finset' (s : ι' → Set α) :
(⋃ i, s i) = ⋃ t : Finset (PLift ι'), ⋃ i ∈ t, s (PLift.down i) :=
supᵢ_eq_supᵢ_finset' s
#align set.Union_eq_Union_finset' Set.unionᵢ_eq_unionᵢ_finset'
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
-intersections of finite subfamilies. This version assumes `ι : Type*`. See also
+intersections of finite subfamilies. This version assumes `ι : Type _`. See also
`interᵢ_eq_interᵢ_finset'` for a version that works for `ι : Sort*`. -/
theorem interᵢ_eq_interᵢ_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t : Finset ι, ⋂ i ∈ t, s i :=
infᵢ_eq_infᵢ_finset s
@@ -1765,7 +1765,7 @@ theorem interᵢ_eq_interᵢ_finset (s : ι → Set α) : (⋂ i, s i) = ⋂ t :
/-- Intersection of an indexed family of sets `s : ι → Set α` is equal to the intersection of the
intersections of finite subfamilies. This version works for `ι : Sort*`. See also
-`interᵢ_eq_interᵢ_finset` for a version that assumes `ι : Type*` but avoids `plift`s in the right
+`interᵢ_eq_interᵢ_finset` for a version that assumes `ι : Type _` but avoids `plift`s in the right
hand side. -/
theorem interᵢ_eq_interᵢ_finset' (s : ι' → Set α) :
(⋂ i, s i) = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
@@ -155,7 +155,7 @@ theorem sup_attach (s : Finset β) (f : β → α) : (s.attach.sup fun x => f x)
(s.attach.sup_map (Function.Embedding.subtype _) f).symm.trans <| congr_arg _ attach_map_val
#align finset.sup_attach Finset.sup_attach
-/-- See also `finset.product_bunionᵢ`. -/
+/-- See also `Finset.product_bunionᵢ`. -/
theorem sup_product_left (s : Finset β) (t : Finset γ) (f : β × γ → α) :
(s ×ᶠ t).sup f = s.sup fun i => t.sup fun i' => f ⟨i, i'⟩ := by
simp only [le_antisymm_iff, Finset.sup_le_iff, mem_product, and_imp, Prod.forall]
@@ -669,7 +669,7 @@ theorem sup_of_mem {s : Finset β} (f : β → α) {b : β} (h : b ∈ s) :
/-- 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. -/
+you may instead use `Finset.sup` which does not require `s` nonempty. -/
def sup' (s : Finset β) (H : s.Nonempty) (f : β → α) : α :=
WithBot.unbot (s.sup ((↑) ∘ f)) (by simpa using H)
#align finset.sup' Finset.sup'
@@ -1496,7 +1496,7 @@ theorem card_le_of_interleaved {s t : Finset α}
_ ≤ t.card + 1 := (card_insert_le _ _).trans (add_le_add_right card_image_le _)
#align finset.card_le_of_interleaved Finset.card_le_of_interleaved
-/-- If finsets `s` and `t` are interleaved, then `finset.card s ≤ finset.card (t \ s) + 1`. -/
+/-- If finsets `s` and `t` are interleaved, then `Finset.card s ≤ Finset.card (t \ s) + 1`. -/
theorem card_le_diff_of_interleaved {s t : Finset α}
(h :
∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s),
The unported dependencies are