data.finset.sups
⟷
Mathlib.Data.Finset.Sups
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)
(last sync)
The Ahlswede-Zhang identity is a sharpening of the Lubell-Yamamoto-Meshalkin identity, by expliciting the correction term.
This PR defines finset.truncated_sup
/finset.truncated_inf
, whose cardinalities show up in the correction term.
Co-authored-by: Vladimir Ivanov <volodimir1024@gmail.com>
@@ -36,6 +36,20 @@ We define the following notation in locale `finset_family`:
open function
open_locale set_family
+-- TODO: Is there a better spot for those two instances?
+namespace finset
+variables {α : Type*} [preorder α] {s t : set α} {a : α}
+
+instance decidable_pred_mem_upper_closure (s : finset α) [@decidable_rel α (≤)] :
+ decidable_pred (∈ upper_closure (s : set α)) :=
+λ _, finset.decidable_dexists_finset
+
+instance decidable_pred_mem_lower_closure (s : finset α) [@decidable_rel α (≤)] :
+ decidable_pred (∈ lower_closure (s : set α)) :=
+λ _, finset.decidable_dexists_finset
+
+end finset
+
variables {α : Type*} [decidable_eq α]
namespace finset
@@ -116,6 +130,21 @@ lemma sups_right_comm : (s ⊻ t) ⊻ u = (s ⊻ u) ⊻ t := image₂_right_comm
lemma sups_sups_sups_comm : (s ⊻ t) ⊻ (u ⊻ v) = (s ⊻ u) ⊻ (t ⊻ v) :=
image₂_image₂_image₂_comm sup_sup_sup_comm
+variables [@decidable_rel α (≤)]
+
+lemma filter_sups_le (s t : finset α) (a : α) :
+ (s ⊻ t).filter (λ b, b ≤ a) = s.filter (λ b, b ≤ a) ⊻ t.filter (λ b, b ≤ a) :=
+begin
+ ext b,
+ simp only [mem_filter, mem_sups],
+ split,
+ { rintro ⟨⟨b, hb, c, hc, rfl⟩, ha⟩,
+ rw sup_le_iff at ha,
+ exact ⟨_, ⟨hb, ha.1⟩, _, ⟨hc, ha.2⟩, rfl⟩ },
+ { rintro ⟨b, hb, c, hc, _, rfl⟩,
+ exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, sup_le hb.2 hc.2⟩ }
+end
+
end sups
section infs
@@ -195,6 +224,21 @@ lemma infs_right_comm : (s ⊼ t) ⊼ u = (s ⊼ u) ⊼ t := image₂_right_comm
lemma infs_infs_infs_comm : (s ⊼ t) ⊼ (u ⊼ v) = (s ⊼ u) ⊼ (t ⊼ v) :=
image₂_image₂_image₂_comm inf_inf_inf_comm
+variables [@decidable_rel α (≤)]
+
+lemma filter_infs_ge (s t : finset α) (a : α) :
+ (s ⊼ t).filter (λ b, a ≤ b) = s.filter (λ b, a ≤ b) ⊼ t.filter (λ b, a ≤ b) :=
+begin
+ ext b,
+ simp only [mem_filter, mem_infs],
+ split,
+ { rintro ⟨⟨b, hb, c, hc, rfl⟩, ha⟩,
+ rw le_inf_iff at ha,
+ exact ⟨_, ⟨hb, ha.1⟩, _, ⟨hc, ha.2⟩, rfl⟩ },
+ { rintro ⟨b, hb, c, hc, _, rfl⟩,
+ exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, le_inf hb.2 hc.2⟩ }
+end
+
end infs
open_locale finset_family
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -641,7 +641,7 @@ variable {s t u} {a b c : α}
#print Finset.mem_disjSups /-
@[simp]
theorem mem_disjSups : c ∈ s ○ t ↔ ∃ a ∈ s, ∃ b ∈ t, Disjoint a b ∧ a ⊔ b = c := by
- simp [disj_sups, and_assoc']
+ simp [disj_sups, and_assoc]
#align finset.mem_disj_sups Finset.mem_disjSups
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -317,7 +317,7 @@ theorem filter_sups_le (s t : Finset α) (a : α) :
simp only [mem_filter, mem_sups]
constructor
· rintro ⟨⟨b, hb, c, hc, rfl⟩, ha⟩
- rw [sup_le_iff] at ha
+ rw [sup_le_iff] at ha
exact ⟨_, ⟨hb, ha.1⟩, _, ⟨hc, ha.2⟩, rfl⟩
· rintro ⟨b, hb, c, hc, _, rfl⟩
exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, sup_le hb.2 hc.2⟩
@@ -580,7 +580,7 @@ theorem filter_infs_le (s t : Finset α) (a : α) :
simp only [mem_filter, mem_infs]
constructor
· rintro ⟨⟨b, hb, c, hc, rfl⟩, ha⟩
- rw [le_inf_iff] at ha
+ rw [le_inf_iff] at ha
exact ⟨_, ⟨hb, ha.1⟩, _, ⟨hc, ha.2⟩, rfl⟩
· rintro ⟨b, hb, c, hc, _, rfl⟩
exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, le_inf hb.2 hc.2⟩
@@ -775,7 +775,7 @@ theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u)
refine' associative_of_commutative_of_le disj_sups_comm _
simp only [le_eq_subset, disj_sups_subset_iff, mem_disj_sups]
rintro s t u _ ⟨a, ha, b, hb, hab, rfl⟩ c hc habc
- rw [disjoint_sup_left] at habc
+ rw [disjoint_sup_left] at habc
exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, sup_assoc.symm⟩
#align finset.disj_sups_assoc Finset.disjSups_assoc
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -657,7 +657,7 @@ variable (s t)
#print Finset.card_disjSups_le /-
theorem card_disjSups_le : (s ○ t).card ≤ s.card * t.card :=
- (card_le_of_subset disjSups_subset_sups).trans <| card_sups_le _ _
+ (card_le_card disjSups_subset_sups).trans <| card_sups_le _ _
#align finset.card_disj_sups_le Finset.card_disjSups_le
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -45,13 +45,17 @@ namespace Finset
variable {α : Type _} [Preorder α] {s t : Set α} {a : α}
-instance decidablePredMemUpperClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
+#print instDecidablePredMemUpperClosure /-
+instance instDecidablePredMemUpperClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
DecidablePred (· ∈ upperClosure (s : Set α)) := fun _ => Finset.decidableDExistsFinset
-#align finset.decidable_pred_mem_upper_closure Finset.decidablePredMemUpperClosure
+#align finset.decidable_pred_mem_upper_closure instDecidablePredMemUpperClosure
+-/
-instance decidablePredMemLowerClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
+#print instDecidablePredMemLowerClosure /-
+instance instDecidablePredMemLowerClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
DecidablePred (· ∈ lowerClosure (s : Set α)) := fun _ => Finset.decidableDExistsFinset
-#align finset.decidable_pred_mem_lower_closure Finset.decidablePredMemLowerClosure
+#align finset.decidable_pred_mem_lower_closure instDecidablePredMemLowerClosure
+-/
end Finset
@@ -568,7 +572,8 @@ theorem infs_infs_infs_comm : s ⊼ t ⊼ (u ⊼ v) = s ⊼ u ⊼ (t ⊼ v) :=
variable [@DecidableRel α (· ≤ ·)]
-theorem filter_infs_ge (s t : Finset α) (a : α) :
+#print Finset.filter_infs_le /-
+theorem filter_infs_le (s t : Finset α) (a : α) :
((s ⊼ t).filterₓ fun b => a ≤ b) = (s.filterₓ fun b => a ≤ b) ⊼ t.filterₓ fun b => a ≤ b :=
by
ext b
@@ -579,7 +584,8 @@ theorem filter_infs_ge (s t : Finset α) (a : α) :
exact ⟨_, ⟨hb, ha.1⟩, _, ⟨hc, ha.2⟩, rfl⟩
· rintro ⟨b, hb, c, hc, _, rfl⟩
exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, le_inf hb.2 hc.2⟩
-#align finset.filter_infs_ge Finset.filter_infs_ge
+#align finset.filter_infs_ge Finset.filter_infs_le
+-/
end Infs
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -46,11 +46,11 @@ namespace Finset
variable {α : Type _} [Preorder α] {s t : Set α} {a : α}
instance decidablePredMemUpperClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
- DecidablePred (· ∈ upperClosure (s : Set α)) := fun _ => Finset.decidableDexistsFinset
+ DecidablePred (· ∈ upperClosure (s : Set α)) := fun _ => Finset.decidableDExistsFinset
#align finset.decidable_pred_mem_upper_closure Finset.decidablePredMemUpperClosure
instance decidablePredMemLowerClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
- DecidablePred (· ∈ lowerClosure (s : Set α)) := fun _ => Finset.decidableDexistsFinset
+ DecidablePred (· ∈ lowerClosure (s : Set α)) := fun _ => Finset.decidableDExistsFinset
#align finset.decidable_pred_mem_lower_closure Finset.decidablePredMemLowerClosure
end Finset
@@ -305,6 +305,7 @@ theorem sups_sups_sups_comm : s ⊻ t ⊻ (u ⊻ v) = s ⊻ u ⊻ (t ⊻ v) :=
variable [@DecidableRel α (· ≤ ·)]
+#print Finset.filter_sups_le /-
theorem filter_sups_le (s t : Finset α) (a : α) :
((s ⊻ t).filterₓ fun b => b ≤ a) = (s.filterₓ fun b => b ≤ a) ⊻ t.filterₓ fun b => b ≤ a :=
by
@@ -317,6 +318,7 @@ theorem filter_sups_le (s t : Finset α) (a : α) :
· rintro ⟨b, hb, c, hc, _, rfl⟩
exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, sup_le hb.2 hc.2⟩
#align finset.filter_sups_le Finset.filter_sups_le
+-/
end Sups
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-/
-import Mathbin.Data.Finset.NAry
-import Mathbin.Data.Set.Sups
+import Data.Finset.NAry
+import Data.Set.Sups
#align_import data.finset.sups from "leanprover-community/mathlib"@"8818fdefc78642a7e6afcd20be5c184f3c7d9699"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8818fdefc78642a7e6afcd20be5c184f3c7d9699
@@ -6,7 +6,7 @@ Authors: Yaël Dillies
import Mathbin.Data.Finset.NAry
import Mathbin.Data.Set.Sups
-#align_import data.finset.sups from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
+#align_import data.finset.sups from "leanprover-community/mathlib"@"8818fdefc78642a7e6afcd20be5c184f3c7d9699"
/-!
# Set family operations
@@ -40,6 +40,21 @@ open Function
open scoped SetFamily
+-- TODO: Is there a better spot for those two instances?
+namespace Finset
+
+variable {α : Type _} [Preorder α] {s t : Set α} {a : α}
+
+instance decidablePredMemUpperClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
+ DecidablePred (· ∈ upperClosure (s : Set α)) := fun _ => Finset.decidableDexistsFinset
+#align finset.decidable_pred_mem_upper_closure Finset.decidablePredMemUpperClosure
+
+instance decidablePredMemLowerClosure (s : Finset α) [@DecidableRel α (· ≤ ·)] :
+ DecidablePred (· ∈ lowerClosure (s : Set α)) := fun _ => Finset.decidableDexistsFinset
+#align finset.decidable_pred_mem_lower_closure Finset.decidablePredMemLowerClosure
+
+end Finset
+
variable {α : Type _} [DecidableEq α]
namespace Finset
@@ -288,6 +303,21 @@ theorem sups_sups_sups_comm : s ⊻ t ⊻ (u ⊻ v) = s ⊻ u ⊻ (t ⊻ v) :=
#align finset.sups_sups_sups_comm Finset.sups_sups_sups_comm
-/
+variable [@DecidableRel α (· ≤ ·)]
+
+theorem filter_sups_le (s t : Finset α) (a : α) :
+ ((s ⊻ t).filterₓ fun b => b ≤ a) = (s.filterₓ fun b => b ≤ a) ⊻ t.filterₓ fun b => b ≤ a :=
+ by
+ ext b
+ simp only [mem_filter, mem_sups]
+ constructor
+ · rintro ⟨⟨b, hb, c, hc, rfl⟩, ha⟩
+ rw [sup_le_iff] at ha
+ exact ⟨_, ⟨hb, ha.1⟩, _, ⟨hc, ha.2⟩, rfl⟩
+ · rintro ⟨b, hb, c, hc, _, rfl⟩
+ exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, sup_le hb.2 hc.2⟩
+#align finset.filter_sups_le Finset.filter_sups_le
+
end Sups
section Infs
@@ -534,6 +564,21 @@ theorem infs_infs_infs_comm : s ⊼ t ⊼ (u ⊼ v) = s ⊼ u ⊼ (t ⊼ v) :=
#align finset.infs_infs_infs_comm Finset.infs_infs_infs_comm
-/
+variable [@DecidableRel α (· ≤ ·)]
+
+theorem filter_infs_ge (s t : Finset α) (a : α) :
+ ((s ⊼ t).filterₓ fun b => a ≤ b) = (s.filterₓ fun b => a ≤ b) ⊼ t.filterₓ fun b => a ≤ b :=
+ by
+ ext b
+ simp only [mem_filter, mem_infs]
+ constructor
+ · rintro ⟨⟨b, hb, c, hc, rfl⟩, ha⟩
+ rw [le_inf_iff] at ha
+ exact ⟨_, ⟨hb, ha.1⟩, _, ⟨hc, ha.2⟩, rfl⟩
+ · rintro ⟨b, hb, c, hc, _, rfl⟩
+ exact ⟨⟨_, hb.1, _, hc.1, rfl⟩, le_inf hb.2 hc.2⟩
+#align finset.filter_infs_ge Finset.filter_infs_ge
+
end Infs
open scoped FinsetFamily
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-
-! This file was ported from Lean 3 source module data.finset.sups
-! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.NAry
import Mathbin.Data.Set.Sups
+#align_import data.finset.sups from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
+
/-!
# Set family operations
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -62,9 +62,11 @@ scoped[FinsetFamily] attribute [instance] Finset.hasSups
variable {s t} {a b c : α}
+#print Finset.mem_sups /-
@[simp]
theorem mem_sups : c ∈ s ⊻ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊔ b = c := by simp [(· ⊻ ·)]
#align finset.mem_sups Finset.mem_sups
+-/
variable (s t)
@@ -82,16 +84,20 @@ theorem card_sups_le : (s ⊻ t).card ≤ s.card * t.card :=
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.card_sups_iff /-
theorem card_sups_iff :
(s ⊻ t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun x => x.1 ⊔ x.2 :=
card_image₂_iff
#align finset.card_sups_iff Finset.card_sups_iff
+-/
variable {s s₁ s₂ t t₁ t₂ u}
+#print Finset.sup_mem_sups /-
theorem sup_mem_sups : a ∈ s → b ∈ t → a ⊔ b ∈ s ⊻ t :=
mem_image₂_of_mem
#align finset.sup_mem_sups Finset.sup_mem_sups
+-/
#print Finset.sups_subset /-
theorem sups_subset : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ ⊻ t₁ ⊆ s₂ ⊻ t₂ :=
@@ -111,22 +117,30 @@ theorem sups_subset_right : s₁ ⊆ s₂ → s₁ ⊻ t ⊆ s₂ ⊻ t :=
#align finset.sups_subset_right Finset.sups_subset_right
-/
+#print Finset.image_subset_sups_left /-
theorem image_subset_sups_left : b ∈ t → (s.image fun a => a ⊔ b) ⊆ s ⊻ t :=
image_subset_image₂_left
#align finset.image_subset_sups_left Finset.image_subset_sups_left
+-/
+#print Finset.image_subset_sups_right /-
theorem image_subset_sups_right : a ∈ s → t.image ((· ⊔ ·) a) ⊆ s ⊻ t :=
image_subset_image₂_right
#align finset.image_subset_sups_right Finset.image_subset_sups_right
+-/
+#print Finset.forall_sups_iff /-
theorem forall_sups_iff {p : α → Prop} : (∀ c ∈ s ⊻ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊔ b) :=
forall_image₂_iff
#align finset.forall_sups_iff Finset.forall_sups_iff
+-/
+#print Finset.sups_subset_iff /-
@[simp]
theorem sups_subset_iff : s ⊻ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊔ b ∈ u :=
image₂_subset_iff
#align finset.sups_subset_iff Finset.sups_subset_iff
+-/
#print Finset.sups_nonempty /-
@[simp]
@@ -174,19 +188,25 @@ theorem sups_eq_empty : s ⊻ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.sups_eq_empty Finset.sups_eq_empty
-/
+#print Finset.singleton_sups /-
@[simp]
theorem singleton_sups : {a} ⊻ t = t.image fun b => a ⊔ b :=
image₂_singleton_left
#align finset.singleton_sups Finset.singleton_sups
+-/
+#print Finset.sups_singleton /-
@[simp]
theorem sups_singleton : s ⊻ {b} = s.image fun a => a ⊔ b :=
image₂_singleton_right
#align finset.sups_singleton Finset.sups_singleton
+-/
+#print Finset.singleton_sups_singleton /-
theorem singleton_sups_singleton : ({a} ⊻ {b} : Finset α) = {a ⊔ b} :=
image₂_singleton
#align finset.singleton_sups_singleton Finset.singleton_sups_singleton
+-/
#print Finset.sups_union_left /-
theorem sups_union_left : (s₁ ∪ s₂) ⊻ t = s₁ ⊻ t ∪ s₂ ⊻ t :=
@@ -221,19 +241,25 @@ theorem subset_sups {s t : Set α} :
variable (s t u v)
+#print Finset.biUnion_image_sup_left /-
theorem biUnion_image_sup_left : (s.biUnion fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
biUnion_image_left
#align finset.bUnion_image_sup_left Finset.biUnion_image_sup_left
+-/
+#print Finset.biUnion_image_sup_right /-
theorem biUnion_image_sup_right : (t.biUnion fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
biUnion_image_right
#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_right
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.image_sup_product /-
@[simp]
theorem image_sup_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊔ ·)) = s ⊻ t :=
image_uncurry_product _ _ _
#align finset.image_sup_product Finset.image_sup_product
+-/
#print Finset.sups_assoc /-
theorem sups_assoc : s ⊻ t ⊻ u = s ⊻ (t ⊻ u) :=
@@ -282,9 +308,11 @@ scoped[FinsetFamily] attribute [instance] Finset.hasInfs
variable {s t} {a b c : α}
+#print Finset.mem_infs /-
@[simp]
theorem mem_infs : c ∈ s ⊼ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊓ b = c := by simp [(· ⊼ ·)]
#align finset.mem_infs Finset.mem_infs
+-/
variable (s t)
@@ -302,16 +330,20 @@ theorem card_infs_le : (s ⊼ t).card ≤ s.card * t.card :=
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.card_infs_iff /-
theorem card_infs_iff :
(s ⊼ t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun x => x.1 ⊓ x.2 :=
card_image₂_iff
#align finset.card_infs_iff Finset.card_infs_iff
+-/
variable {s s₁ s₂ t t₁ t₂ u}
+#print Finset.inf_mem_infs /-
theorem inf_mem_infs : a ∈ s → b ∈ t → a ⊓ b ∈ s ⊼ t :=
mem_image₂_of_mem
#align finset.inf_mem_infs Finset.inf_mem_infs
+-/
#print Finset.infs_subset /-
theorem infs_subset : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ ⊼ t₁ ⊆ s₂ ⊼ t₂ :=
@@ -331,22 +363,30 @@ theorem infs_subset_right : s₁ ⊆ s₂ → s₁ ⊼ t ⊆ s₂ ⊼ t :=
#align finset.infs_subset_right Finset.infs_subset_right
-/
+#print Finset.image_subset_infs_left /-
theorem image_subset_infs_left : b ∈ t → (s.image fun a => a ⊓ b) ⊆ s ⊼ t :=
image_subset_image₂_left
#align finset.image_subset_infs_left Finset.image_subset_infs_left
+-/
+#print Finset.image_subset_infs_right /-
theorem image_subset_infs_right : a ∈ s → t.image ((· ⊓ ·) a) ⊆ s ⊼ t :=
image_subset_image₂_right
#align finset.image_subset_infs_right Finset.image_subset_infs_right
+-/
+#print Finset.forall_infs_iff /-
theorem forall_infs_iff {p : α → Prop} : (∀ c ∈ s ⊼ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊓ b) :=
forall_image₂_iff
#align finset.forall_infs_iff Finset.forall_infs_iff
+-/
+#print Finset.infs_subset_iff /-
@[simp]
theorem infs_subset_iff : s ⊼ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊓ b ∈ u :=
image₂_subset_iff
#align finset.infs_subset_iff Finset.infs_subset_iff
+-/
#print Finset.infs_nonempty /-
@[simp]
@@ -394,19 +434,25 @@ theorem infs_eq_empty : s ⊼ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.infs_eq_empty Finset.infs_eq_empty
-/
+#print Finset.singleton_infs /-
@[simp]
theorem singleton_infs : {a} ⊼ t = t.image fun b => a ⊓ b :=
image₂_singleton_left
#align finset.singleton_infs Finset.singleton_infs
+-/
+#print Finset.infs_singleton /-
@[simp]
theorem infs_singleton : s ⊼ {b} = s.image fun a => a ⊓ b :=
image₂_singleton_right
#align finset.infs_singleton Finset.infs_singleton
+-/
+#print Finset.singleton_infs_singleton /-
theorem singleton_infs_singleton : ({a} ⊼ {b} : Finset α) = {a ⊓ b} :=
image₂_singleton
#align finset.singleton_infs_singleton Finset.singleton_infs_singleton
+-/
#print Finset.infs_union_left /-
theorem infs_union_left : (s₁ ∪ s₂) ⊼ t = s₁ ⊼ t ∪ s₂ ⊼ t :=
@@ -441,19 +487,25 @@ theorem subset_infs {s t : Set α} :
variable (s t u v)
+#print Finset.biUnion_image_inf_left /-
theorem biUnion_image_inf_left : (s.biUnion fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
biUnion_image_left
#align finset.bUnion_image_inf_left Finset.biUnion_image_inf_left
+-/
+#print Finset.biUnion_image_inf_right /-
theorem biUnion_image_inf_right : (t.biUnion fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
biUnion_image_right
#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_right
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.image_inf_product /-
@[simp]
theorem image_inf_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊓ ·)) = s ⊼ t :=
image_uncurry_product _ _ _
#align finset.image_inf_product Finset.image_inf_product
+-/
#print Finset.infs_assoc /-
theorem infs_assoc : s ⊼ t ⊼ u = s ⊼ (t ⊼ u) :=
@@ -532,15 +584,16 @@ def disjSups : Finset α :=
#align finset.disj_sups Finset.disjSups
-/
--- mathport name: finset.disj_sups
scoped[FinsetFamily] infixl:74 " ○ " => Finset.disjSups
variable {s t u} {a b c : α}
+#print Finset.mem_disjSups /-
@[simp]
theorem mem_disjSups : c ∈ s ○ t ↔ ∃ a ∈ s, ∃ b ∈ t, Disjoint a b ∧ a ⊔ b = c := by
simp [disj_sups, and_assoc']
#align finset.mem_disj_sups Finset.mem_disjSups
+-/
#print Finset.disjSups_subset_sups /-
theorem disjSups_subset_sups : s ○ t ⊆ s ⊻ t :=
@@ -578,6 +631,7 @@ theorem disjSups_subset_right (hs : s₁ ⊆ s₂) : s₁ ○ t ⊆ s₂ ○ t :
#align finset.disj_sups_subset_right Finset.disjSups_subset_right
-/
+#print Finset.forall_disjSups_iff /-
theorem forall_disjSups_iff {p : α → Prop} :
(∀ c ∈ s ○ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoint a b → p (a ⊔ b) :=
by
@@ -586,11 +640,14 @@ theorem forall_disjSups_iff {p : α → Prop} :
rintro h _ ⟨a, ha, b, hb, hab, rfl⟩
exact h _ ha _ hb hab
#align finset.forall_disj_sups_iff Finset.forall_disjSups_iff
+-/
+#print Finset.disjSups_subset_iff /-
@[simp]
theorem disjSups_subset_iff : s ○ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoint a b → a ⊔ b ∈ u :=
forall_disjSups_iff
#align finset.disj_sups_subset_iff Finset.disjSups_subset_iff
+-/
#print Finset.Nonempty.of_disjSups_left /-
theorem Nonempty.of_disjSups_left : (s ○ t).Nonempty → s.Nonempty := by
@@ -616,9 +673,11 @@ theorem disjSups_empty_right : s ○ ∅ = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_right Finset.disjSups_empty_right
-/
+#print Finset.disjSups_singleton /-
theorem disjSups_singleton : ({a} ○ {b} : Finset α) = if Disjoint a b then {a ⊔ b} else ∅ := by
split_ifs <;> simp [disj_sups, filter_singleton, h]
#align finset.disj_sups_singleton Finset.disjSups_singleton
+-/
#print Finset.disjSups_union_left /-
theorem disjSups_union_left : (s₁ ∪ s₂) ○ t = s₁ ○ t ∪ s₂ ○ t := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -666,7 +666,7 @@ theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u)
refine' associative_of_commutative_of_le disj_sups_comm _
simp only [le_eq_subset, disj_sups_subset_iff, mem_disj_sups]
rintro s t u _ ⟨a, ha, b, hb, hab, rfl⟩ c hc habc
- rw [disjoint_sup_left] at habc
+ rw [disjoint_sup_left] at habc
exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, sup_assoc.symm⟩
#align finset.disj_sups_assoc Finset.disjSups_assoc
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -41,7 +41,7 @@ We define the following notation in locale `finset_family`:
open Function
-open SetFamily
+open scoped SetFamily
variable {α : Type _} [DecidableEq α]
@@ -487,7 +487,7 @@ theorem infs_infs_infs_comm : s ⊼ t ⊼ (u ⊼ v) = s ⊼ u ⊼ (t ⊼ v) :=
end Infs
-open FinsetFamily
+open scoped FinsetFamily
section DistribLattice
@@ -524,11 +524,13 @@ section DisjSups
variable [SemilatticeSup α] [OrderBot α] [@DecidableRel α Disjoint] (s s₁ s₂ t t₁ t₂ u : Finset α)
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.disjSups /-
/-- The finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t` and `a` and `b` are disjoint.
-/
def disjSups : Finset α :=
((s ×ˢ t).filterₓ fun ab : α × α => Disjoint ab.1 ab.2).image fun ab => ab.1 ⊔ ab.2
#align finset.disj_sups Finset.disjSups
+-/
-- mathport name: finset.disj_sups
scoped[FinsetFamily] infixl:74 " ○ " => Finset.disjSups
@@ -540,31 +542,41 @@ theorem mem_disjSups : c ∈ s ○ t ↔ ∃ a ∈ s, ∃ b ∈ t, Disjoint a b
simp [disj_sups, and_assoc']
#align finset.mem_disj_sups Finset.mem_disjSups
+#print Finset.disjSups_subset_sups /-
theorem disjSups_subset_sups : s ○ t ⊆ s ⊻ t :=
by
simp_rw [subset_iff, mem_sups, mem_disj_sups]
exact fun c ⟨a, b, ha, hb, h, hc⟩ => ⟨a, b, ha, hb, hc⟩
#align finset.disj_sups_subset_sups Finset.disjSups_subset_sups
+-/
variable (s t)
+#print Finset.card_disjSups_le /-
theorem card_disjSups_le : (s ○ t).card ≤ s.card * t.card :=
(card_le_of_subset disjSups_subset_sups).trans <| card_sups_le _ _
#align finset.card_disj_sups_le Finset.card_disjSups_le
+-/
variable {s s₁ s₂ t t₁ t₂ u}
+#print Finset.disjSups_subset /-
theorem disjSups_subset (hs : s₁ ⊆ s₂) (ht : t₁ ⊆ t₂) : s₁ ○ t₁ ⊆ s₂ ○ t₂ :=
image_subset_image <| filter_subset_filter _ <| product_subset_product hs ht
#align finset.disj_sups_subset Finset.disjSups_subset
+-/
+#print Finset.disjSups_subset_left /-
theorem disjSups_subset_left (ht : t₁ ⊆ t₂) : s ○ t₁ ⊆ s ○ t₂ :=
disjSups_subset Subset.rfl ht
#align finset.disj_sups_subset_left Finset.disjSups_subset_left
+-/
+#print Finset.disjSups_subset_right /-
theorem disjSups_subset_right (hs : s₁ ⊆ s₂) : s₁ ○ t ⊆ s₂ ○ t :=
disjSups_subset hs Subset.rfl
#align finset.disj_sups_subset_right Finset.disjSups_subset_right
+-/
theorem forall_disjSups_iff {p : α → Prop} :
(∀ c ∈ s ○ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoint a b → p (a ⊔ b) :=
@@ -580,56 +592,75 @@ theorem disjSups_subset_iff : s ○ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoi
forall_disjSups_iff
#align finset.disj_sups_subset_iff Finset.disjSups_subset_iff
+#print Finset.Nonempty.of_disjSups_left /-
theorem Nonempty.of_disjSups_left : (s ○ t).Nonempty → s.Nonempty := by
simp_rw [Finset.Nonempty, mem_disj_sups]; exact fun ⟨_, a, ha, _⟩ => ⟨a, ha⟩
#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_left
+-/
+#print Finset.Nonempty.of_disjSups_right /-
theorem Nonempty.of_disjSups_right : (s ○ t).Nonempty → t.Nonempty := by
simp_rw [Finset.Nonempty, mem_disj_sups]; exact fun ⟨_, _, _, b, hb, _⟩ => ⟨b, hb⟩
#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_right
+-/
+#print Finset.disjSups_empty_left /-
@[simp]
theorem disjSups_empty_left : ∅ ○ t = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_left Finset.disjSups_empty_left
+-/
+#print Finset.disjSups_empty_right /-
@[simp]
theorem disjSups_empty_right : s ○ ∅ = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_right Finset.disjSups_empty_right
+-/
theorem disjSups_singleton : ({a} ○ {b} : Finset α) = if Disjoint a b then {a ⊔ b} else ∅ := by
split_ifs <;> simp [disj_sups, filter_singleton, h]
#align finset.disj_sups_singleton Finset.disjSups_singleton
+#print Finset.disjSups_union_left /-
theorem disjSups_union_left : (s₁ ∪ s₂) ○ t = s₁ ○ t ∪ s₂ ○ t := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_left Finset.disjSups_union_left
+-/
+#print Finset.disjSups_union_right /-
theorem disjSups_union_right : s ○ (t₁ ∪ t₂) = s ○ t₁ ∪ s ○ t₂ := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_right Finset.disjSups_union_right
+-/
+#print Finset.disjSups_inter_subset_left /-
theorem disjSups_inter_subset_left : (s₁ ∩ s₂) ○ t ⊆ s₁ ○ t ∩ s₂ ○ t := by
simpa only [disj_sups, inter_product, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_left Finset.disjSups_inter_subset_left
+-/
+#print Finset.disjSups_inter_subset_right /-
theorem disjSups_inter_subset_right : s ○ (t₁ ∩ t₂) ⊆ s ○ t₁ ∩ s ○ t₂ := by
simpa only [disj_sups, product_inter, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_right Finset.disjSups_inter_subset_right
+-/
variable (s t)
+#print Finset.disjSups_comm /-
theorem disjSups_comm : s ○ t = t ○ s := by ext; rw [mem_disj_sups, exists₂_comm];
simp [sup_comm, disjoint_comm]
#align finset.disj_sups_comm Finset.disjSups_comm
+-/
end DisjSups
-open FinsetFamily
+open scoped FinsetFamily
section DistribLattice
variable [DistribLattice α] [OrderBot α] [@DecidableRel α Disjoint] (s t u v : Finset α)
+#print Finset.disjSups_assoc /-
theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u) :=
by
refine' associative_of_commutative_of_le disj_sups_comm _
@@ -638,17 +669,24 @@ theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u)
rw [disjoint_sup_left] at habc
exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, sup_assoc.symm⟩
#align finset.disj_sups_assoc Finset.disjSups_assoc
+-/
+#print Finset.disjSups_left_comm /-
theorem disjSups_left_comm : s ○ (t ○ u) = t ○ (s ○ u) := by
simp_rw [← disj_sups_assoc, disj_sups_comm s]
#align finset.disj_sups_left_comm Finset.disjSups_left_comm
+-/
+#print Finset.disjSups_right_comm /-
theorem disjSups_right_comm : s ○ t ○ u = s ○ u ○ t := by simp_rw [disj_sups_assoc, disj_sups_comm]
#align finset.disj_sups_right_comm Finset.disjSups_right_comm
+-/
+#print Finset.disjSups_disjSups_disjSups_comm /-
theorem disjSups_disjSups_disjSups_comm : s ○ t ○ (u ○ v) = s ○ u ○ (t ○ v) := by
simp_rw [← disj_sups_assoc, disj_sups_right_comm]
#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_comm
+-/
end DistribLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -62,12 +62,6 @@ scoped[FinsetFamily] attribute [instance] Finset.hasSups
variable {s t} {a b c : α}
-/- warning: finset.mem_sups -> Finset.mem_sups is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) c)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) c)))))
-Case conversion may be inaccurate. Consider using '#align finset.mem_sups Finset.mem_supsₓ'. -/
@[simp]
theorem mem_sups : c ∈ s ⊻ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊔ b = c := by simp [(· ⊻ ·)]
#align finset.mem_sups Finset.mem_sups
@@ -87,12 +81,6 @@ theorem card_sups_le : (s ⊻ t).card ≤ s.card * t.card :=
#align finset.card_sups_le Finset.card_sups_le
-/
-/- warning: finset.card_sups_iff -> Finset.card_sups_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, 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} α))) s) ((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)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, u1} α α (Finset.toSet.{u1} α s) (Finset.toSet.{u1} α t)))
-Case conversion may be inaccurate. Consider using '#align finset.card_sups_iff Finset.card_sups_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem card_sups_iff :
(s ⊻ t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun x => x.1 ⊔ x.2 :=
@@ -101,12 +89,6 @@ theorem card_sups_iff :
variable {s s₁ s₂ t t₁ t₂ u}
-/- warning: finset.sup_mem_sups -> Finset.sup_mem_sups is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-Case conversion may be inaccurate. Consider using '#align finset.sup_mem_sups Finset.sup_mem_supsₓ'. -/
theorem sup_mem_sups : a ∈ s → b ∈ t → a ⊔ b ∈ s ⊻ t :=
mem_image₂_of_mem
#align finset.sup_mem_sups Finset.sup_mem_sups
@@ -129,42 +111,18 @@ theorem sups_subset_right : s₁ ⊆ s₂ → s₁ ⊻ t ⊆ s₂ ⊻ t :=
#align finset.sups_subset_right Finset.sups_subset_right
-/
-/- warning: finset.image_subset_sups_left -> Finset.image_subset_sups_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-Case conversion may be inaccurate. Consider using '#align finset.image_subset_sups_left Finset.image_subset_sups_leftₓ'. -/
theorem image_subset_sups_left : b ∈ t → (s.image fun a => a ⊔ b) ⊆ s ⊻ t :=
image_subset_image₂_left
#align finset.image_subset_sups_left Finset.image_subset_sups_left
-/- warning: finset.image_subset_sups_right -> Finset.image_subset_sups_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a) t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (x._@.Mathlib.Data.Finset.Sups._hyg.772 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a x._@.Mathlib.Data.Finset.Sups._hyg.772) t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-Case conversion may be inaccurate. Consider using '#align finset.image_subset_sups_right Finset.image_subset_sups_rightₓ'. -/
theorem image_subset_sups_right : a ∈ s → t.image ((· ⊔ ·) a) ⊆ s ⊻ t :=
image_subset_image₂_right
#align finset.image_subset_sups_right Finset.image_subset_sups_right
-/- warning: finset.forall_sups_iff -> Finset.forall_sups_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (p (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b))))
-Case conversion may be inaccurate. Consider using '#align finset.forall_sups_iff Finset.forall_sups_iffₓ'. -/
theorem forall_sups_iff {p : α → Prop} : (∀ c ∈ s ⊻ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊔ b) :=
forall_image₂_iff
#align finset.forall_sups_iff Finset.forall_sups_iff
-/- warning: finset.sups_subset_iff -> Finset.sups_subset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) u)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) u)))
-Case conversion may be inaccurate. Consider using '#align finset.sups_subset_iff Finset.sups_subset_iffₓ'. -/
@[simp]
theorem sups_subset_iff : s ⊻ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊔ b ∈ u :=
image₂_subset_iff
@@ -216,34 +174,16 @@ theorem sups_eq_empty : s ⊻ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.sups_eq_empty Finset.sups_eq_empty
-/
-/- warning: finset.singleton_sups -> Finset.singleton_sups is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) t)
-Case conversion may be inaccurate. Consider using '#align finset.singleton_sups Finset.singleton_supsₓ'. -/
@[simp]
theorem singleton_sups : {a} ⊻ t = t.image fun b => a ⊔ b :=
image₂_singleton_left
#align finset.singleton_sups Finset.singleton_sups
-/- warning: finset.sups_singleton -> Finset.sups_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s)
-Case conversion may be inaccurate. Consider using '#align finset.sups_singleton Finset.sups_singletonₓ'. -/
@[simp]
theorem sups_singleton : s ⊻ {b} = s.image fun a => a ⊔ b :=
image₂_singleton_right
#align finset.sups_singleton Finset.sups_singleton
-/- warning: finset.singleton_sups_singleton -> Finset.singleton_sups_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b))
-Case conversion may be inaccurate. Consider using '#align finset.singleton_sups_singleton Finset.singleton_sups_singletonₓ'. -/
theorem singleton_sups_singleton : ({a} ⊻ {b} : Finset α) = {a ⊔ b} :=
image₂_singleton
#align finset.singleton_sups_singleton Finset.singleton_sups_singleton
@@ -281,32 +221,14 @@ theorem subset_sups {s t : Set α} :
variable (s t u v)
-/- warning: finset.bUnion_image_sup_left -> Finset.biUnion_image_sup_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.1857 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.1859 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.1857 x._@.Mathlib.Data.Finset.Sups._hyg.1859) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_left Finset.biUnion_image_sup_leftₓ'. -/
theorem biUnion_image_sup_left : (s.biUnion fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
biUnion_image_left
#align finset.bUnion_image_sup_left Finset.biUnion_image_sup_left
-/- warning: finset.bUnion_image_sup_right -> Finset.biUnion_image_sup_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_rightₓ'. -/
theorem biUnion_image_sup_right : (t.biUnion fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
biUnion_image_right
#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_right
-/- warning: finset.image_sup_product -> Finset.image_sup_product is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2))) (Finset.product.{u1, u1} α α s t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (fun (x._@.Mathlib.Data.Finset.Sups._hyg.1973 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.1975 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.1973 x._@.Mathlib.Data.Finset.Sups._hyg.1975)) (Finset.product.{u1, u1} α α s t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.image_sup_product Finset.image_sup_productₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem image_sup_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊔ ·)) = s ⊻ t :=
@@ -360,12 +282,6 @@ scoped[FinsetFamily] attribute [instance] Finset.hasInfs
variable {s t} {a b c : α}
-/- warning: finset.mem_infs -> Finset.mem_infs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) c)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) (Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) c)))))
-Case conversion may be inaccurate. Consider using '#align finset.mem_infs Finset.mem_infsₓ'. -/
@[simp]
theorem mem_infs : c ∈ s ⊼ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊓ b = c := by simp [(· ⊼ ·)]
#align finset.mem_infs Finset.mem_infs
@@ -385,12 +301,6 @@ theorem card_infs_le : (s ⊼ t).card ≤ s.card * t.card :=
#align finset.card_infs_le Finset.card_infs_le
-/
-/- warning: finset.card_infs_iff -> Finset.card_infs_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, 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} α))) s) ((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)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, u1} α α (Finset.toSet.{u1} α s) (Finset.toSet.{u1} α t)))
-Case conversion may be inaccurate. Consider using '#align finset.card_infs_iff Finset.card_infs_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem card_infs_iff :
(s ⊼ t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun x => x.1 ⊓ x.2 :=
@@ -399,12 +309,6 @@ theorem card_infs_iff :
variable {s s₁ s₂ t t₁ t₂ u}
-/- warning: finset.inf_mem_infs -> Finset.inf_mem_infs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-Case conversion may be inaccurate. Consider using '#align finset.inf_mem_infs Finset.inf_mem_infsₓ'. -/
theorem inf_mem_infs : a ∈ s → b ∈ t → a ⊓ b ∈ s ⊼ t :=
mem_image₂_of_mem
#align finset.inf_mem_infs Finset.inf_mem_infs
@@ -427,42 +331,18 @@ theorem infs_subset_right : s₁ ⊆ s₂ → s₁ ⊼ t ⊆ s₂ ⊼ t :=
#align finset.infs_subset_right Finset.infs_subset_right
-/
-/- warning: finset.image_subset_infs_left -> Finset.image_subset_infs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-Case conversion may be inaccurate. Consider using '#align finset.image_subset_infs_left Finset.image_subset_infs_leftₓ'. -/
theorem image_subset_infs_left : b ∈ t → (s.image fun a => a ⊓ b) ⊆ s ⊼ t :=
image_subset_image₂_left
#align finset.image_subset_infs_left Finset.image_subset_infs_left
-/- warning: finset.image_subset_infs_right -> Finset.image_subset_infs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a) t) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (x._@.Mathlib.Data.Finset.Sups._hyg.3023 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a x._@.Mathlib.Data.Finset.Sups._hyg.3023) t) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-Case conversion may be inaccurate. Consider using '#align finset.image_subset_infs_right Finset.image_subset_infs_rightₓ'. -/
theorem image_subset_infs_right : a ∈ s → t.image ((· ⊓ ·) a) ⊆ s ⊼ t :=
image_subset_image₂_right
#align finset.image_subset_infs_right Finset.image_subset_infs_right
-/- warning: finset.forall_infs_iff -> Finset.forall_infs_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (p (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b))))
-Case conversion may be inaccurate. Consider using '#align finset.forall_infs_iff Finset.forall_infs_iffₓ'. -/
theorem forall_infs_iff {p : α → Prop} : (∀ c ∈ s ⊼ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊓ b) :=
forall_image₂_iff
#align finset.forall_infs_iff Finset.forall_infs_iff
-/- warning: finset.infs_subset_iff -> Finset.infs_subset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) u)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) u)))
-Case conversion may be inaccurate. Consider using '#align finset.infs_subset_iff Finset.infs_subset_iffₓ'. -/
@[simp]
theorem infs_subset_iff : s ⊼ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊓ b ∈ u :=
image₂_subset_iff
@@ -514,34 +394,16 @@ theorem infs_eq_empty : s ⊼ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.infs_eq_empty Finset.infs_eq_empty
-/
-/- warning: finset.singleton_infs -> Finset.singleton_infs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) t)
-Case conversion may be inaccurate. Consider using '#align finset.singleton_infs Finset.singleton_infsₓ'. -/
@[simp]
theorem singleton_infs : {a} ⊼ t = t.image fun b => a ⊓ b :=
image₂_singleton_left
#align finset.singleton_infs Finset.singleton_infs
-/- warning: finset.infs_singleton -> Finset.infs_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s)
-Case conversion may be inaccurate. Consider using '#align finset.infs_singleton Finset.infs_singletonₓ'. -/
@[simp]
theorem infs_singleton : s ⊼ {b} = s.image fun a => a ⊓ b :=
image₂_singleton_right
#align finset.infs_singleton Finset.infs_singleton
-/- warning: finset.singleton_infs_singleton -> Finset.singleton_infs_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b))
-Case conversion may be inaccurate. Consider using '#align finset.singleton_infs_singleton Finset.singleton_infs_singletonₓ'. -/
theorem singleton_infs_singleton : ({a} ⊼ {b} : Finset α) = {a ⊓ b} :=
image₂_singleton
#align finset.singleton_infs_singleton Finset.singleton_infs_singleton
@@ -579,32 +441,14 @@ theorem subset_infs {s t : Set α} :
variable (s t u v)
-/- warning: finset.bUnion_image_inf_left -> Finset.biUnion_image_inf_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.4108 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.4110 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.4108 x._@.Mathlib.Data.Finset.Sups._hyg.4110) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_left Finset.biUnion_image_inf_leftₓ'. -/
theorem biUnion_image_inf_left : (s.biUnion fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
biUnion_image_left
#align finset.bUnion_image_inf_left Finset.biUnion_image_inf_left
-/- warning: finset.bUnion_image_inf_right -> Finset.biUnion_image_inf_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_rightₓ'. -/
theorem biUnion_image_inf_right : (t.biUnion fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
biUnion_image_right
#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_right
-/- warning: finset.image_inf_product -> Finset.image_inf_product is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2))) (Finset.product.{u1, u1} α α s t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (fun (x._@.Mathlib.Data.Finset.Sups._hyg.4224 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.4226 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.4224 x._@.Mathlib.Data.Finset.Sups._hyg.4226)) (Finset.product.{u1, u1} α α s t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.image_inf_product Finset.image_inf_productₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem image_inf_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊓ ·)) = s ⊼ t :=
@@ -679,12 +523,6 @@ section DisjSups
variable [SemilatticeSup α] [OrderBot α] [@DecidableRel α Disjoint] (s s₁ s₂ t t₁ t₂ u : Finset α)
-/- warning: finset.disj_sups -> Finset.disjSups is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)], (Finset.{u1} α) -> (Finset.{u1} α) -> (Finset.{u1} α)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)], (Finset.{u1} α) -> (Finset.{u1} α) -> (Finset.{u1} α)
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups Finset.disjSupsₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t` and `a` and `b` are disjoint.
-/
@@ -697,23 +535,11 @@ scoped[FinsetFamily] infixl:74 " ○ " => Finset.disjSups
variable {s t u} {a b c : α}
-/- warning: finset.mem_disj_sups -> Finset.mem_disjSups is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => And (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) c))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) (And (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) c))))))
-Case conversion may be inaccurate. Consider using '#align finset.mem_disj_sups Finset.mem_disjSupsₓ'. -/
@[simp]
theorem mem_disjSups : c ∈ s ○ t ↔ ∃ a ∈ s, ∃ b ∈ t, Disjoint a b ∧ a ⊔ b = c := by
simp [disj_sups, and_assoc']
#align finset.mem_disj_sups Finset.mem_disjSups
-/- warning: finset.disj_sups_subset_sups -> Finset.disjSups_subset_sups is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_sups Finset.disjSups_subset_supsₓ'. -/
theorem disjSups_subset_sups : s ○ t ⊆ s ⊻ t :=
by
simp_rw [subset_iff, mem_sups, mem_disj_sups]
@@ -722,54 +548,24 @@ theorem disjSups_subset_sups : s ○ t ⊆ s ⊻ t :=
variable (s t)
-/- warning: finset.card_disj_sups_le -> Finset.card_disjSups_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} α s) (Finset.card.{u1} α t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), LE.le.{0} Nat instLENat (Finset.card.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} α s) (Finset.card.{u1} α t))
-Case conversion may be inaccurate. Consider using '#align finset.card_disj_sups_le Finset.card_disjSups_leₓ'. -/
theorem card_disjSups_le : (s ○ t).card ≤ s.card * t.card :=
(card_le_of_subset disjSups_subset_sups).trans <| card_sups_le _ _
#align finset.card_disj_sups_le Finset.card_disjSups_le
variable {s s₁ s₂ t t₁ t₂ u}
-/- warning: finset.disj_sups_subset -> Finset.disjSups_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t₂))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t₂))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset Finset.disjSups_subsetₓ'. -/
theorem disjSups_subset (hs : s₁ ⊆ s₂) (ht : t₁ ⊆ t₂) : s₁ ○ t₁ ⊆ s₂ ○ t₂ :=
image_subset_image <| filter_subset_filter _ <| product_subset_product hs ht
#align finset.disj_sups_subset Finset.disjSups_subset
-/- warning: finset.disj_sups_subset_left -> Finset.disjSups_subset_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_left Finset.disjSups_subset_leftₓ'. -/
theorem disjSups_subset_left (ht : t₁ ⊆ t₂) : s ○ t₁ ⊆ s ○ t₂ :=
disjSups_subset Subset.rfl ht
#align finset.disj_sups_subset_left Finset.disjSups_subset_left
-/- warning: finset.disj_sups_subset_right -> Finset.disjSups_subset_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_right Finset.disjSups_subset_rightₓ'. -/
theorem disjSups_subset_right (hs : s₁ ⊆ s₂) : s₁ ○ t ⊆ s₂ ○ t :=
disjSups_subset hs Subset.rfl
#align finset.disj_sups_subset_right Finset.disjSups_subset_right
-/- warning: finset.forall_disj_sups_iff -> Finset.forall_disjSups_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (p c)) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (p (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b))))
-Case conversion may be inaccurate. Consider using '#align finset.forall_disj_sups_iff Finset.forall_disjSups_iffₓ'. -/
theorem forall_disjSups_iff {p : α → Prop} :
(∀ c ∈ s ○ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoint a b → p (a ⊔ b) :=
by
@@ -779,115 +575,49 @@ theorem forall_disjSups_iff {p : α → Prop} :
exact h _ ha _ hb hab
#align finset.forall_disj_sups_iff Finset.forall_disjSups_iff
-/- warning: finset.disj_sups_subset_iff -> Finset.disjSups_subset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) u)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) u)))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_iff Finset.disjSups_subset_iffₓ'. -/
@[simp]
theorem disjSups_subset_iff : s ○ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoint a b → a ⊔ b ∈ u :=
forall_disjSups_iff
#align finset.disj_sups_subset_iff Finset.disjSups_subset_iff
-/- warning: finset.nonempty.of_disj_sups_left -> Finset.Nonempty.of_disjSups_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_leftₓ'. -/
theorem Nonempty.of_disjSups_left : (s ○ t).Nonempty → s.Nonempty := by
simp_rw [Finset.Nonempty, mem_disj_sups]; exact fun ⟨_, a, ha, _⟩ => ⟨a, ha⟩
#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_left
-/- warning: finset.nonempty.of_disj_sups_right -> Finset.Nonempty.of_disjSups_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α t)
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_rightₓ'. -/
theorem Nonempty.of_disjSups_right : (s ○ t).Nonempty → t.Nonempty := by
simp_rw [Finset.Nonempty, mem_disj_sups]; exact fun ⟨_, _, _, b, hb, _⟩ => ⟨b, hb⟩
#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_right
-/- warning: finset.disj_sups_empty_left -> Finset.disjSups_empty_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)) t) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α)) t) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_empty_left Finset.disjSups_empty_leftₓ'. -/
@[simp]
theorem disjSups_empty_left : ∅ ○ t = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_left Finset.disjSups_empty_left
-/- warning: finset.disj_sups_empty_right -> Finset.disjSups_empty_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_empty_right Finset.disjSups_empty_rightₓ'. -/
@[simp]
theorem disjSups_empty_right : s ○ ∅ = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_right Finset.disjSups_empty_right
-/- warning: finset.disj_sups_singleton -> Finset.disjSups_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (ite.{succ u1} (Finset.{u1} α) (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (_inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (ite.{succ u1} (Finset.{u1} α) (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (_inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α)))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_singleton Finset.disjSups_singletonₓ'. -/
theorem disjSups_singleton : ({a} ○ {b} : Finset α) = if Disjoint a b then {a ⊔ b} else ∅ := by
split_ifs <;> simp [disj_sups, filter_singleton, h]
#align finset.disj_sups_singleton Finset.disjSups_singleton
-/- warning: finset.disj_sups_union_left -> Finset.disjSups_union_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_union_left Finset.disjSups_union_leftₓ'. -/
theorem disjSups_union_left : (s₁ ∪ s₂) ○ t = s₁ ○ t ∪ s₂ ○ t := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_left Finset.disjSups_union_left
-/- warning: finset.disj_sups_union_right -> Finset.disjSups_union_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_union_right Finset.disjSups_union_rightₓ'. -/
theorem disjSups_union_right : s ○ (t₁ ∪ t₂) = s ○ t₁ ∪ s ○ t₂ := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_right Finset.disjSups_union_right
-/- warning: finset.disj_sups_inter_subset_left -> Finset.disjSups_inter_subset_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_inter_subset_left Finset.disjSups_inter_subset_leftₓ'. -/
theorem disjSups_inter_subset_left : (s₁ ∩ s₂) ○ t ⊆ s₁ ○ t ∩ s₂ ○ t := by
simpa only [disj_sups, inter_product, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_left Finset.disjSups_inter_subset_left
-/- warning: finset.disj_sups_inter_subset_right -> Finset.disjSups_inter_subset_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_inter_subset_right Finset.disjSups_inter_subset_rightₓ'. -/
theorem disjSups_inter_subset_right : s ○ (t₁ ∩ t₂) ⊆ s ○ t₁ ∩ s ○ t₂ := by
simpa only [disj_sups, product_inter, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_right Finset.disjSups_inter_subset_right
variable (s t)
-/- warning: finset.disj_sups_comm -> Finset.disjSups_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t s)
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_comm Finset.disjSups_commₓ'. -/
theorem disjSups_comm : s ○ t = t ○ s := by ext; rw [mem_disj_sups, exists₂_comm];
simp [sup_comm, disjoint_comm]
#align finset.disj_sups_comm Finset.disjSups_comm
@@ -900,12 +630,6 @@ section DistribLattice
variable [DistribLattice α] [OrderBot α] [@DecidableRel α Disjoint] (s t u v : Finset α)
-/- warning: finset.disj_sups_assoc -> Finset.disjSups_assoc is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_assoc Finset.disjSups_assocₓ'. -/
theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u) :=
by
refine' associative_of_commutative_of_le disj_sups_comm _
@@ -915,31 +639,13 @@ theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u)
exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, sup_assoc.symm⟩
#align finset.disj_sups_assoc Finset.disjSups_assoc
-/- warning: finset.disj_sups_left_comm -> Finset.disjSups_left_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_left_comm Finset.disjSups_left_commₓ'. -/
theorem disjSups_left_comm : s ○ (t ○ u) = t ○ (s ○ u) := by
simp_rw [← disj_sups_assoc, disj_sups_comm s]
#align finset.disj_sups_left_comm Finset.disjSups_left_comm
-/- warning: finset.disj_sups_right_comm -> Finset.disjSups_right_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) t)
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_right_comm Finset.disjSups_right_commₓ'. -/
theorem disjSups_right_comm : s ○ t ○ u = s ○ u ○ t := by simp_rw [disj_sups_assoc, disj_sups_comm]
#align finset.disj_sups_right_comm Finset.disjSups_right_comm
-/- warning: finset.disj_sups_disj_sups_disj_sups_comm -> Finset.disjSups_disjSups_disjSups_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α) (v : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) u v)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t v))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α) (v : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) u v)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t v))
-Case conversion may be inaccurate. Consider using '#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_commₓ'. -/
theorem disjSups_disjSups_disjSups_comm : s ○ t ○ (u ○ v) = s ○ u ○ (t ○ v) := by
simp_rw [← disj_sups_assoc, disj_sups_right_comm]
#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_comm
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -796,10 +796,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α s)
Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_leftₓ'. -/
-theorem Nonempty.of_disjSups_left : (s ○ t).Nonempty → s.Nonempty :=
- by
- simp_rw [Finset.Nonempty, mem_disj_sups]
- exact fun ⟨_, a, ha, _⟩ => ⟨a, ha⟩
+theorem Nonempty.of_disjSups_left : (s ○ t).Nonempty → s.Nonempty := by
+ simp_rw [Finset.Nonempty, mem_disj_sups]; exact fun ⟨_, a, ha, _⟩ => ⟨a, ha⟩
#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_left
/- warning: finset.nonempty.of_disj_sups_right -> Finset.Nonempty.of_disjSups_right is a dubious translation:
@@ -808,10 +806,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α t)
Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_rightₓ'. -/
-theorem Nonempty.of_disjSups_right : (s ○ t).Nonempty → t.Nonempty :=
- by
- simp_rw [Finset.Nonempty, mem_disj_sups]
- exact fun ⟨_, _, _, b, hb, _⟩ => ⟨b, hb⟩
+theorem Nonempty.of_disjSups_right : (s ○ t).Nonempty → t.Nonempty := by
+ simp_rw [Finset.Nonempty, mem_disj_sups]; exact fun ⟨_, _, _, b, hb, _⟩ => ⟨b, hb⟩
#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_right
/- warning: finset.disj_sups_empty_left -> Finset.disjSups_empty_left is a dubious translation:
@@ -892,9 +888,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t s)
Case conversion may be inaccurate. Consider using '#align finset.disj_sups_comm Finset.disjSups_commₓ'. -/
-theorem disjSups_comm : s ○ t = t ○ s := by
- ext
- rw [mem_disj_sups, exists₂_comm]
+theorem disjSups_comm : s ○ t = t ○ s := by ext; rw [mem_disj_sups, exists₂_comm];
simp [sup_comm, disjoint_comm]
#align finset.disj_sups_comm Finset.disjSups_comm
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -679,14 +679,18 @@ section DisjSups
variable [SemilatticeSup α] [OrderBot α] [@DecidableRel α Disjoint] (s s₁ s₂ t t₁ t₂ u : Finset α)
+/- warning: finset.disj_sups -> Finset.disjSups is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)], (Finset.{u1} α) -> (Finset.{u1} α) -> (Finset.{u1} α)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)], (Finset.{u1} α) -> (Finset.{u1} α) -> (Finset.{u1} α)
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups Finset.disjSupsₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print Finset.disjSups /-
/-- The finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t` and `a` and `b` are disjoint.
-/
def disjSups : Finset α :=
((s ×ˢ t).filterₓ fun ab : α × α => Disjoint ab.1 ab.2).image fun ab => ab.1 ⊔ ab.2
#align finset.disj_sups Finset.disjSups
--/
-- mathport name: finset.disj_sups
scoped[FinsetFamily] infixl:74 " ○ " => Finset.disjSups
@@ -695,7 +699,7 @@ variable {s t u} {a b c : α}
/- warning: finset.mem_disj_sups -> Finset.mem_disjSups is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => And (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) c))))))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => And (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) c))))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) (And (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) c))))))
Case conversion may be inaccurate. Consider using '#align finset.mem_disj_sups Finset.mem_disjSupsₓ'. -/
@@ -704,45 +708,65 @@ theorem mem_disjSups : c ∈ s ○ t ↔ ∃ a ∈ s, ∃ b ∈ t, Disjoint a b
simp [disj_sups, and_assoc']
#align finset.mem_disj_sups Finset.mem_disjSups
-#print Finset.disjSups_subset_sups /-
+/- warning: finset.disj_sups_subset_sups -> Finset.disjSups_subset_sups is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_sups Finset.disjSups_subset_supsₓ'. -/
theorem disjSups_subset_sups : s ○ t ⊆ s ⊻ t :=
by
simp_rw [subset_iff, mem_sups, mem_disj_sups]
exact fun c ⟨a, b, ha, hb, h, hc⟩ => ⟨a, b, ha, hb, hc⟩
#align finset.disj_sups_subset_sups Finset.disjSups_subset_sups
--/
variable (s t)
-#print Finset.card_disjSups_le /-
+/- warning: finset.card_disj_sups_le -> Finset.card_disjSups_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} α s) (Finset.card.{u1} α t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), LE.le.{0} Nat instLENat (Finset.card.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} α s) (Finset.card.{u1} α t))
+Case conversion may be inaccurate. Consider using '#align finset.card_disj_sups_le Finset.card_disjSups_leₓ'. -/
theorem card_disjSups_le : (s ○ t).card ≤ s.card * t.card :=
(card_le_of_subset disjSups_subset_sups).trans <| card_sups_le _ _
#align finset.card_disj_sups_le Finset.card_disjSups_le
--/
variable {s s₁ s₂ t t₁ t₂ u}
-#print Finset.disjSups_subset /-
+/- warning: finset.disj_sups_subset -> Finset.disjSups_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t₂))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t₂))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset Finset.disjSups_subsetₓ'. -/
theorem disjSups_subset (hs : s₁ ⊆ s₂) (ht : t₁ ⊆ t₂) : s₁ ○ t₁ ⊆ s₂ ○ t₂ :=
image_subset_image <| filter_subset_filter _ <| product_subset_product hs ht
#align finset.disj_sups_subset Finset.disjSups_subset
--/
-#print Finset.disjSups_subset_left /-
+/- warning: finset.disj_sups_subset_left -> Finset.disjSups_subset_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_left Finset.disjSups_subset_leftₓ'. -/
theorem disjSups_subset_left (ht : t₁ ⊆ t₂) : s ○ t₁ ⊆ s ○ t₂ :=
disjSups_subset Subset.rfl ht
#align finset.disj_sups_subset_left Finset.disjSups_subset_left
--/
-#print Finset.disjSups_subset_right /-
+/- warning: finset.disj_sups_subset_right -> Finset.disjSups_subset_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_right Finset.disjSups_subset_rightₓ'. -/
theorem disjSups_subset_right (hs : s₁ ⊆ s₂) : s₁ ○ t ⊆ s₂ ○ t :=
disjSups_subset hs Subset.rfl
#align finset.disj_sups_subset_right Finset.disjSups_subset_right
--/
/- warning: finset.forall_disj_sups_iff -> Finset.forall_disjSups_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (p c)) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (p (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b))))
Case conversion may be inaccurate. Consider using '#align finset.forall_disj_sups_iff Finset.forall_disjSups_iffₓ'. -/
@@ -757,7 +781,7 @@ theorem forall_disjSups_iff {p : α → Prop} :
/- warning: finset.disj_sups_subset_iff -> Finset.disjSups_subset_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) u)))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) u)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) u)))
Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_iff Finset.disjSups_subset_iffₓ'. -/
@@ -766,37 +790,53 @@ theorem disjSups_subset_iff : s ○ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoi
forall_disjSups_iff
#align finset.disj_sups_subset_iff Finset.disjSups_subset_iff
-#print Finset.Nonempty.of_disjSups_left /-
+/- warning: finset.nonempty.of_disj_sups_left -> Finset.Nonempty.of_disjSups_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α s)
+Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_leftₓ'. -/
theorem Nonempty.of_disjSups_left : (s ○ t).Nonempty → s.Nonempty :=
by
simp_rw [Finset.Nonempty, mem_disj_sups]
exact fun ⟨_, a, ha, _⟩ => ⟨a, ha⟩
#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_left
--/
-#print Finset.Nonempty.of_disjSups_right /-
+/- warning: finset.nonempty.of_disj_sups_right -> Finset.Nonempty.of_disjSups_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (Finset.Nonempty.{u1} α t)
+Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_rightₓ'. -/
theorem Nonempty.of_disjSups_right : (s ○ t).Nonempty → t.Nonempty :=
by
simp_rw [Finset.Nonempty, mem_disj_sups]
exact fun ⟨_, _, _, b, hb, _⟩ => ⟨b, hb⟩
#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_right
--/
-#print Finset.disjSups_empty_left /-
+/- warning: finset.disj_sups_empty_left -> Finset.disjSups_empty_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)) t) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α)) t) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_empty_left Finset.disjSups_empty_leftₓ'. -/
@[simp]
theorem disjSups_empty_left : ∅ ○ t = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_left Finset.disjSups_empty_left
--/
-#print Finset.disjSups_empty_right /-
+/- warning: finset.disj_sups_empty_right -> Finset.disjSups_empty_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_empty_right Finset.disjSups_empty_rightₓ'. -/
@[simp]
theorem disjSups_empty_right : s ○ ∅ = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_right Finset.disjSups_empty_right
--/
/- warning: finset.disj_sups_singleton -> Finset.disjSups_singleton is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (ite.{succ u1} (Finset.{u1} α) (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (_inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (ite.{succ u1} (Finset.{u1} α) (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (_inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (ite.{succ u1} (Finset.{u1} α) (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (_inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α)))
Case conversion may be inaccurate. Consider using '#align finset.disj_sups_singleton Finset.disjSups_singletonₓ'. -/
@@ -804,39 +844,59 @@ theorem disjSups_singleton : ({a} ○ {b} : Finset α) = if Disjoint a b then {a
split_ifs <;> simp [disj_sups, filter_singleton, h]
#align finset.disj_sups_singleton Finset.disjSups_singleton
-#print Finset.disjSups_union_left /-
+/- warning: finset.disj_sups_union_left -> Finset.disjSups_union_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_union_left Finset.disjSups_union_leftₓ'. -/
theorem disjSups_union_left : (s₁ ∪ s₂) ○ t = s₁ ○ t ∪ s₂ ○ t := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_left Finset.disjSups_union_left
--/
-#print Finset.disjSups_union_right /-
+/- warning: finset.disj_sups_union_right -> Finset.disjSups_union_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_union_right Finset.disjSups_union_rightₓ'. -/
theorem disjSups_union_right : s ○ (t₁ ∪ t₂) = s ○ t₁ ∪ s ○ t₂ := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_right Finset.disjSups_union_right
--/
-#print Finset.disjSups_inter_subset_left /-
+/- warning: finset.disj_sups_inter_subset_left -> Finset.disjSups_inter_subset_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s₁ s₂) t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₁ t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s₂ t))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_inter_subset_left Finset.disjSups_inter_subset_leftₓ'. -/
theorem disjSups_inter_subset_left : (s₁ ∩ s₂) ○ t ⊆ s₁ ○ t ∩ s₂ ○ t := by
simpa only [disj_sups, inter_product, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_left Finset.disjSups_inter_subset_left
--/
-#print Finset.disjSups_inter_subset_right /-
+/- warning: finset.disj_sups_inter_subset_right -> Finset.disjSups_inter_subset_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t₁ : Finset.{u1} α} {t₂ : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) t₁ t₂)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₁) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t₂))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_inter_subset_right Finset.disjSups_inter_subset_rightₓ'. -/
theorem disjSups_inter_subset_right : s ○ (t₁ ∩ t₂) ⊆ s ○ t₁ ∩ s ○ t₂ := by
simpa only [disj_sups, product_inter, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_right Finset.disjSups_inter_subset_right
--/
variable (s t)
-#print Finset.disjSups_comm /-
+/- warning: finset.disj_sups_comm -> Finset.disjSups_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t s)
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_comm Finset.disjSups_commₓ'. -/
theorem disjSups_comm : s ○ t = t ○ s := by
ext
rw [mem_disj_sups, exists₂_comm]
simp [sup_comm, disjoint_comm]
#align finset.disj_sups_comm Finset.disjSups_comm
--/
end DisjSups
@@ -846,7 +906,12 @@ section DistribLattice
variable [DistribLattice α] [OrderBot α] [@DecidableRel α Disjoint] (s t u v : Finset α)
-#print Finset.disjSups_assoc /-
+/- warning: finset.disj_sups_assoc -> Finset.disjSups_assoc is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_assoc Finset.disjSups_assocₓ'. -/
theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u) :=
by
refine' associative_of_commutative_of_le disj_sups_comm _
@@ -855,24 +920,35 @@ theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u)
rw [disjoint_sup_left] at habc
exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, sup_assoc.symm⟩
#align finset.disj_sups_assoc Finset.disjSups_assoc
--/
-#print Finset.disjSups_left_comm /-
+/- warning: finset.disj_sups_left_comm -> Finset.disjSups_left_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t u)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_left_comm Finset.disjSups_left_commₓ'. -/
theorem disjSups_left_comm : s ○ (t ○ u) = t ○ (s ○ u) := by
simp_rw [← disj_sups_assoc, disj_sups_comm s]
#align finset.disj_sups_left_comm Finset.disjSups_left_comm
--/
-#print Finset.disjSups_right_comm /-
+/- warning: finset.disj_sups_right_comm -> Finset.disjSups_right_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) t)
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_right_comm Finset.disjSups_right_commₓ'. -/
theorem disjSups_right_comm : s ○ t ○ u = s ○ u ○ t := by simp_rw [disj_sups_assoc, disj_sups_comm]
#align finset.disj_sups_right_comm Finset.disjSups_right_comm
--/
-#print Finset.disjSups_disjSups_disjSups_comm /-
+/- warning: finset.disj_sups_disj_sups_disj_sups_comm -> Finset.disjSups_disjSups_disjSups_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α) (v : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) u v)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t v))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : DistribLattice.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)))))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_2))) _inst_3)] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α) (v : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) u v)) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s u) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_2)) _inst_3 (fun (a : α) (b : α) => _inst_4 a b) t v))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_commₓ'. -/
theorem disjSups_disjSups_disjSups_comm : s ○ t ○ (u ○ v) = s ○ u ○ (t ○ v) := by
simp_rw [← disj_sups_assoc, disj_sups_right_comm]
#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_comm
--/
end DistribLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -281,25 +281,25 @@ theorem subset_sups {s t : Set α} :
variable (s t u v)
-/- warning: finset.bUnion_image_sup_left -> Finset.bunionᵢ_image_sup_left is a dubious translation:
+/- warning: finset.bUnion_image_sup_left -> Finset.biUnion_image_sup_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.1857 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.1859 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.1857 x._@.Mathlib.Data.Finset.Sups._hyg.1859) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_left Finset.bunionᵢ_image_sup_leftₓ'. -/
-theorem bunionᵢ_image_sup_left : (s.bunionᵢ fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
- bunionᵢ_image_left
-#align finset.bUnion_image_sup_left Finset.bunionᵢ_image_sup_left
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.1857 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.1859 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.1857 x._@.Mathlib.Data.Finset.Sups._hyg.1859) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_left Finset.biUnion_image_sup_leftₓ'. -/
+theorem biUnion_image_sup_left : (s.biUnion fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
+ biUnion_image_left
+#align finset.bUnion_image_sup_left Finset.biUnion_image_sup_left
-/- warning: finset.bUnion_image_sup_right -> Finset.bunionᵢ_image_sup_right is a dubious translation:
+/- warning: finset.bUnion_image_sup_right -> Finset.biUnion_image_sup_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_right Finset.bunionᵢ_image_sup_rightₓ'. -/
-theorem bunionᵢ_image_sup_right : (t.bunionᵢ fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
- bunionᵢ_image_right
-#align finset.bUnion_image_sup_right Finset.bunionᵢ_image_sup_right
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_rightₓ'. -/
+theorem biUnion_image_sup_right : (t.biUnion fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
+ biUnion_image_right
+#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_right
/- warning: finset.image_sup_product -> Finset.image_sup_product is a dubious translation:
lean 3 declaration is
@@ -579,25 +579,25 @@ theorem subset_infs {s t : Set α} :
variable (s t u v)
-/- warning: finset.bUnion_image_inf_left -> Finset.bunionᵢ_image_inf_left is a dubious translation:
+/- warning: finset.bUnion_image_inf_left -> Finset.biUnion_image_inf_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.4108 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.4110 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.4108 x._@.Mathlib.Data.Finset.Sups._hyg.4110) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_left Finset.bunionᵢ_image_inf_leftₓ'. -/
-theorem bunionᵢ_image_inf_left : (s.bunionᵢ fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
- bunionᵢ_image_left
-#align finset.bUnion_image_inf_left Finset.bunionᵢ_image_inf_left
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.4108 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.4110 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.4108 x._@.Mathlib.Data.Finset.Sups._hyg.4110) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_left Finset.biUnion_image_inf_leftₓ'. -/
+theorem biUnion_image_inf_left : (s.biUnion fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
+ biUnion_image_left
+#align finset.bUnion_image_inf_left Finset.biUnion_image_inf_left
-/- warning: finset.bUnion_image_inf_right -> Finset.bunionᵢ_image_inf_right is a dubious translation:
+/- warning: finset.bUnion_image_inf_right -> Finset.biUnion_image_inf_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_right Finset.bunionᵢ_image_inf_rightₓ'. -/
-theorem bunionᵢ_image_inf_right : (t.bunionᵢ fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
- bunionᵢ_image_right
-#align finset.bUnion_image_inf_right Finset.bunionᵢ_image_inf_right
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_rightₓ'. -/
+theorem biUnion_image_inf_right : (t.biUnion fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
+ biUnion_image_right
+#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_right
/- warning: finset.image_inf_product -> Finset.image_inf_product is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
! This file was ported from Lean 3 source module data.finset.sups
-! leanprover-community/mathlib commit 20715f4ac6819ef2453d9e5106ecd086a5dc2a5e
+! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Data.Set.Sups
/-!
# Set family operations
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file defines a few binary operations on `finset α` for use in set family combinatorics.
## Main declarations
mathlib commit https://github.com/leanprover-community/mathlib/commit/dc65937e7a0fff4677f0f5a7086f42da70a69575
@@ -48,30 +48,48 @@ section Sups
variable [SemilatticeSup α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+#print Finset.hasSups /-
/-- `s ⊻ t` is the finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`. -/
protected def hasSups : HasSups (Finset α) :=
⟨image₂ (· ⊔ ·)⟩
#align finset.has_sups Finset.hasSups
+-/
scoped[FinsetFamily] attribute [instance] Finset.hasSups
variable {s t} {a b c : α}
+/- warning: finset.mem_sups -> Finset.mem_sups is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) c)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) c)))))
+Case conversion may be inaccurate. Consider using '#align finset.mem_sups Finset.mem_supsₓ'. -/
@[simp]
theorem mem_sups : c ∈ s ⊻ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊔ b = c := by simp [(· ⊻ ·)]
#align finset.mem_sups Finset.mem_sups
variable (s t)
+#print Finset.coe_sups /-
@[simp, norm_cast]
theorem coe_sups : (↑(s ⊻ t) : Set α) = s ⊻ t :=
coe_image₂ _ _ _
#align finset.coe_sups Finset.coe_sups
+-/
+#print Finset.card_sups_le /-
theorem card_sups_le : (s ⊻ t).card ≤ s.card * t.card :=
card_image₂_le _ _ _
#align finset.card_sups_le Finset.card_sups_le
+-/
+/- warning: finset.card_sups_iff -> Finset.card_sups_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, 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} α))) s) ((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)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, u1} α α (Finset.toSet.{u1} α s) (Finset.toSet.{u1} α t)))
+Case conversion may be inaccurate. Consider using '#align finset.card_sups_iff Finset.card_sups_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem card_sups_iff :
(s ⊻ t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun x => x.1 ⊔ x.2 :=
@@ -80,141 +98,247 @@ theorem card_sups_iff :
variable {s s₁ s₂ t t₁ t₂ u}
+/- warning: finset.sup_mem_sups -> Finset.sup_mem_sups is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+Case conversion may be inaccurate. Consider using '#align finset.sup_mem_sups Finset.sup_mem_supsₓ'. -/
theorem sup_mem_sups : a ∈ s → b ∈ t → a ⊔ b ∈ s ⊻ t :=
mem_image₂_of_mem
#align finset.sup_mem_sups Finset.sup_mem_sups
+#print Finset.sups_subset /-
theorem sups_subset : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ ⊻ t₁ ⊆ s₂ ⊻ t₂ :=
image₂_subset
#align finset.sups_subset Finset.sups_subset
+-/
+#print Finset.sups_subset_left /-
theorem sups_subset_left : t₁ ⊆ t₂ → s ⊻ t₁ ⊆ s ⊻ t₂ :=
image₂_subset_left
#align finset.sups_subset_left Finset.sups_subset_left
+-/
+#print Finset.sups_subset_right /-
theorem sups_subset_right : s₁ ⊆ s₂ → s₁ ⊻ t ⊆ s₂ ⊻ t :=
image₂_subset_right
#align finset.sups_subset_right Finset.sups_subset_right
+-/
+/- warning: finset.image_subset_sups_left -> Finset.image_subset_sups_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+Case conversion may be inaccurate. Consider using '#align finset.image_subset_sups_left Finset.image_subset_sups_leftₓ'. -/
theorem image_subset_sups_left : b ∈ t → (s.image fun a => a ⊔ b) ⊆ s ⊻ t :=
image_subset_image₂_left
#align finset.image_subset_sups_left Finset.image_subset_sups_left
+/- warning: finset.image_subset_sups_right -> Finset.image_subset_sups_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a) t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (x._@.Mathlib.Data.Finset.Sups._hyg.772 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a x._@.Mathlib.Data.Finset.Sups._hyg.772) t) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+Case conversion may be inaccurate. Consider using '#align finset.image_subset_sups_right Finset.image_subset_sups_rightₓ'. -/
theorem image_subset_sups_right : a ∈ s → t.image ((· ⊔ ·) a) ⊆ s ⊻ t :=
image_subset_image₂_right
#align finset.image_subset_sups_right Finset.image_subset_sups_right
+/- warning: finset.forall_sups_iff -> Finset.forall_sups_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (p (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b))))
+Case conversion may be inaccurate. Consider using '#align finset.forall_sups_iff Finset.forall_sups_iffₓ'. -/
theorem forall_sups_iff {p : α → Prop} : (∀ c ∈ s ⊻ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊔ b) :=
forall_image₂_iff
#align finset.forall_sups_iff Finset.forall_sups_iff
+/- warning: finset.sups_subset_iff -> Finset.sups_subset_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) u)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) u)))
+Case conversion may be inaccurate. Consider using '#align finset.sups_subset_iff Finset.sups_subset_iffₓ'. -/
@[simp]
theorem sups_subset_iff : s ⊻ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊔ b ∈ u :=
image₂_subset_iff
#align finset.sups_subset_iff Finset.sups_subset_iff
+#print Finset.sups_nonempty /-
@[simp]
theorem sups_nonempty : (s ⊻ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.sups_nonempty Finset.sups_nonempty
+-/
+#print Finset.Nonempty.sups /-
protected theorem Nonempty.sups : s.Nonempty → t.Nonempty → (s ⊻ t).Nonempty :=
Nonempty.image₂
#align finset.nonempty.sups Finset.Nonempty.sups
+-/
+#print Finset.Nonempty.of_sups_left /-
theorem Nonempty.of_sups_left : (s ⊻ t).Nonempty → s.Nonempty :=
Nonempty.of_image₂_left
#align finset.nonempty.of_sups_left Finset.Nonempty.of_sups_left
+-/
+#print Finset.Nonempty.of_sups_right /-
theorem Nonempty.of_sups_right : (s ⊻ t).Nonempty → t.Nonempty :=
Nonempty.of_image₂_right
#align finset.nonempty.of_sups_right Finset.Nonempty.of_sups_right
+-/
+#print Finset.empty_sups /-
@[simp]
theorem empty_sups : ∅ ⊻ t = ∅ :=
image₂_empty_left
#align finset.empty_sups Finset.empty_sups
+-/
+#print Finset.sups_empty /-
@[simp]
theorem sups_empty : s ⊻ ∅ = ∅ :=
image₂_empty_right
#align finset.sups_empty Finset.sups_empty
+-/
+#print Finset.sups_eq_empty /-
@[simp]
theorem sups_eq_empty : s ⊻ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.sups_eq_empty Finset.sups_eq_empty
+-/
+/- warning: finset.singleton_sups -> Finset.singleton_sups is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) t)
+Case conversion may be inaccurate. Consider using '#align finset.singleton_sups Finset.singleton_supsₓ'. -/
@[simp]
theorem singleton_sups : {a} ⊻ t = t.image fun b => a ⊔ b :=
image₂_singleton_left
#align finset.singleton_sups Finset.singleton_sups
+/- warning: finset.sups_singleton -> Finset.sups_singleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s)
+Case conversion may be inaccurate. Consider using '#align finset.sups_singleton Finset.sups_singletonₓ'. -/
@[simp]
theorem sups_singleton : s ⊻ {b} = s.image fun a => a ⊔ b :=
image₂_singleton_right
#align finset.sups_singleton Finset.sups_singleton
+/- warning: finset.singleton_sups_singleton -> Finset.singleton_sups_singleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b))
+Case conversion may be inaccurate. Consider using '#align finset.singleton_sups_singleton Finset.singleton_sups_singletonₓ'. -/
theorem singleton_sups_singleton : ({a} ⊻ {b} : Finset α) = {a ⊔ b} :=
image₂_singleton
#align finset.singleton_sups_singleton Finset.singleton_sups_singleton
+#print Finset.sups_union_left /-
theorem sups_union_left : (s₁ ∪ s₂) ⊻ t = s₁ ⊻ t ∪ s₂ ⊻ t :=
image₂_union_left
#align finset.sups_union_left Finset.sups_union_left
+-/
+#print Finset.sups_union_right /-
theorem sups_union_right : s ⊻ (t₁ ∪ t₂) = s ⊻ t₁ ∪ s ⊻ t₂ :=
image₂_union_right
#align finset.sups_union_right Finset.sups_union_right
+-/
+#print Finset.sups_inter_subset_left /-
theorem sups_inter_subset_left : (s₁ ∩ s₂) ⊻ t ⊆ s₁ ⊻ t ∩ s₂ ⊻ t :=
image₂_inter_subset_left
#align finset.sups_inter_subset_left Finset.sups_inter_subset_left
+-/
+#print Finset.sups_inter_subset_right /-
theorem sups_inter_subset_right : s ⊻ (t₁ ∩ t₂) ⊆ s ⊻ t₁ ∩ s ⊻ t₂ :=
image₂_inter_subset_right
#align finset.sups_inter_subset_right Finset.sups_inter_subset_right
+-/
+#print Finset.subset_sups /-
theorem subset_sups {s t : Set α} :
↑u ⊆ s ⊻ t → ∃ s' t' : Finset α, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' ⊻ t' :=
subset_image₂
#align finset.subset_sups Finset.subset_sups
+-/
variable (s t u v)
+/- warning: finset.bUnion_image_sup_left -> Finset.bunionᵢ_image_sup_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.1857 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.1859 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.1857 x._@.Mathlib.Data.Finset.Sups._hyg.1859) a) t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_left Finset.bunionᵢ_image_sup_leftₓ'. -/
theorem bunionᵢ_image_sup_left : (s.bunionᵢ fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
bunionᵢ_image_left
#align finset.bUnion_image_sup_left Finset.bunionᵢ_image_sup_left
+/- warning: finset.bUnion_image_sup_right -> Finset.bunionᵢ_image_sup_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) s)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_sup_right Finset.bunionᵢ_image_sup_rightₓ'. -/
theorem bunionᵢ_image_sup_right : (t.bunionᵢ fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
bunionᵢ_image_right
#align finset.bUnion_image_sup_right Finset.bunionᵢ_image_sup_right
+/- warning: finset.image_sup_product -> Finset.image_sup_product is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2))) (Finset.product.{u1, u1} α α s t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (fun (x._@.Mathlib.Data.Finset.Sups._hyg.1973 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.1975 : α) => Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.1973 x._@.Mathlib.Data.Finset.Sups._hyg.1975)) (Finset.product.{u1, u1} α α s t)) (HasSups.sups.{u1} (Finset.{u1} α) (Finset.hasSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.image_sup_product Finset.image_sup_productₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem image_sup_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊔ ·)) = s ⊻ t :=
image_uncurry_product _ _ _
#align finset.image_sup_product Finset.image_sup_product
+#print Finset.sups_assoc /-
theorem sups_assoc : s ⊻ t ⊻ u = s ⊻ (t ⊻ u) :=
image₂_assoc fun _ _ _ => sup_assoc
#align finset.sups_assoc Finset.sups_assoc
+-/
+#print Finset.sups_comm /-
theorem sups_comm : s ⊻ t = t ⊻ s :=
image₂_comm fun _ _ => sup_comm
#align finset.sups_comm Finset.sups_comm
+-/
+#print Finset.sups_left_comm /-
theorem sups_left_comm : s ⊻ (t ⊻ u) = t ⊻ (s ⊻ u) :=
image₂_left_comm sup_left_comm
#align finset.sups_left_comm Finset.sups_left_comm
+-/
+#print Finset.sups_right_comm /-
theorem sups_right_comm : s ⊻ t ⊻ u = s ⊻ u ⊻ t :=
image₂_right_comm sup_right_comm
#align finset.sups_right_comm Finset.sups_right_comm
+-/
+#print Finset.sups_sups_sups_comm /-
theorem sups_sups_sups_comm : s ⊻ t ⊻ (u ⊻ v) = s ⊻ u ⊻ (t ⊻ v) :=
image₂_image₂_image₂_comm sup_sup_sup_comm
#align finset.sups_sups_sups_comm Finset.sups_sups_sups_comm
+-/
end Sups
@@ -222,30 +346,48 @@ section Infs
variable [SemilatticeInf α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+#print Finset.hasInfs /-
/-- `s ⊼ t` is the finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`. -/
protected def hasInfs : HasInfs (Finset α) :=
⟨image₂ (· ⊓ ·)⟩
#align finset.has_infs Finset.hasInfs
+-/
scoped[FinsetFamily] attribute [instance] Finset.hasInfs
variable {s t} {a b c : α}
+/- warning: finset.mem_infs -> Finset.mem_infs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) c)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) (Eq.{succ u1} α (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) c)))))
+Case conversion may be inaccurate. Consider using '#align finset.mem_infs Finset.mem_infsₓ'. -/
@[simp]
theorem mem_infs : c ∈ s ⊼ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊓ b = c := by simp [(· ⊼ ·)]
#align finset.mem_infs Finset.mem_infs
variable (s t)
+#print Finset.coe_infs /-
@[simp, norm_cast]
theorem coe_infs : (↑(s ⊼ t) : Set α) = s ⊼ t :=
coe_image₂ _ _ _
#align finset.coe_infs Finset.coe_infs
+-/
+#print Finset.card_infs_le /-
theorem card_infs_le : (s ⊼ t).card ≤ s.card * t.card :=
card_image₂_le _ _ _
#align finset.card_infs_le Finset.card_infs_le
+-/
+/- warning: finset.card_infs_iff -> Finset.card_infs_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, 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} α))) s) ((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)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Iff (Eq.{1} Nat (Finset.card.{u1} α (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} α s) (Finset.card.{u1} α t))) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (x : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) (Prod.fst.{u1, u1} α α x) (Prod.snd.{u1, u1} α α x)) (Set.prod.{u1, u1} α α (Finset.toSet.{u1} α s) (Finset.toSet.{u1} α t)))
+Case conversion may be inaccurate. Consider using '#align finset.card_infs_iff Finset.card_infs_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem card_infs_iff :
(s ⊼ t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun x => x.1 ⊓ x.2 :=
@@ -254,141 +396,247 @@ theorem card_infs_iff :
variable {s s₁ s₂ t t₁ t₂ u}
+/- warning: finset.inf_mem_infs -> Finset.inf_mem_infs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+Case conversion may be inaccurate. Consider using '#align finset.inf_mem_infs Finset.inf_mem_infsₓ'. -/
theorem inf_mem_infs : a ∈ s → b ∈ t → a ⊓ b ∈ s ⊼ t :=
mem_image₂_of_mem
#align finset.inf_mem_infs Finset.inf_mem_infs
+#print Finset.infs_subset /-
theorem infs_subset : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ ⊼ t₁ ⊆ s₂ ⊼ t₂ :=
image₂_subset
#align finset.infs_subset Finset.infs_subset
+-/
+#print Finset.infs_subset_left /-
theorem infs_subset_left : t₁ ⊆ t₂ → s ⊼ t₁ ⊆ s ⊼ t₂ :=
image₂_subset_left
#align finset.infs_subset_left Finset.infs_subset_left
+-/
+#print Finset.infs_subset_right /-
theorem infs_subset_right : s₁ ⊆ s₂ → s₁ ⊼ t ⊆ s₂ ⊼ t :=
image₂_subset_right
#align finset.infs_subset_right Finset.infs_subset_right
+-/
+/- warning: finset.image_subset_infs_left -> Finset.image_subset_infs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+Case conversion may be inaccurate. Consider using '#align finset.image_subset_infs_left Finset.image_subset_infs_leftₓ'. -/
theorem image_subset_infs_left : b ∈ t → (s.image fun a => a ⊓ b) ⊆ s ⊼ t :=
image_subset_image₂_left
#align finset.image_subset_infs_left Finset.image_subset_infs_left
+/- warning: finset.image_subset_infs_right -> Finset.image_subset_infs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a) t) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (x._@.Mathlib.Data.Finset.Sups._hyg.3023 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a x._@.Mathlib.Data.Finset.Sups._hyg.3023) t) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
+Case conversion may be inaccurate. Consider using '#align finset.image_subset_infs_right Finset.image_subset_infs_rightₓ'. -/
theorem image_subset_infs_right : a ∈ s → t.image ((· ⊓ ·) a) ⊆ s ⊼ t :=
image_subset_image₂_right
#align finset.image_subset_infs_right Finset.image_subset_infs_right
+/- warning: finset.forall_infs_iff -> Finset.forall_infs_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (p (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (p c)) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (p (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b))))
+Case conversion may be inaccurate. Consider using '#align finset.forall_infs_iff Finset.forall_infs_iffₓ'. -/
theorem forall_infs_iff {p : α → Prop} : (∀ c ∈ s ⊼ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊓ b) :=
forall_image₂_iff
#align finset.forall_infs_iff Finset.forall_infs_iff
+/- warning: finset.infs_subset_iff -> Finset.infs_subset_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) u)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) u)))
+Case conversion may be inaccurate. Consider using '#align finset.infs_subset_iff Finset.infs_subset_iffₓ'. -/
@[simp]
theorem infs_subset_iff : s ⊼ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊓ b ∈ u :=
image₂_subset_iff
#align finset.infs_subset_iff Finset.infs_subset_iff
+#print Finset.infs_nonempty /-
@[simp]
theorem infs_nonempty : (s ⊼ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.infs_nonempty Finset.infs_nonempty
+-/
+#print Finset.Nonempty.infs /-
protected theorem Nonempty.infs : s.Nonempty → t.Nonempty → (s ⊼ t).Nonempty :=
Nonempty.image₂
#align finset.nonempty.infs Finset.Nonempty.infs
+-/
+#print Finset.Nonempty.of_infs_left /-
theorem Nonempty.of_infs_left : (s ⊼ t).Nonempty → s.Nonempty :=
Nonempty.of_image₂_left
#align finset.nonempty.of_infs_left Finset.Nonempty.of_infs_left
+-/
+#print Finset.Nonempty.of_infs_right /-
theorem Nonempty.of_infs_right : (s ⊼ t).Nonempty → t.Nonempty :=
Nonempty.of_image₂_right
#align finset.nonempty.of_infs_right Finset.Nonempty.of_infs_right
+-/
+#print Finset.empty_infs /-
@[simp]
theorem empty_infs : ∅ ⊼ t = ∅ :=
image₂_empty_left
#align finset.empty_infs Finset.empty_infs
+-/
+#print Finset.infs_empty /-
@[simp]
theorem infs_empty : s ⊼ ∅ = ∅ :=
image₂_empty_right
#align finset.infs_empty Finset.infs_empty
+-/
+#print Finset.infs_eq_empty /-
@[simp]
theorem infs_eq_empty : s ⊼ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.infs_eq_empty Finset.infs_eq_empty
+-/
+/- warning: finset.singleton_infs -> Finset.singleton_infs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) t) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) t)
+Case conversion may be inaccurate. Consider using '#align finset.singleton_infs Finset.singleton_infsₓ'. -/
@[simp]
theorem singleton_infs : {a} ⊼ t = t.image fun b => a ⊓ b :=
image₂_singleton_left
#align finset.singleton_infs Finset.singleton_infs
+/- warning: finset.infs_singleton -> Finset.infs_singleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {s : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s)
+Case conversion may be inaccurate. Consider using '#align finset.infs_singleton Finset.infs_singletonₓ'. -/
@[simp]
theorem infs_singleton : s ⊼ {b} = s.image fun a => a ⊓ b :=
image₂_singleton_right
#align finset.infs_singleton Finset.infs_singleton
+/- warning: finset.singleton_infs_singleton -> Finset.singleton_infs_singleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b))
+Case conversion may be inaccurate. Consider using '#align finset.singleton_infs_singleton Finset.singleton_infs_singletonₓ'. -/
theorem singleton_infs_singleton : ({a} ⊼ {b} : Finset α) = {a ⊓ b} :=
image₂_singleton
#align finset.singleton_infs_singleton Finset.singleton_infs_singleton
+#print Finset.infs_union_left /-
theorem infs_union_left : (s₁ ∪ s₂) ⊼ t = s₁ ⊼ t ∪ s₂ ⊼ t :=
image₂_union_left
#align finset.infs_union_left Finset.infs_union_left
+-/
+#print Finset.infs_union_right /-
theorem infs_union_right : s ⊼ (t₁ ∪ t₂) = s ⊼ t₁ ∪ s ⊼ t₂ :=
image₂_union_right
#align finset.infs_union_right Finset.infs_union_right
+-/
+#print Finset.infs_inter_subset_left /-
theorem infs_inter_subset_left : (s₁ ∩ s₂) ⊼ t ⊆ s₁ ⊼ t ∩ s₂ ⊼ t :=
image₂_inter_subset_left
#align finset.infs_inter_subset_left Finset.infs_inter_subset_left
+-/
+#print Finset.infs_inter_subset_right /-
theorem infs_inter_subset_right : s ⊼ (t₁ ∩ t₂) ⊆ s ⊼ t₁ ∩ s ⊼ t₂ :=
image₂_inter_subset_right
#align finset.infs_inter_subset_right Finset.infs_inter_subset_right
+-/
+#print Finset.subset_infs /-
theorem subset_infs {s t : Set α} :
↑u ⊆ s ⊼ t → ∃ s' t' : Finset α, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' ⊼ t' :=
subset_image₂
#align finset.subset_infs Finset.subset_infs
+-/
variable (s t u v)
+/- warning: finset.bUnion_image_inf_left -> Finset.bunionᵢ_image_inf_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) s (fun (a : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) ((fun (x._@.Mathlib.Data.Finset.Sups._hyg.4108 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.4110 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.4108 x._@.Mathlib.Data.Finset.Sups._hyg.4110) a) t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_left Finset.bunionᵢ_image_inf_leftₓ'. -/
theorem bunionᵢ_image_inf_left : (s.bunionᵢ fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
bunionᵢ_image_left
#align finset.bUnion_image_inf_left Finset.bunionᵢ_image_inf_left
+/- warning: finset.bUnion_image_inf_right -> Finset.bunionᵢ_image_inf_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) t (fun (b : α) => Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (a : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) a b) s)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_image_inf_right Finset.bunionᵢ_image_inf_rightₓ'. -/
theorem bunionᵢ_image_inf_right : (t.bunionᵢ fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
bunionᵢ_image_right
#align finset.bUnion_image_inf_right Finset.bunionᵢ_image_inf_right
+/- warning: finset.image_inf_product -> Finset.image_inf_product is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α _inst_2))) (Finset.product.{u1, u1} α α s t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeInf.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_1 a b) (Function.uncurry.{u1, u1, u1} α α α (fun (x._@.Mathlib.Data.Finset.Sups._hyg.4224 : α) (x._@.Mathlib.Data.Finset.Sups._hyg.4226 : α) => Inf.inf.{u1} α (SemilatticeInf.toInf.{u1} α _inst_2) x._@.Mathlib.Data.Finset.Sups._hyg.4224 x._@.Mathlib.Data.Finset.Sups._hyg.4226)) (Finset.product.{u1, u1} α α s t)) (HasInfs.infs.{u1} (Finset.{u1} α) (Finset.hasInfs.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
+Case conversion may be inaccurate. Consider using '#align finset.image_inf_product Finset.image_inf_productₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem image_inf_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊓ ·)) = s ⊼ t :=
image_uncurry_product _ _ _
#align finset.image_inf_product Finset.image_inf_product
+#print Finset.infs_assoc /-
theorem infs_assoc : s ⊼ t ⊼ u = s ⊼ (t ⊼ u) :=
image₂_assoc fun _ _ _ => inf_assoc
#align finset.infs_assoc Finset.infs_assoc
+-/
+#print Finset.infs_comm /-
theorem infs_comm : s ⊼ t = t ⊼ s :=
image₂_comm fun _ _ => inf_comm
#align finset.infs_comm Finset.infs_comm
+-/
+#print Finset.infs_left_comm /-
theorem infs_left_comm : s ⊼ (t ⊼ u) = t ⊼ (s ⊼ u) :=
image₂_left_comm inf_left_comm
#align finset.infs_left_comm Finset.infs_left_comm
+-/
+#print Finset.infs_right_comm /-
theorem infs_right_comm : s ⊼ t ⊼ u = s ⊼ u ⊼ t :=
image₂_right_comm inf_right_comm
#align finset.infs_right_comm Finset.infs_right_comm
+-/
+#print Finset.infs_infs_infs_comm /-
theorem infs_infs_infs_comm : s ⊼ t ⊼ (u ⊼ v) = s ⊼ u ⊼ (t ⊼ v) :=
image₂_image₂_image₂_comm inf_inf_inf_comm
#align finset.infs_infs_infs_comm Finset.infs_infs_infs_comm
+-/
end Infs
@@ -398,21 +646,29 @@ section DistribLattice
variable [DistribLattice α] (s t u : Finset α)
+#print Finset.sups_infs_subset_left /-
theorem sups_infs_subset_left : s ⊻ t ⊼ u ⊆ (s ⊻ t) ⊼ (s ⊻ u) :=
image₂_distrib_subset_left fun _ _ _ => sup_inf_left
#align finset.sups_infs_subset_left Finset.sups_infs_subset_left
+-/
+#print Finset.sups_infs_subset_right /-
theorem sups_infs_subset_right : t ⊼ u ⊻ s ⊆ (t ⊻ s) ⊼ (u ⊻ s) :=
image₂_distrib_subset_right fun _ _ _ => sup_inf_right
#align finset.sups_infs_subset_right Finset.sups_infs_subset_right
+-/
+#print Finset.infs_sups_subset_left /-
theorem infs_sups_subset_left : s ⊼ (t ⊻ u) ⊆ s ⊼ t ⊻ s ⊼ u :=
image₂_distrib_subset_left fun _ _ _ => inf_sup_left
#align finset.infs_sups_subset_left Finset.infs_sups_subset_left
+-/
+#print Finset.infs_sups_subset_right /-
theorem infs_sups_subset_right : (t ⊻ u) ⊼ s ⊆ t ⊼ s ⊻ u ⊼ s :=
image₂_distrib_subset_right fun _ _ _ => inf_sup_right
#align finset.infs_sups_subset_right Finset.infs_sups_subset_right
+-/
end DistribLattice
@@ -421,48 +677,72 @@ section DisjSups
variable [SemilatticeSup α] [OrderBot α] [@DecidableRel α Disjoint] (s s₁ s₂ t t₁ t₂ u : Finset α)
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.disjSups /-
/-- The finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t` and `a` and `b` are disjoint.
-/
def disjSups : Finset α :=
((s ×ˢ t).filterₓ fun ab : α × α => Disjoint ab.1 ab.2).image fun ab => ab.1 ⊔ ab.2
#align finset.disj_sups Finset.disjSups
+-/
-- mathport name: finset.disj_sups
scoped[FinsetFamily] infixl:74 " ○ " => Finset.disjSups
variable {s t u} {a b c : α}
+/- warning: finset.mem_disj_sups -> Finset.mem_disjSups is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) => Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) => And (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) c))))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {c : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) (Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) (And (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) c))))))
+Case conversion may be inaccurate. Consider using '#align finset.mem_disj_sups Finset.mem_disjSupsₓ'. -/
@[simp]
theorem mem_disjSups : c ∈ s ○ t ↔ ∃ a ∈ s, ∃ b ∈ t, Disjoint a b ∧ a ⊔ b = c := by
simp [disj_sups, and_assoc']
#align finset.mem_disj_sups Finset.mem_disjSups
+#print Finset.disjSups_subset_sups /-
theorem disjSups_subset_sups : s ○ t ⊆ s ⊻ t :=
by
simp_rw [subset_iff, mem_sups, mem_disj_sups]
exact fun c ⟨a, b, ha, hb, h, hc⟩ => ⟨a, b, ha, hb, hc⟩
#align finset.disj_sups_subset_sups Finset.disjSups_subset_sups
+-/
variable (s t)
+#print Finset.card_disjSups_le /-
theorem card_disjSups_le : (s ○ t).card ≤ s.card * t.card :=
(card_le_of_subset disjSups_subset_sups).trans <| card_sups_le _ _
#align finset.card_disj_sups_le Finset.card_disjSups_le
+-/
variable {s s₁ s₂ t t₁ t₂ u}
+#print Finset.disjSups_subset /-
theorem disjSups_subset (hs : s₁ ⊆ s₂) (ht : t₁ ⊆ t₂) : s₁ ○ t₁ ⊆ s₂ ○ t₂ :=
image_subset_image <| filter_subset_filter _ <| product_subset_product hs ht
#align finset.disj_sups_subset Finset.disjSups_subset
+-/
+#print Finset.disjSups_subset_left /-
theorem disjSups_subset_left (ht : t₁ ⊆ t₂) : s ○ t₁ ⊆ s ○ t₂ :=
disjSups_subset Subset.rfl ht
#align finset.disj_sups_subset_left Finset.disjSups_subset_left
+-/
+#print Finset.disjSups_subset_right /-
theorem disjSups_subset_right (hs : s₁ ⊆ s₂) : s₁ ○ t ⊆ s₂ ○ t :=
disjSups_subset hs Subset.rfl
#align finset.disj_sups_subset_right Finset.disjSups_subset_right
+-/
+/- warning: finset.forall_disj_sups_iff -> Finset.forall_disjSups_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (p c)) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (p (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {p : α -> Prop}, Iff (forall (c : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t)) -> (p c)) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (p (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b))))
+Case conversion may be inaccurate. Consider using '#align finset.forall_disj_sups_iff Finset.forall_disjSups_iffₓ'. -/
theorem forall_disjSups_iff {p : α → Prop} :
(∀ c ∈ s ○ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoint a b → p (a ⊔ b) :=
by
@@ -472,58 +752,88 @@ theorem forall_disjSups_iff {p : α → Prop} :
exact h _ ha _ hb hab
#align finset.forall_disj_sups_iff Finset.forall_disjSups_iff
+/- warning: finset.disj_sups_subset_iff -> Finset.disjSups_subset_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (forall (a : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (b : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b) u)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {s : Finset.{u1} α} {t : Finset.{u1} α} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) s t) u) (forall (a : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (b : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b t) -> (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b) u)))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_subset_iff Finset.disjSups_subset_iffₓ'. -/
@[simp]
theorem disjSups_subset_iff : s ○ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, Disjoint a b → a ⊔ b ∈ u :=
forall_disjSups_iff
#align finset.disj_sups_subset_iff Finset.disjSups_subset_iff
+#print Finset.Nonempty.of_disjSups_left /-
theorem Nonempty.of_disjSups_left : (s ○ t).Nonempty → s.Nonempty :=
by
simp_rw [Finset.Nonempty, mem_disj_sups]
exact fun ⟨_, a, ha, _⟩ => ⟨a, ha⟩
#align finset.nonempty.of_disj_sups_left Finset.Nonempty.of_disjSups_left
+-/
+#print Finset.Nonempty.of_disjSups_right /-
theorem Nonempty.of_disjSups_right : (s ○ t).Nonempty → t.Nonempty :=
by
simp_rw [Finset.Nonempty, mem_disj_sups]
exact fun ⟨_, _, _, b, hb, _⟩ => ⟨b, hb⟩
#align finset.nonempty.of_disj_sups_right Finset.Nonempty.of_disjSups_right
+-/
+#print Finset.disjSups_empty_left /-
@[simp]
theorem disjSups_empty_left : ∅ ○ t = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_left Finset.disjSups_empty_left
+-/
+#print Finset.disjSups_empty_right /-
@[simp]
theorem disjSups_empty_right : s ○ ∅ = ∅ := by simp [disj_sups]
#align finset.disj_sups_empty_right Finset.disjSups_empty_right
+-/
+/- warning: finset.disj_sups_singleton -> Finset.disjSups_singleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (ite.{succ u1} (Finset.{u1} α) (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (_inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α _inst_2) a b)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : SemilatticeSup.{u1} α] [_inst_3 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2)))] [_inst_4 : DecidableRel.{succ u1} α (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3)] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.disjSups.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2 _inst_3 (fun (a : α) (b : α) => _inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (ite.{succ u1} (Finset.{u1} α) (Disjoint.{u1} α (SemilatticeSup.toPartialOrder.{u1} α _inst_2) _inst_3 a b) (_inst_4 a b) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α _inst_2) a b)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α)))
+Case conversion may be inaccurate. Consider using '#align finset.disj_sups_singleton Finset.disjSups_singletonₓ'. -/
theorem disjSups_singleton : ({a} ○ {b} : Finset α) = if Disjoint a b then {a ⊔ b} else ∅ := by
split_ifs <;> simp [disj_sups, filter_singleton, h]
#align finset.disj_sups_singleton Finset.disjSups_singleton
+#print Finset.disjSups_union_left /-
theorem disjSups_union_left : (s₁ ∪ s₂) ○ t = s₁ ○ t ∪ s₂ ○ t := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_left Finset.disjSups_union_left
+-/
+#print Finset.disjSups_union_right /-
theorem disjSups_union_right : s ○ (t₁ ∪ t₂) = s ○ t₁ ∪ s ○ t₂ := by
simp [disj_sups, filter_union, image_union]
#align finset.disj_sups_union_right Finset.disjSups_union_right
+-/
+#print Finset.disjSups_inter_subset_left /-
theorem disjSups_inter_subset_left : (s₁ ∩ s₂) ○ t ⊆ s₁ ○ t ∩ s₂ ○ t := by
simpa only [disj_sups, inter_product, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_left Finset.disjSups_inter_subset_left
+-/
+#print Finset.disjSups_inter_subset_right /-
theorem disjSups_inter_subset_right : s ○ (t₁ ∩ t₂) ⊆ s ○ t₁ ∩ s ○ t₂ := by
simpa only [disj_sups, product_inter, filter_inter_distrib] using image_inter_subset _ _ _
#align finset.disj_sups_inter_subset_right Finset.disjSups_inter_subset_right
+-/
variable (s t)
+#print Finset.disjSups_comm /-
theorem disjSups_comm : s ○ t = t ○ s := by
ext
rw [mem_disj_sups, exists₂_comm]
simp [sup_comm, disjoint_comm]
#align finset.disj_sups_comm Finset.disjSups_comm
+-/
end DisjSups
@@ -533,6 +843,7 @@ section DistribLattice
variable [DistribLattice α] [OrderBot α] [@DecidableRel α Disjoint] (s t u v : Finset α)
+#print Finset.disjSups_assoc /-
theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u) :=
by
refine' associative_of_commutative_of_le disj_sups_comm _
@@ -541,17 +852,24 @@ theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u)
rw [disjoint_sup_left] at habc
exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, sup_assoc.symm⟩
#align finset.disj_sups_assoc Finset.disjSups_assoc
+-/
+#print Finset.disjSups_left_comm /-
theorem disjSups_left_comm : s ○ (t ○ u) = t ○ (s ○ u) := by
simp_rw [← disj_sups_assoc, disj_sups_comm s]
#align finset.disj_sups_left_comm Finset.disjSups_left_comm
+-/
+#print Finset.disjSups_right_comm /-
theorem disjSups_right_comm : s ○ t ○ u = s ○ u ○ t := by simp_rw [disj_sups_assoc, disj_sups_comm]
#align finset.disj_sups_right_comm Finset.disjSups_right_comm
+-/
+#print Finset.disjSups_disjSups_disjSups_comm /-
theorem disjSups_disjSups_disjSups_comm : s ○ t ○ (u ○ v) = s ○ u ○ (t ○ v) := by
simp_rw [← disj_sups_assoc, disj_sups_right_comm]
#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_comm
+-/
end DistribLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/1f4705ccdfe1e557fc54a0ce081a05e33d2e6240
@@ -4,11 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
! This file was ported from Lean 3 source module data.finset.sups
-! leanprover-community/mathlib commit 1990ff7e1ce55c2d37ad7e357976f1afb0da6618
+! leanprover-community/mathlib commit 20715f4ac6819ef2453d9e5106ecd086a5dc2a5e
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.NAry
+import Mathbin.Data.Set.Sups
/-!
# Set family operations
@@ -17,16 +18,16 @@ This file defines a few binary operations on `finset α` for use in set family c
## Main declarations
-* `finset.sups s t`: Finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`.
-* `finset.infs s t`: Finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`.
+* `s ⊻ t`: Finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`.
+* `s ⊼ t`: Finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`.
* `finset.disj_sups s t`: Finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t` and `a`
and `b` are disjoint.
## Notation
We define the following notation in locale `finset_family`:
-* `s ⊻ t` for `finset.sups s t`
-* `s ⊼ t` for `finset.infs s t`
+* `s ⊻ t`
+* `s ⊼ t`
* `s ○ t` for `finset.disj_sups s t`
## References
@@ -37,32 +38,33 @@ We define the following notation in locale `finset_family`:
open Function
+open SetFamily
+
variable {α : Type _} [DecidableEq α]
namespace Finset
section Sups
-variable [SemilatticeSup α] (s s₁ s₂ t t₁ t₂ u : Finset α)
+variable [SemilatticeSup α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
-/-- The finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`. -/
-def sups (s t : Finset α) : Finset α :=
- image₂ (· ⊔ ·) s t
-#align finset.sups Finset.sups
+/-- `s ⊻ t` is the finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`. -/
+protected def hasSups : HasSups (Finset α) :=
+ ⟨image₂ (· ⊔ ·)⟩
+#align finset.has_sups Finset.hasSups
--- mathport name: finset.sups
-scoped[FinsetFamily] infixl:74 " ⊻ " => Finset.sups
+scoped[FinsetFamily] attribute [instance] Finset.hasSups
variable {s t} {a b c : α}
@[simp]
-theorem mem_sups : c ∈ s ⊻ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊔ b = c := by simp [sups]
+theorem mem_sups : c ∈ s ⊻ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊔ b = c := by simp [(· ⊻ ·)]
#align finset.mem_sups Finset.mem_sups
variable (s t)
@[simp, norm_cast]
-theorem coe_sups : (s ⊻ t : Set α) = Set.image2 (· ⊔ ·) s t :=
+theorem coe_sups : (↑(s ⊻ t) : Set α) = s ⊻ t :=
coe_image₂ _ _ _
#align finset.coe_sups Finset.coe_sups
@@ -94,11 +96,11 @@ theorem sups_subset_right : s₁ ⊆ s₂ → s₁ ⊻ t ⊆ s₂ ⊻ t :=
image₂_subset_right
#align finset.sups_subset_right Finset.sups_subset_right
-theorem image_subset_sups_left : b ∈ t → (fun a => a ⊔ b) '' s ⊆ s ⊻ t :=
+theorem image_subset_sups_left : b ∈ t → (s.image fun a => a ⊔ b) ⊆ s ⊻ t :=
image_subset_image₂_left
#align finset.image_subset_sups_left Finset.image_subset_sups_left
-theorem image_subset_sups_right : a ∈ s → (· ⊔ ·) a '' t ⊆ s ⊻ t :=
+theorem image_subset_sups_right : a ∈ s → t.image ((· ⊔ ·) a) ⊆ s ⊻ t :=
image_subset_image₂_right
#align finset.image_subset_sups_right Finset.image_subset_sups_right
@@ -112,11 +114,11 @@ theorem sups_subset_iff : s ⊻ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊔ b
#align finset.sups_subset_iff Finset.sups_subset_iff
@[simp]
-theorem sups_nonempty_iff : (s ⊻ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
+theorem sups_nonempty : (s ⊻ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
-#align finset.sups_nonempty_iff Finset.sups_nonempty_iff
+#align finset.sups_nonempty Finset.sups_nonempty
-theorem Nonempty.sups : s.Nonempty → t.Nonempty → (s ⊻ t).Nonempty :=
+protected theorem Nonempty.sups : s.Nonempty → t.Nonempty → (s ⊻ t).Nonempty :=
Nonempty.image₂
#align finset.nonempty.sups Finset.Nonempty.sups
@@ -129,37 +131,33 @@ theorem Nonempty.of_sups_right : (s ⊻ t).Nonempty → t.Nonempty :=
#align finset.nonempty.of_sups_right Finset.Nonempty.of_sups_right
@[simp]
-theorem sups_empty_left : ∅ ⊻ t = ∅ :=
+theorem empty_sups : ∅ ⊻ t = ∅ :=
image₂_empty_left
-#align finset.sups_empty_left Finset.sups_empty_left
+#align finset.empty_sups Finset.empty_sups
@[simp]
-theorem sups_empty_right : s ⊻ ∅ = ∅ :=
+theorem sups_empty : s ⊻ ∅ = ∅ :=
image₂_empty_right
-#align finset.sups_empty_right Finset.sups_empty_right
+#align finset.sups_empty Finset.sups_empty
@[simp]
-theorem sups_eq_empty_iff : s ⊻ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
+theorem sups_eq_empty : s ⊻ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
-#align finset.sups_eq_empty_iff Finset.sups_eq_empty_iff
+#align finset.sups_eq_empty Finset.sups_eq_empty
@[simp]
-theorem sups_singleton_left : {a} ⊻ t = t.image fun b => a ⊔ b :=
+theorem singleton_sups : {a} ⊻ t = t.image fun b => a ⊔ b :=
image₂_singleton_left
-#align finset.sups_singleton_left Finset.sups_singleton_left
+#align finset.singleton_sups Finset.singleton_sups
@[simp]
-theorem sups_singleton_right : s ⊻ {b} = s.image fun a => a ⊔ b :=
+theorem sups_singleton : s ⊻ {b} = s.image fun a => a ⊔ b :=
image₂_singleton_right
-#align finset.sups_singleton_right Finset.sups_singleton_right
-
-theorem sups_singleton_left' : {a} ⊻ t = t.image ((· ⊔ ·) a) :=
- image₂_singleton_left'
-#align finset.sups_singleton_left' Finset.sups_singleton_left'
+#align finset.sups_singleton Finset.sups_singleton
-theorem sups_singleton : ({a} ⊻ {b} : Finset α) = {a ⊔ b} :=
+theorem singleton_sups_singleton : ({a} ⊻ {b} : Finset α) = {a ⊔ b} :=
image₂_singleton
-#align finset.sups_singleton Finset.sups_singleton
+#align finset.singleton_sups_singleton Finset.singleton_sups_singleton
theorem sups_union_left : (s₁ ∪ s₂) ⊻ t = s₁ ⊻ t ∪ s₂ ⊻ t :=
image₂_union_left
@@ -178,11 +176,11 @@ theorem sups_inter_subset_right : s ⊻ (t₁ ∩ t₂) ⊆ s ⊻ t₁ ∩ s ⊻
#align finset.sups_inter_subset_right Finset.sups_inter_subset_right
theorem subset_sups {s t : Set α} :
- ↑u ⊆ Set.image2 (· ⊔ ·) s t → ∃ s' t' : Finset α, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' ⊻ t' :=
+ ↑u ⊆ s ⊻ t → ∃ s' t' : Finset α, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' ⊻ t' :=
subset_image₂
#align finset.subset_sups Finset.subset_sups
-variable (s t u)
+variable (s t u v)
theorem bunionᵢ_image_sup_left : (s.bunionᵢ fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
bunionᵢ_image_left
@@ -214,30 +212,33 @@ theorem sups_right_comm : s ⊻ t ⊻ u = s ⊻ u ⊻ t :=
image₂_right_comm sup_right_comm
#align finset.sups_right_comm Finset.sups_right_comm
+theorem sups_sups_sups_comm : s ⊻ t ⊻ (u ⊻ v) = s ⊻ u ⊻ (t ⊻ v) :=
+ image₂_image₂_image₂_comm sup_sup_sup_comm
+#align finset.sups_sups_sups_comm Finset.sups_sups_sups_comm
+
end Sups
section Infs
-variable [SemilatticeInf α] (s s₁ s₂ t t₁ t₂ u : Finset α)
+variable [SemilatticeInf α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
-/-- The finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`. -/
-def infs (s t : Finset α) : Finset α :=
- image₂ (· ⊓ ·) s t
-#align finset.infs Finset.infs
+/-- `s ⊼ t` is the finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`. -/
+protected def hasInfs : HasInfs (Finset α) :=
+ ⟨image₂ (· ⊓ ·)⟩
+#align finset.has_infs Finset.hasInfs
--- mathport name: finset.infs
-scoped[FinsetFamily] infixl:74 " ⊼ " => Finset.infs
+scoped[FinsetFamily] attribute [instance] Finset.hasInfs
variable {s t} {a b c : α}
@[simp]
-theorem mem_infs : c ∈ s ⊼ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊓ b = c := by simp [infs]
+theorem mem_infs : c ∈ s ⊼ t ↔ ∃ a ∈ s, ∃ b ∈ t, a ⊓ b = c := by simp [(· ⊼ ·)]
#align finset.mem_infs Finset.mem_infs
variable (s t)
@[simp, norm_cast]
-theorem coe_infs : (s ⊼ t : Set α) = Set.image2 (· ⊓ ·) s t :=
+theorem coe_infs : (↑(s ⊼ t) : Set α) = s ⊼ t :=
coe_image₂ _ _ _
#align finset.coe_infs Finset.coe_infs
@@ -269,11 +270,11 @@ theorem infs_subset_right : s₁ ⊆ s₂ → s₁ ⊼ t ⊆ s₂ ⊼ t :=
image₂_subset_right
#align finset.infs_subset_right Finset.infs_subset_right
-theorem image_subset_infs_left : b ∈ t → (fun a => a ⊓ b) '' s ⊆ s ⊼ t :=
+theorem image_subset_infs_left : b ∈ t → (s.image fun a => a ⊓ b) ⊆ s ⊼ t :=
image_subset_image₂_left
#align finset.image_subset_infs_left Finset.image_subset_infs_left
-theorem image_subset_infs_right : a ∈ s → (· ⊓ ·) a '' t ⊆ s ⊼ t :=
+theorem image_subset_infs_right : a ∈ s → t.image ((· ⊓ ·) a) ⊆ s ⊼ t :=
image_subset_image₂_right
#align finset.image_subset_infs_right Finset.image_subset_infs_right
@@ -287,11 +288,11 @@ theorem infs_subset_iff : s ⊼ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊓ b
#align finset.infs_subset_iff Finset.infs_subset_iff
@[simp]
-theorem infs_nonempty_iff : (s ⊼ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
+theorem infs_nonempty : (s ⊼ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
-#align finset.infs_nonempty_iff Finset.infs_nonempty_iff
+#align finset.infs_nonempty Finset.infs_nonempty
-theorem Nonempty.infs : s.Nonempty → t.Nonempty → (s ⊼ t).Nonempty :=
+protected theorem Nonempty.infs : s.Nonempty → t.Nonempty → (s ⊼ t).Nonempty :=
Nonempty.image₂
#align finset.nonempty.infs Finset.Nonempty.infs
@@ -304,37 +305,33 @@ theorem Nonempty.of_infs_right : (s ⊼ t).Nonempty → t.Nonempty :=
#align finset.nonempty.of_infs_right Finset.Nonempty.of_infs_right
@[simp]
-theorem infs_empty_left : ∅ ⊼ t = ∅ :=
+theorem empty_infs : ∅ ⊼ t = ∅ :=
image₂_empty_left
-#align finset.infs_empty_left Finset.infs_empty_left
+#align finset.empty_infs Finset.empty_infs
@[simp]
-theorem infs_empty_right : s ⊼ ∅ = ∅ :=
+theorem infs_empty : s ⊼ ∅ = ∅ :=
image₂_empty_right
-#align finset.infs_empty_right Finset.infs_empty_right
+#align finset.infs_empty Finset.infs_empty
@[simp]
-theorem infs_eq_empty_iff : s ⊼ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
+theorem infs_eq_empty : s ⊼ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
-#align finset.infs_eq_empty_iff Finset.infs_eq_empty_iff
+#align finset.infs_eq_empty Finset.infs_eq_empty
@[simp]
-theorem infs_singleton_left : {a} ⊼ t = t.image fun b => a ⊓ b :=
+theorem singleton_infs : {a} ⊼ t = t.image fun b => a ⊓ b :=
image₂_singleton_left
-#align finset.infs_singleton_left Finset.infs_singleton_left
+#align finset.singleton_infs Finset.singleton_infs
@[simp]
-theorem infs_singleton_right : s ⊼ {b} = s.image fun a => a ⊓ b :=
+theorem infs_singleton : s ⊼ {b} = s.image fun a => a ⊓ b :=
image₂_singleton_right
-#align finset.infs_singleton_right Finset.infs_singleton_right
-
-theorem infs_singleton_left' : {a} ⊼ t = t.image ((· ⊓ ·) a) :=
- image₂_singleton_left'
-#align finset.infs_singleton_left' Finset.infs_singleton_left'
+#align finset.infs_singleton Finset.infs_singleton
-theorem infs_singleton : ({a} ⊼ {b} : Finset α) = {a ⊓ b} :=
+theorem singleton_infs_singleton : ({a} ⊼ {b} : Finset α) = {a ⊓ b} :=
image₂_singleton
-#align finset.infs_singleton Finset.infs_singleton
+#align finset.singleton_infs_singleton Finset.singleton_infs_singleton
theorem infs_union_left : (s₁ ∪ s₂) ⊼ t = s₁ ⊼ t ∪ s₂ ⊼ t :=
image₂_union_left
@@ -353,11 +350,11 @@ theorem infs_inter_subset_right : s ⊼ (t₁ ∩ t₂) ⊆ s ⊼ t₁ ∩ s ⊼
#align finset.infs_inter_subset_right Finset.infs_inter_subset_right
theorem subset_infs {s t : Set α} :
- ↑u ⊆ Set.image2 (· ⊓ ·) s t → ∃ s' t' : Finset α, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' ⊼ t' :=
+ ↑u ⊆ s ⊼ t → ∃ s' t' : Finset α, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' ⊼ t' :=
subset_image₂
#align finset.subset_infs Finset.subset_infs
-variable (s t u)
+variable (s t u v)
theorem bunionᵢ_image_inf_left : (s.bunionᵢ fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
bunionᵢ_image_left
@@ -389,10 +386,36 @@ theorem infs_right_comm : s ⊼ t ⊼ u = s ⊼ u ⊼ t :=
image₂_right_comm inf_right_comm
#align finset.infs_right_comm Finset.infs_right_comm
+theorem infs_infs_infs_comm : s ⊼ t ⊼ (u ⊼ v) = s ⊼ u ⊼ (t ⊼ v) :=
+ image₂_image₂_image₂_comm inf_inf_inf_comm
+#align finset.infs_infs_infs_comm Finset.infs_infs_infs_comm
+
end Infs
open FinsetFamily
+section DistribLattice
+
+variable [DistribLattice α] (s t u : Finset α)
+
+theorem sups_infs_subset_left : s ⊻ t ⊼ u ⊆ (s ⊻ t) ⊼ (s ⊻ u) :=
+ image₂_distrib_subset_left fun _ _ _ => sup_inf_left
+#align finset.sups_infs_subset_left Finset.sups_infs_subset_left
+
+theorem sups_infs_subset_right : t ⊼ u ⊻ s ⊆ (t ⊻ s) ⊼ (u ⊻ s) :=
+ image₂_distrib_subset_right fun _ _ _ => sup_inf_right
+#align finset.sups_infs_subset_right Finset.sups_infs_subset_right
+
+theorem infs_sups_subset_left : s ⊼ (t ⊻ u) ⊆ s ⊼ t ⊻ s ⊼ u :=
+ image₂_distrib_subset_left fun _ _ _ => inf_sup_left
+#align finset.infs_sups_subset_left Finset.infs_sups_subset_left
+
+theorem infs_sups_subset_right : (t ⊻ u) ⊼ s ⊆ t ⊼ s ⊻ u ⊼ s :=
+ image₂_distrib_subset_right fun _ _ _ => inf_sup_right
+#align finset.infs_sups_subset_right Finset.infs_sups_subset_right
+
+end DistribLattice
+
section DisjSups
variable [SemilatticeSup α] [OrderBot α] [@DecidableRel α Disjoint] (s s₁ s₂ t t₁ t₂ u : Finset α)
@@ -508,7 +531,7 @@ open FinsetFamily
section DistribLattice
-variable [DistribLattice α] [OrderBot α] [@DecidableRel α Disjoint] (s t u : Finset α)
+variable [DistribLattice α] [OrderBot α] [@DecidableRel α Disjoint] (s t u v : Finset α)
theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u) :=
by
@@ -526,6 +549,10 @@ theorem disjSups_left_comm : s ○ (t ○ u) = t ○ (s ○ u) := by
theorem disjSups_right_comm : s ○ t ○ u = s ○ u ○ t := by simp_rw [disj_sups_assoc, disj_sups_comm]
#align finset.disj_sups_right_comm Finset.disjSups_right_comm
+theorem disjSups_disjSups_disjSups_comm : s ○ t ○ (u ○ v) = s ○ u ○ (t ○ v) := by
+ simp_rw [← disj_sups_assoc, disj_sups_right_comm]
+#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_comm
+
end DistribLattice
end Finset
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Standardizes the following names for distributivity laws across Finset
and Set
:
inter_union_distrib_left
inter_union_distrib_right
union_inter_distrib_left
union_inter_distrib_right
Makes arguments explicit in:
Set.union_inter_distrib_right
Set.union_inter_distrib_left
Set.inter_union_distrib_right
Deprecates these theorem names:
Finset.inter_distrib_left
Finset.inter_distrib_right
Finset.union_distrib_right
Finset.union_distrib_left
Set.inter_distrib_left
Set.inter_distrib_right
Set.union_distrib_right
Set.union_distrib_left
Fixes use of deprecated names and implicit arguments in these files:
@@ -445,7 +445,7 @@ variable {𝒜 ℬ : Finset (Finset α)} {s t : Finset α} {a : α}
ext u
simp only [mem_sups, mem_powerset, le_eq_subset, sup_eq_union]
refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
- · rwa [← inter_distrib_right, inter_eq_right]
+ · rwa [← union_inter_distrib_right, inter_eq_right]
· rintro ⟨v, hv, w, hw, rfl⟩
exact union_subset_union hv hw
λ
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.@@ -739,10 +739,10 @@ protected alias ⟨Nonempty.of_compls, Nonempty.compls⟩ := compls_nonempty
@[simp] lemma compls_inter (s t : Finset α) : (s ∩ t)ᶜˢ = sᶜˢ ∩ tᶜˢ := map_inter _ _
@[simp] lemma compls_infs (s t : Finset α) : (s ⊼ t)ᶜˢ = sᶜˢ ⊻ tᶜˢ := by
- simp_rw [← image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_inf
+ simp_rw [← image_compl]; exact image_image₂_distrib fun _ _ ↦ compl_inf
@[simp] lemma compls_sups (s t : Finset α) : (s ⊻ t)ᶜˢ = sᶜˢ ⊼ tᶜˢ := by
- simp_rw [← image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_sup
+ simp_rw [← image_compl]; exact image_image₂_distrib fun _ _ ↦ compl_sup
@[simp] lemma infs_compls_eq_diffs (s t : Finset α) : s ⊼ tᶜˢ = s \\ t := by
ext; simp [sdiff_eq]; aesop
@@ -757,7 +757,7 @@ variable [Fintype α] {𝒜 : Finset (Finset α)} {n : ℕ}
protected lemma _root_.Set.Sized.compls (h𝒜 : (𝒜 : Set (Finset α)).Sized n) :
(𝒜ᶜˢ : Set (Finset α)).Sized (Fintype.card α - n) :=
- Finset.forall_mem_compls.2 <| λ s hs ↦ by rw [Finset.card_compl, h𝒜 hs]
+ Finset.forall_mem_compls.2 <| fun s hs ↦ by rw [Finset.card_compl, h𝒜 hs]
lemma sized_compls (hn : n ≤ Fintype.card α) :
(𝒜ᶜˢ : Set (Finset α)).Sized n ↔ (𝒜 : Set (Finset α)).Sized (Fintype.card α - n) where
Those lemmas have historically been very annoying to use in rw
since all their arguments were implicit. One too many people complained about it on Zulip, so I'm changing them.
Downstream code broken by this change can fix it by adding appropriately many _
s.
Also marks CauSeq.ext
@[ext]
.
Order.BoundedOrder
top_sup_eq
sup_top_eq
bot_sup_eq
sup_bot_eq
top_inf_eq
inf_top_eq
bot_inf_eq
inf_bot_eq
Order.Lattice
sup_idem
sup_comm
sup_assoc
sup_left_idem
sup_right_idem
inf_idem
inf_comm
inf_assoc
inf_left_idem
inf_right_idem
sup_inf_left
sup_inf_right
inf_sup_left
inf_sup_right
Order.MinMax
max_min_distrib_left
max_min_distrib_right
min_max_distrib_left
min_max_distrib_right
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -186,7 +186,7 @@ lemma map_sups (f : F) (hf) (s t : Finset α) :
map ⟨f, hf⟩ (s ⊻ t) = map ⟨f, hf⟩ s ⊻ map ⟨f, hf⟩ t := by
simpa [map_eq_image] using image_sups f s t
-lemma subset_sups_self : s ⊆ s ⊻ s := fun _a ha ↦ mem_sups.2 ⟨_, ha, _, ha, sup_idem⟩
+lemma subset_sups_self : s ⊆ s ⊻ s := fun _a ha ↦ mem_sups.2 ⟨_, ha, _, ha, sup_idem _⟩
lemma sups_subset_self : s ⊻ s ⊆ s ↔ SupClosed (s : Set α) := sups_subset_iff
@[simp] lemma sups_eq_self : s ⊻ s = s ↔ SupClosed (s : Set α) := by simp [← coe_inj]
@@ -209,12 +209,10 @@ theorem image_sup_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊔
image_uncurry_product _ _ _
#align finset.image_sup_product Finset.image_sup_product
-theorem sups_assoc : s ⊻ t ⊻ u = s ⊻ (t ⊻ u) :=
- image₂_assoc fun _ _ _ => sup_assoc
+theorem sups_assoc : s ⊻ t ⊻ u = s ⊻ (t ⊻ u) := image₂_assoc sup_assoc
#align finset.sups_assoc Finset.sups_assoc
-theorem sups_comm : s ⊻ t = t ⊻ s :=
- image₂_comm fun _ _ => sup_comm
+theorem sups_comm : s ⊻ t = t ⊻ s := image₂_comm sup_comm
#align finset.sups_comm Finset.sups_comm
theorem sups_left_comm : s ⊻ (t ⊻ u) = t ⊻ (s ⊻ u) :=
@@ -371,7 +369,7 @@ lemma map_infs (f : F) (hf) (s t : Finset α) :
map ⟨f, hf⟩ (s ⊼ t) = map ⟨f, hf⟩ s ⊼ map ⟨f, hf⟩ t := by
simpa [map_eq_image] using image_infs f s t
-lemma subset_infs_self : s ⊆ s ⊼ s := fun _a ha ↦ mem_infs.2 ⟨_, ha, _, ha, inf_idem⟩
+lemma subset_infs_self : s ⊆ s ⊼ s := fun _a ha ↦ mem_infs.2 ⟨_, ha, _, ha, inf_idem _⟩
lemma infs_self_subset : s ⊼ s ⊆ s ↔ InfClosed (s : Set α) := infs_subset_iff
@[simp] lemma infs_self : s ⊼ s = s ↔ InfClosed (s : Set α) := by simp [← coe_inj]
@@ -394,12 +392,10 @@ theorem image_inf_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊓
image_uncurry_product _ _ _
#align finset.image_inf_product Finset.image_inf_product
-theorem infs_assoc : s ⊼ t ⊼ u = s ⊼ (t ⊼ u) :=
- image₂_assoc fun _ _ _ => inf_assoc
+theorem infs_assoc : s ⊼ t ⊼ u = s ⊼ (t ⊼ u) := image₂_assoc inf_assoc
#align finset.infs_assoc Finset.infs_assoc
-theorem infs_comm : s ⊼ t = t ⊼ s :=
- image₂_comm fun _ _ => inf_comm
+theorem infs_comm : s ⊼ t = t ⊼ s := image₂_comm inf_comm
#align finset.infs_comm Finset.infs_comm
theorem infs_left_comm : s ⊼ (t ⊼ u) = t ⊼ (s ⊼ u) :=
@@ -425,19 +421,19 @@ section DistribLattice
variable [DistribLattice α] (s t u : Finset α)
theorem sups_infs_subset_left : s ⊻ t ⊼ u ⊆ (s ⊻ t) ⊼ (s ⊻ u) :=
- image₂_distrib_subset_left fun _ _ _ => sup_inf_left
+ image₂_distrib_subset_left sup_inf_left
#align finset.sups_infs_subset_left Finset.sups_infs_subset_left
theorem sups_infs_subset_right : t ⊼ u ⊻ s ⊆ (t ⊻ s) ⊼ (u ⊻ s) :=
- image₂_distrib_subset_right fun _ _ _ => sup_inf_right
+ image₂_distrib_subset_right sup_inf_right
#align finset.sups_infs_subset_right Finset.sups_infs_subset_right
theorem infs_sups_subset_left : s ⊼ (t ⊻ u) ⊆ s ⊼ t ⊻ s ⊼ u :=
- image₂_distrib_subset_left fun _ _ _ => inf_sup_left
+ image₂_distrib_subset_left inf_sup_left
#align finset.infs_sups_subset_left Finset.infs_sups_subset_left
theorem infs_sups_subset_right : (t ⊻ u) ⊼ s ⊆ t ⊼ s ⊻ u ⊼ s :=
- image₂_distrib_subset_right fun _ _ _ => inf_sup_right
+ image₂_distrib_subset_right inf_sup_right
#align finset.infs_sups_subset_right Finset.infs_sups_subset_right
end DistribLattice
@@ -596,7 +592,7 @@ theorem disjSups_assoc : ∀ s t u : Finset α, s ○ t ○ u = s ○ (t ○ u)
simp only [le_eq_subset, disjSups_subset_iff, mem_disjSups]
rintro s t u _ ⟨a, ha, b, hb, hab, rfl⟩ c hc habc
rw [disjoint_sup_left] at habc
- exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, sup_assoc.symm⟩
+ exact ⟨a, ha, _, ⟨b, hb, c, hc, habc.2, rfl⟩, hab.sup_right habc.1, (sup_assoc ..).symm⟩
#align finset.disj_sups_assoc Finset.disjSups_assoc
theorem disjSups_left_comm : s ○ (t ○ u) = t ○ (s ○ u) := by
@@ -116,7 +116,7 @@ theorem sups_subset_iff : s ⊻ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊔ b
image₂_subset_iff
#align finset.sups_subset_iff Finset.sups_subset_iff
-@[simp, aesop safe apply (rule_sets [finsetNonempty])]
+@[simp, aesop safe apply (rule_sets := [finsetNonempty])]
theorem sups_nonempty : (s ⊻ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.sups_nonempty Finset.sups_nonempty
@@ -301,7 +301,7 @@ theorem infs_subset_iff : s ⊼ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊓ b
image₂_subset_iff
#align finset.infs_subset_iff Finset.infs_subset_iff
-@[simp, aesop safe apply (rule_sets [finsetNonempty])]
+@[simp, aesop safe apply (rule_sets := [finsetNonempty])]
theorem infs_nonempty : (s ⊼ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.infs_nonempty Finset.infs_nonempty
@@ -656,7 +656,7 @@ lemma forall_mem_diffs {p : α → Prop} : (∀ c ∈ s \\ t, p c) ↔ ∀ a ∈
@[simp] lemma diffs_subset_iff : s \\ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a \ b ∈ u := image₂_subset_iff
-@[simp, aesop safe apply (rule_sets [finsetNonempty])]
+@[simp, aesop safe apply (rule_sets := [finsetNonempty])]
lemma diffs_nonempty : (s \\ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty := image₂_nonempty_iff
protected lemma Nonempty.diffs : s.Nonempty → t.Nonempty → (s \\ t).Nonempty := Nonempty.image₂
@@ -730,7 +730,7 @@ lemma exists_compls_iff {p : α → Prop} : (∃ a ∈ sᶜˢ, p a) ↔ ∃ a
lemma compls_subset_iff : sᶜˢ ⊆ t ↔ s ⊆ tᶜˢ := by rw [← compls_subset_compls, compls_compls]
-@[simp, aesop safe apply (rule_sets [finsetNonempty])]
+@[simp, aesop safe apply (rule_sets := [finsetNonempty])]
lemma compls_nonempty : sᶜˢ.Nonempty ↔ s.Nonempty := map_nonempty
protected alias ⟨Nonempty.of_compls, Nonempty.compls⟩ := compls_nonempty
Finset.sum
(#10538)
Also define a new aesop
rule-set and an auxiliary metaprogram proveFinsetNonempty
for dealing with Finset.Nonempty
conditions.
From LeanAPAP
Co-authored-by: Alex J. Best <alex.j.best@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Alex J Best <alex.j.best@gmail.com>
@@ -116,7 +116,7 @@ theorem sups_subset_iff : s ⊻ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊔ b
image₂_subset_iff
#align finset.sups_subset_iff Finset.sups_subset_iff
-@[simp]
+@[simp, aesop safe apply (rule_sets [finsetNonempty])]
theorem sups_nonempty : (s ⊻ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.sups_nonempty Finset.sups_nonempty
@@ -301,7 +301,7 @@ theorem infs_subset_iff : s ⊼ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a ⊓ b
image₂_subset_iff
#align finset.infs_subset_iff Finset.infs_subset_iff
-@[simp]
+@[simp, aesop safe apply (rule_sets [finsetNonempty])]
theorem infs_nonempty : (s ⊼ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.infs_nonempty Finset.infs_nonempty
@@ -656,7 +656,8 @@ lemma forall_mem_diffs {p : α → Prop} : (∀ c ∈ s \\ t, p c) ↔ ∀ a ∈
@[simp] lemma diffs_subset_iff : s \\ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a \ b ∈ u := image₂_subset_iff
-@[simp] lemma diffs_nonempty : (s \\ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty := image₂_nonempty_iff
+@[simp, aesop safe apply (rule_sets [finsetNonempty])]
+lemma diffs_nonempty : (s \\ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty := image₂_nonempty_iff
protected lemma Nonempty.diffs : s.Nonempty → t.Nonempty → (s \\ t).Nonempty := Nonempty.image₂
@@ -729,7 +730,8 @@ lemma exists_compls_iff {p : α → Prop} : (∃ a ∈ sᶜˢ, p a) ↔ ∃ a
lemma compls_subset_iff : sᶜˢ ⊆ t ↔ s ⊆ tᶜˢ := by rw [← compls_subset_compls, compls_compls]
-@[simp] lemma compls_nonempty : sᶜˢ.Nonempty ↔ s.Nonempty := map_nonempty
+@[simp, aesop safe apply (rule_sets [finsetNonempty])]
+lemma compls_nonempty : sᶜˢ.Nonempty ↔ s.Nonempty := map_nonempty
protected alias ⟨Nonempty.of_compls, Nonempty.compls⟩ := compls_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>
@@ -49,7 +49,8 @@ variable {F α β : Type*} [DecidableEq α] [DecidableEq β]
namespace Finset
section Sups
-variable [SemilatticeSup α] [SemilatticeSup β] [SupHomClass F α β] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+variable [SemilatticeSup α] [SemilatticeSup β] [FunLike F α β] [SupHomClass F α β]
+variable (s s₁ s₂ t t₁ t₂ u v : Finset α)
/-- `s ⊻ t` is the finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`. -/
protected def hasSups : HasSups (Finset α) :=
@@ -233,7 +234,8 @@ theorem sups_sups_sups_comm : s ⊻ t ⊻ (u ⊻ v) = s ⊻ u ⊻ (t ⊻ v) :=
end Sups
section Infs
-variable [SemilatticeInf α] [SemilatticeInf β] [InfHomClass F α β] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+variable [SemilatticeInf α] [SemilatticeInf β] [FunLike F α β] [InfHomClass F α β]
+variable (s s₁ s₂ t t₁ t₂ u v : Finset α)
/-- `s ⊼ t` is the finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`. -/
protected def hasInfs : HasInfs (Finset α) :=
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -179,7 +179,7 @@ theorem subset_sups {s t : Set α} :
#align finset.subset_sups Finset.subset_sups
lemma image_sups (f : F) (s t : Finset α) : image f (s ⊻ t) = image f s ⊻ image f t :=
- image_image₂_distrib $ map_sup f
+ image_image₂_distrib <| map_sup f
lemma map_sups (f : F) (hf) (s t : Finset α) :
map ⟨f, hf⟩ (s ⊻ t) = map ⟨f, hf⟩ s ⊻ map ⟨f, hf⟩ t := by
@@ -363,7 +363,7 @@ theorem subset_infs {s t : Set α} :
#align finset.subset_infs Finset.subset_infs
lemma image_infs (f : F) (s t : Finset α) : image f (s ⊼ t) = image f s ⊼ image f t :=
- image_image₂_distrib $ map_inf f
+ image_image₂_distrib <| map_inf f
lemma map_infs (f : F) (hf) (s t : Finset α) :
map ⟨f, hf⟩ (s ⊼ t) = map ⟨f, hf⟩ s ⊼ map ⟨f, hf⟩ t := by
@@ -757,7 +757,7 @@ variable [Fintype α] {𝒜 : Finset (Finset α)} {n : ℕ}
protected lemma _root_.Set.Sized.compls (h𝒜 : (𝒜 : Set (Finset α)).Sized n) :
(𝒜ᶜˢ : Set (Finset α)).Sized (Fintype.card α - n) :=
- Finset.forall_mem_compls.2 $ λ s hs ↦ by rw [Finset.card_compl, h𝒜 hs]
+ Finset.forall_mem_compls.2 <| λ s hs ↦ by rw [Finset.card_compl, h𝒜 hs]
lemma sized_compls (hn : n ≤ Fintype.card α) :
(𝒜ᶜˢ : Set (Finset α)).Sized n ↔ (𝒜 : Set (Finset α)).Sized (Fintype.card α - n) where
Finset
lemma names (#8894)
Change a few lemma names that have historically bothered me.
Finset.card_le_of_subset
→ Finset.card_le_card
Multiset.card_le_of_le
→ Multiset.card_le_card
Multiset.card_lt_of_lt
→ Multiset.card_lt_card
Set.ncard_le_of_subset
→ Set.ncard_le_ncard
Finset.image_filter
→ Finset.filter_image
CompleteLattice.finset_sup_compact_of_compact
→ CompleteLattice.isCompactElement_finset_sup
@@ -500,7 +500,7 @@ theorem disjSups_subset_sups : s ○ t ⊆ s ⊻ t := by
variable (s t)
theorem card_disjSups_le : (s ○ t).card ≤ s.card * t.card :=
- (card_le_of_subset disjSups_subset_sups).trans <| card_sups_le _ _
+ (card_le_card disjSups_subset_sups).trans <| card_sups_le _ _
#align finset.card_disj_sups_le Finset.card_disjSups_le
variable {s s₁ s₂ t t₁ t₂}
@@ -187,13 +187,13 @@ lemma map_sups (f : F) (hf) (s t : Finset α) :
lemma subset_sups_self : s ⊆ s ⊻ s := fun _a ha ↦ mem_sups.2 ⟨_, ha, _, ha, sup_idem⟩
lemma sups_subset_self : s ⊻ s ⊆ s ↔ SupClosed (s : Set α) := sups_subset_iff
-@[simp] lemma sups_eq_self : s ⊻ s = s ↔ SupClosed (s : Set α) := by simp [←coe_inj]
+@[simp] lemma sups_eq_self : s ⊻ s = s ↔ SupClosed (s : Set α) := by simp [← coe_inj]
@[simp] lemma univ_sups_univ [Fintype α] : (univ : Finset α) ⊻ univ = univ := by simp
lemma filter_sups_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
(s ⊻ t).filter (· ≤ a) = s.filter (· ≤ a) ⊻ t.filter (· ≤ a) := by
- simp only [←coe_inj, coe_filter, coe_sups, ←mem_coe, Set.sep_sups_le]
+ simp only [← coe_inj, coe_filter, coe_sups, ← mem_coe, Set.sep_sups_le]
variable (s t u)
@@ -371,13 +371,13 @@ lemma map_infs (f : F) (hf) (s t : Finset α) :
lemma subset_infs_self : s ⊆ s ⊼ s := fun _a ha ↦ mem_infs.2 ⟨_, ha, _, ha, inf_idem⟩
lemma infs_self_subset : s ⊼ s ⊆ s ↔ InfClosed (s : Set α) := infs_subset_iff
-@[simp] lemma infs_self : s ⊼ s = s ↔ InfClosed (s : Set α) := by simp [←coe_inj]
+@[simp] lemma infs_self : s ⊼ s = s ↔ InfClosed (s : Set α) := by simp [← coe_inj]
@[simp] lemma univ_infs_univ [Fintype α] : (univ : Finset α) ⊼ univ = univ := by simp
lemma filter_infs_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
(s ⊼ t).filter (a ≤ ·) = s.filter (a ≤ ·) ⊼ t.filter (a ≤ ·) := by
- simp only [←coe_inj, coe_filter, coe_infs, ←mem_coe, Set.sep_infs_le]
+ simp only [← coe_inj, coe_filter, coe_infs, ← mem_coe, Set.sep_infs_le]
variable (s t u)
@@ -447,7 +447,7 @@ variable {𝒜 ℬ : Finset (Finset α)} {s t : Finset α} {a : α}
ext u
simp only [mem_sups, mem_powerset, le_eq_subset, sup_eq_union]
refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
- · rwa [←inter_distrib_right, inter_eq_right]
+ · rwa [← inter_distrib_right, inter_eq_right]
· rintro ⟨v, hv, w, hw, rfl⟩
exact union_subset_union hv hw
@@ -455,15 +455,15 @@ variable {𝒜 ℬ : Finset (Finset α)} {s t : Finset α} {a : α}
ext u
simp only [mem_infs, mem_powerset, le_eq_subset, inf_eq_inter]
refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
- · rwa [←inter_inter_distrib_right, inter_eq_right]
+ · rwa [← inter_inter_distrib_right, inter_eq_right]
· rintro ⟨v, hv, w, hw, rfl⟩
exact inter_subset_inter hv hw
@[simp] lemma powerset_sups_powerset_self (s : Finset α) :
- s.powerset ⊻ s.powerset = s.powerset := by simp [←powerset_union]
+ s.powerset ⊻ s.powerset = s.powerset := by simp [← powerset_union]
@[simp] lemma powerset_infs_powerset_self (s : Finset α) :
- s.powerset ⊼ s.powerset = s.powerset := by simp [←powerset_inter]
+ s.powerset ⊼ s.powerset = s.powerset := by simp [← powerset_inter]
lemma union_mem_sups : s ∈ 𝒜 → t ∈ ℬ → s ∪ t ∈ 𝒜 ⊻ ℬ := sup_mem_sups
lemma inter_mem_infs : s ∈ 𝒜 → t ∈ ℬ → s ∩ t ∈ 𝒜 ⊼ ℬ := inf_mem_infs
@@ -706,7 +706,7 @@ open FinsetFamily
variable {s t} {a b c : α}
@[simp] lemma mem_compls : a ∈ sᶜˢ ↔ aᶜ ∈ s := by
- rw [Iff.comm, ←mem_map' ⟨compl, compl_injective⟩, Embedding.coeFn_mk, compl_compl, compls]
+ rw [Iff.comm, ← mem_map' ⟨compl, compl_injective⟩, Embedding.coeFn_mk, compl_compl, compls]
variable (s t)
@@ -725,7 +725,7 @@ lemma exists_compls_iff {p : α → Prop} : (∃ a ∈ sᶜˢ, p a) ↔ ∃ a
@[simp] lemma compls_compls (s : Finset α) : sᶜˢᶜˢ = s := by ext; simp
-lemma compls_subset_iff : sᶜˢ ⊆ t ↔ s ⊆ tᶜˢ := by rw [←compls_subset_compls, compls_compls]
+lemma compls_subset_iff : sᶜˢ ⊆ t ↔ s ⊆ tᶜˢ := by rw [← compls_subset_compls, compls_compls]
@[simp] lemma compls_nonempty : sᶜˢ.Nonempty ↔ s.Nonempty := map_nonempty
@@ -739,10 +739,10 @@ protected alias ⟨Nonempty.of_compls, Nonempty.compls⟩ := compls_nonempty
@[simp] lemma compls_inter (s t : Finset α) : (s ∩ t)ᶜˢ = sᶜˢ ∩ tᶜˢ := map_inter _ _
@[simp] lemma compls_infs (s t : Finset α) : (s ⊼ t)ᶜˢ = sᶜˢ ⊻ tᶜˢ := by
- simp_rw [←image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_inf
+ simp_rw [← image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_inf
@[simp] lemma compls_sups (s t : Finset α) : (s ⊻ t)ᶜˢ = sᶜˢ ⊼ tᶜˢ := by
- simp_rw [←image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_sup
+ simp_rw [← image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_sup
@[simp] lemma infs_compls_eq_diffs (s t : Finset α) : s ⊼ tᶜˢ = s \\ t := by
ext; simp [sdiff_eq]; aesop
@@ -751,7 +751,7 @@ protected alias ⟨Nonempty.of_compls, Nonempty.compls⟩ := compls_nonempty
rw [infs_comm, infs_compls_eq_diffs]
@[simp] lemma diffs_compls_eq_infs (s t : Finset α) : s \\ tᶜˢ = s ⊼ t := by
- rw [←infs_compls_eq_diffs, compls_compls]
+ rw [← infs_compls_eq_diffs, compls_compls]
variable [Fintype α] {𝒜 : Finset (Finset α)} {n : ℕ}
Prove the four functions theorem, aka Ahlswede-Daykin inequality, and derive the Holley, Fortuin-Kastelyn-Ginibre and Marica-Schönheim inequalities.
@@ -189,6 +189,8 @@ lemma subset_sups_self : s ⊆ s ⊻ s := fun _a ha ↦ mem_sups.2 ⟨_, ha, _,
lemma sups_subset_self : s ⊻ s ⊆ s ↔ SupClosed (s : Set α) := sups_subset_iff
@[simp] lemma sups_eq_self : s ⊻ s = s ↔ SupClosed (s : Set α) := by simp [←coe_inj]
+@[simp] lemma univ_sups_univ [Fintype α] : (univ : Finset α) ⊻ univ = univ := by simp
+
lemma filter_sups_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
(s ⊻ t).filter (· ≤ a) = s.filter (· ≤ a) ⊻ t.filter (· ≤ a) := by
simp only [←coe_inj, coe_filter, coe_sups, ←mem_coe, Set.sep_sups_le]
@@ -371,6 +373,8 @@ lemma subset_infs_self : s ⊆ s ⊼ s := fun _a ha ↦ mem_infs.2 ⟨_, ha, _,
lemma infs_self_subset : s ⊼ s ⊆ s ↔ InfClosed (s : Set α) := infs_subset_iff
@[simp] lemma infs_self : s ⊼ s = s ↔ InfClosed (s : Set α) := by simp [←coe_inj]
+@[simp] lemma univ_infs_univ [Fintype α] : (univ : Finset α) ⊼ univ = univ := by simp
+
lemma filter_infs_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
(s ⊼ t).filter (a ≤ ·) = s.filter (a ≤ ·) ⊼ t.filter (a ≤ ·) := by
simp only [←coe_inj, coe_filter, coe_infs, ←mem_coe, Set.sep_infs_le]
@@ -414,22 +418,6 @@ end Infs
open FinsetFamily
-@[simp] lemma powerset_union (s t : Finset α) : (s ∪ t).powerset = s.powerset ⊻ t.powerset := by
- ext u
- simp only [mem_sups, mem_powerset, le_eq_subset, sup_eq_union]
- refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
- · rwa [←inter_distrib_right, inter_eq_right]
- · rintro ⟨v, hv, w, hw, rfl⟩
- exact union_subset_union hv hw
-
-@[simp] lemma powerset_inter (s t : Finset α) : (s ∩ t).powerset = s.powerset ⊼ t.powerset := by
- ext u
- simp only [mem_infs, mem_powerset, le_eq_subset, inf_eq_inter]
- refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
- · rwa [←inter_inter_distrib_right, inter_eq_right]
- · rintro ⟨v, hv, w, hw, rfl⟩
- exact inter_subset_inter hv hw
-
section DistribLattice
variable [DistribLattice α] (s t u : Finset α)
@@ -452,6 +440,36 @@ theorem infs_sups_subset_right : (t ⊻ u) ⊼ s ⊆ t ⊼ s ⊻ u ⊼ s :=
end DistribLattice
+section Finset
+variable {𝒜 ℬ : Finset (Finset α)} {s t : Finset α} {a : α}
+
+@[simp] lemma powerset_union (s t : Finset α) : (s ∪ t).powerset = s.powerset ⊻ t.powerset := by
+ ext u
+ simp only [mem_sups, mem_powerset, le_eq_subset, sup_eq_union]
+ refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
+ · rwa [←inter_distrib_right, inter_eq_right]
+ · rintro ⟨v, hv, w, hw, rfl⟩
+ exact union_subset_union hv hw
+
+@[simp] lemma powerset_inter (s t : Finset α) : (s ∩ t).powerset = s.powerset ⊼ t.powerset := by
+ ext u
+ simp only [mem_infs, mem_powerset, le_eq_subset, inf_eq_inter]
+ refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
+ · rwa [←inter_inter_distrib_right, inter_eq_right]
+ · rintro ⟨v, hv, w, hw, rfl⟩
+ exact inter_subset_inter hv hw
+
+@[simp] lemma powerset_sups_powerset_self (s : Finset α) :
+ s.powerset ⊻ s.powerset = s.powerset := by simp [←powerset_union]
+
+@[simp] lemma powerset_infs_powerset_self (s : Finset α) :
+ s.powerset ⊼ s.powerset = s.powerset := by simp [←powerset_inter]
+
+lemma union_mem_sups : s ∈ 𝒜 → t ∈ ℬ → s ∪ t ∈ 𝒜 ⊻ ℬ := sup_mem_sups
+lemma inter_mem_infs : s ∈ 𝒜 → t ∈ ℬ → s ∩ t ∈ 𝒜 ⊼ ℬ := inf_mem_infs
+
+end Finset
+
section DisjSups
variable [SemilatticeSup α] [OrderBot α] [@DecidableRel α Disjoint] (s s₁ s₂ t t₁ t₂ u : Finset α)
sups
(#7254)
Match https://github.com/leanprover-community/mathlib/pull/18612.
The lemmas were already added in #7382, though a slight difference in the statement means that we need a new decidableExistsAndFinsetCoe
instance.
@@ -7,7 +7,7 @@ import Mathlib.Data.Finset.NAry
import Mathlib.Data.Finset.Slice
import Mathlib.Data.Set.Sups
-#align_import data.finset.sups from "leanprover-community/mathlib"@"20715f4ac6819ef2453d9e5106ecd086a5dc2a5e"
+#align_import data.finset.sups from "leanprover-community/mathlib"@"8818fdefc78642a7e6afcd20be5c184f3c7d9699"
/-!
# Set family operations
@@ -37,6 +37,9 @@ We define the following notation in locale `FinsetFamily`:
[B. Bollobás, *Combinatorics*][bollobas1986]
-/
+#align finset.decidable_pred_mem_upper_closure instDecidablePredMemUpperClosure
+#align finset.decidable_pred_mem_lower_closure instDecidablePredMemLowerClosure
+
open Function
open SetFamily
@@ -223,6 +226,8 @@ theorem sups_sups_sups_comm : s ⊻ t ⊻ (u ⊻ v) = s ⊻ u ⊻ (t ⊻ v) :=
image₂_image₂_image₂_comm sup_sup_sup_comm
#align finset.sups_sups_sups_comm Finset.sups_sups_sups_comm
+#align finset.filter_sups_le Finset.filter_sups_le
+
end Sups
section Infs
@@ -403,6 +408,8 @@ theorem infs_infs_infs_comm : s ⊼ t ⊼ (u ⊼ v) = s ⊼ u ⊼ (t ⊼ v) :=
image₂_image₂_image₂_comm inf_inf_inf_comm
#align finset.infs_infs_infs_comm Finset.infs_infs_infs_comm
+#align finset.filter_infs_ge Finset.filter_infs_le
+
end Infs
open FinsetFamily
Define Finset.diffs
and Finset.compls
, the pointwise set difference of two finsets and pointwise complement of a finset.
diffs
appears in the statement of the Marica-Schönheim inequality and compls
in the proof.
Also fix the corresponding statements for sups
and infs
to use the new ·
notation.
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-/
import Mathlib.Data.Finset.NAry
+import Mathlib.Data.Finset.Slice
import Mathlib.Data.Set.Sups
#align_import data.finset.sups from "leanprover-community/mathlib"@"20715f4ac6819ef2453d9e5106ecd086a5dc2a5e"
@@ -15,17 +16,21 @@ This file defines a few binary operations on `Finset α` for use in set family c
## Main declarations
-* `s ⊻ t`: Finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`.
-* `s ⊼ t`: Finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`.
+* `Finset.sups s t`: Finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`.
+* `Finset.infs s t`: Finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`.
* `Finset.disjSups s t`: Finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t` and `a`
and `b` are disjoint.
+* `Finset.diffs`: Finset of elements of the form `a \ b` where `a ∈ s`, `b ∈ t`.
+* `Finset.compls`: Finset of elements of the form `aᶜ` where `a ∈ s`.
## Notation
We define the following notation in locale `FinsetFamily`:
-* `s ⊻ t`
-* `s ⊼ t`
+* `s ⊻ t` for `Finset.sups`
+* `s ⊼ t` for `Finset.infs`
* `s ○ t` for `Finset.disjSups s t`
+* `s \\ t` for `Finset.diffs`
+* `sᶜˢ` for `Finset.compls`
## References
@@ -92,12 +97,10 @@ theorem sups_subset_right : s₁ ⊆ s₂ → s₁ ⊻ t ⊆ s₂ ⊻ t :=
image₂_subset_right
#align finset.sups_subset_right Finset.sups_subset_right
-theorem image_subset_sups_left : b ∈ t → (s.image fun a => a ⊔ b) ⊆ s ⊻ t :=
- image_subset_image₂_left
+lemma image_subset_sups_left : b ∈ t → s.image (· ⊔ b) ⊆ s ⊻ t := image_subset_image₂_left
#align finset.image_subset_sups_left Finset.image_subset_sups_left
-theorem image_subset_sups_right : a ∈ s → t.image (a ⊔ ·) ⊆ s ⊻ t :=
- image_subset_image₂_right (f := (· ⊔ ·))
+lemma image_subset_sups_right : a ∈ s → t.image (a ⊔ ·) ⊆ s ⊻ t := image_subset_image₂_right
#align finset.image_subset_sups_right Finset.image_subset_sups_right
theorem forall_sups_iff {p : α → Prop} : (∀ c ∈ s ⊻ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊔ b) :=
@@ -141,14 +144,10 @@ theorem sups_eq_empty : s ⊻ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.sups_eq_empty Finset.sups_eq_empty
-@[simp]
-theorem singleton_sups : {a} ⊻ t = t.image fun b => a ⊔ b :=
- image₂_singleton_left
+@[simp] lemma singleton_sups : {a} ⊻ t = t.image (a ⊔ ·) := image₂_singleton_left
#align finset.singleton_sups Finset.singleton_sups
-@[simp]
-theorem sups_singleton : s ⊻ {b} = s.image fun a => a ⊔ b :=
- image₂_singleton_right
+@[simp] lemma sups_singleton : s ⊻ {b} = s.image (· ⊔ b) := image₂_singleton_right
#align finset.sups_singleton Finset.sups_singleton
theorem singleton_sups_singleton : ({a} ⊻ {b} : Finset α) = {a ⊔ b} :=
@@ -193,12 +192,10 @@ lemma filter_sups_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
variable (s t u)
-theorem biUnion_image_sup_left : (s.biUnion fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
- biUnion_image_left
+lemma biUnion_image_sup_left : s.biUnion (fun a ↦ t.image (a ⊔ ·)) = s ⊻ t := biUnion_image_left
#align finset.bUnion_image_sup_left Finset.biUnion_image_sup_left
-theorem biUnion_image_sup_right : (t.biUnion fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
- biUnion_image_right
+lemma biUnion_image_sup_right : t.biUnion (fun b ↦ s.image (· ⊔ b)) = s ⊻ t := biUnion_image_right
#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_right
-- Porting note: simpNF linter doesn't like @[simp]
@@ -280,12 +277,10 @@ theorem infs_subset_right : s₁ ⊆ s₂ → s₁ ⊼ t ⊆ s₂ ⊼ t :=
image₂_subset_right
#align finset.infs_subset_right Finset.infs_subset_right
-theorem image_subset_infs_left : b ∈ t → (s.image fun a => a ⊓ b) ⊆ s ⊼ t :=
- image_subset_image₂_left
+lemma image_subset_infs_left : b ∈ t → s.image (· ⊓ b) ⊆ s ⊼ t := image_subset_image₂_left
#align finset.image_subset_infs_left Finset.image_subset_infs_left
-theorem image_subset_infs_right : a ∈ s → t.image (a ⊓ ·) ⊆ s ⊼ t :=
- image_subset_image₂_right (f := (· ⊓ ·))
+lemma image_subset_infs_right : a ∈ s → t.image (a ⊓ ·) ⊆ s ⊼ t := image_subset_image₂_right
#align finset.image_subset_infs_right Finset.image_subset_infs_right
theorem forall_infs_iff {p : α → Prop} : (∀ c ∈ s ⊼ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a ⊓ b) :=
@@ -329,14 +324,10 @@ theorem infs_eq_empty : s ⊼ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.infs_eq_empty Finset.infs_eq_empty
-@[simp]
-theorem singleton_infs : {a} ⊼ t = t.image fun b => a ⊓ b :=
- image₂_singleton_left
+@[simp] lemma singleton_infs : {a} ⊼ t = t.image (a ⊓ ·) := image₂_singleton_left
#align finset.singleton_infs Finset.singleton_infs
-@[simp]
-theorem infs_singleton : s ⊼ {b} = s.image fun a => a ⊓ b :=
- image₂_singleton_right
+@[simp] lemma infs_singleton : s ⊼ {b} = s.image (· ⊓ b) := image₂_singleton_right
#align finset.infs_singleton Finset.infs_singleton
theorem singleton_infs_singleton : ({a} ⊼ {b} : Finset α) = {a ⊓ b} :=
@@ -381,12 +372,10 @@ lemma filter_infs_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
variable (s t u)
-theorem biUnion_image_inf_left : (s.biUnion fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
- biUnion_image_left
+lemma biUnion_image_inf_left : s.biUnion (fun a ↦ t.image (a ⊓ ·)) = s ⊼ t := biUnion_image_left
#align finset.bUnion_image_inf_left Finset.biUnion_image_inf_left
-theorem biUnion_image_inf_right : (t.biUnion fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
- biUnion_image_right
+lemma biUnion_image_inf_right : t.biUnion (fun b ↦ s.image (· ⊓ b)) = s ⊼ t := biUnion_image_right
#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_right
-- Porting note: simpNF linter doesn't like @[simp]
@@ -595,5 +584,160 @@ theorem disjSups_disjSups_disjSups_comm : s ○ t ○ (u ○ v) = s ○ u ○ (t
#align finset.disj_sups_disj_sups_disj_sups_comm Finset.disjSups_disjSups_disjSups_comm
end DistribLattice
+section Diffs
+variable [GeneralizedBooleanAlgebra α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+
+/-- `s \\ t` is the finset of elements of the form `a \ b` where `a ∈ s`, `b ∈ t`. -/
+def diffs : Finset α → Finset α → Finset α := image₂ (· \ ·)
+
+@[inherit_doc]
+scoped[FinsetFamily] infixl:74 " \\\\ " => Finset.diffs
+ -- This notation is meant to have higher precedence than `\` and `⊓`, but still within the
+ -- realm of other binary notation
+
+open FinsetFamily
+
+variable {s t} {a b c : α}
+
+@[simp] lemma mem_diffs : c ∈ s \\ t ↔ ∃ a ∈ s, ∃ b ∈ t, a \ b = c := by simp [(· \\ ·)]
+
+variable (s t)
+
+@[simp, norm_cast] lemma coe_diffs : (↑(s \\ t) : Set α) = Set.image2 (· \ ·) s t :=
+ coe_image₂ _ _ _
+
+lemma card_diffs_le : (s \\ t).card ≤ s.card * t.card := card_image₂_le _ _ _
+
+lemma card_diffs_iff :
+ (s \\ t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun x ↦ x.1 \ x.2 :=
+ card_image₂_iff
+
+variable {s s₁ s₂ t t₁ t₂ u}
+
+lemma sdiff_mem_diffs : a ∈ s → b ∈ t → a \ b ∈ s \\ t := mem_image₂_of_mem
+
+lemma diffs_subset : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ \\ t₁ ⊆ s₂ \\ t₂ := image₂_subset
+lemma diffs_subset_left : t₁ ⊆ t₂ → s \\ t₁ ⊆ s \\ t₂ := image₂_subset_left
+lemma diffs_subset_right : s₁ ⊆ s₂ → s₁ \\ t ⊆ s₂ \\ t := image₂_subset_right
+
+lemma image_subset_diffs_left : b ∈ t → s.image (· \ b) ⊆ s \\ t := image_subset_image₂_left
+
+lemma image_subset_diffs_right : a ∈ s → t.image (a \ ·) ⊆ s \\ t := image_subset_image₂_right
+
+lemma forall_mem_diffs {p : α → Prop} : (∀ c ∈ s \\ t, p c) ↔ ∀ a ∈ s, ∀ b ∈ t, p (a \ b) :=
+ forall_image₂_iff
+
+@[simp] lemma diffs_subset_iff : s \\ t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a \ b ∈ u := image₂_subset_iff
+
+@[simp] lemma diffs_nonempty : (s \\ t).Nonempty ↔ s.Nonempty ∧ t.Nonempty := image₂_nonempty_iff
+
+protected lemma Nonempty.diffs : s.Nonempty → t.Nonempty → (s \\ t).Nonempty := Nonempty.image₂
+
+lemma Nonempty.of_diffs_left : (s \\ t).Nonempty → s.Nonempty := Nonempty.of_image₂_left
+lemma Nonempty.of_diffs_right : (s \\ t).Nonempty → t.Nonempty := Nonempty.of_image₂_right
+
+@[simp] lemma empty_diffs : ∅ \\ t = ∅ := image₂_empty_left
+@[simp] lemma diffs_empty : s \\ ∅ = ∅ := image₂_empty_right
+@[simp] lemma diffs_eq_empty : s \\ t = ∅ ↔ s = ∅ ∨ t = ∅ := image₂_eq_empty_iff
+
+@[simp] lemma singleton_diffs : {a} \\ t = t.image (a \ ·) := image₂_singleton_left
+@[simp] lemma diffs_singleton : s \\ {b} = s.image (· \ b) := image₂_singleton_right
+lemma singleton_diffs_singleton : ({a} \\ {b} : Finset α) = {a \ b} := image₂_singleton
+
+lemma diffs_union_left : (s₁ ∪ s₂) \\ t = s₁ \\ t ∪ s₂ \\ t := image₂_union_left
+lemma diffs_union_right : s \\ (t₁ ∪ t₂) = s \\ t₁ ∪ s \\ t₂ := image₂_union_right
+
+lemma diffs_inter_subset_left : (s₁ ∩ s₂) \\ t ⊆ s₁ \\ t ∩ s₂ \\ t := image₂_inter_subset_left
+lemma diffs_inter_subset_right : s \\ (t₁ ∩ t₂) ⊆ s \\ t₁ ∩ s \\ t₂ := image₂_inter_subset_right
+
+lemma subset_diffs {s t : Set α} :
+ ↑u ⊆ Set.image2 (· \ ·) s t → ∃ s' t' : Finset α, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' \\ t' :=
+ subset_image₂
+
+variable (s t u)
+
+lemma biUnion_image_sdiff_left : s.biUnion (fun a ↦ t.image (a \ ·)) = s \\ t := biUnion_image_left
+lemma biUnion_image_sdiff_right : t.biUnion (fun b ↦ s.image (· \ b)) = s \\ t :=
+ biUnion_image_right
+
+lemma image_sdiff_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· \ ·)) = s \\ t :=
+ image_uncurry_product _ _ _
+
+lemma diffs_right_comm : s \\ t \\ u = s \\ u \\ t := image₂_right_comm sdiff_right_comm
+
+end Diffs
+
+section Compls
+variable [BooleanAlgebra α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+
+/-- `sᶜˢ` is the finset of elements of the form `aᶜ` where `a ∈ s`. -/
+def compls : Finset α → Finset α := map ⟨compl, compl_injective⟩
+
+@[inherit_doc]
+scoped[FinsetFamily] postfix:max "ᶜˢ" => Finset.compls
+
+open FinsetFamily
+
+variable {s t} {a b c : α}
+
+@[simp] lemma mem_compls : a ∈ sᶜˢ ↔ aᶜ ∈ s := by
+ rw [Iff.comm, ←mem_map' ⟨compl, compl_injective⟩, Embedding.coeFn_mk, compl_compl, compls]
+
+variable (s t)
+
+@[simp] lemma image_compl : s.image compl = sᶜˢ := by simp [compls, map_eq_image]
+
+@[simp, norm_cast] lemma coe_compls : (↑sᶜˢ : Set α) = compl '' ↑s := coe_map _ _
+
+@[simp] lemma card_compls : sᶜˢ.card = s.card := card_map _
+
+variable {s s₁ s₂ t t₁ t₂ u}
+
+lemma compl_mem_compls : a ∈ s → aᶜ ∈ sᶜˢ := mem_map_of_mem _
+@[simp] lemma compls_subset_compls : s₁ᶜˢ ⊆ s₂ᶜˢ ↔ s₁ ⊆ s₂ := map_subset_map
+lemma forall_mem_compls {p : α → Prop} : (∀ a ∈ sᶜˢ, p a) ↔ ∀ a ∈ s, p aᶜ := forall_mem_map
+lemma exists_compls_iff {p : α → Prop} : (∃ a ∈ sᶜˢ, p a) ↔ ∃ a ∈ s, p aᶜ := by aesop
+
+@[simp] lemma compls_compls (s : Finset α) : sᶜˢᶜˢ = s := by ext; simp
+
+lemma compls_subset_iff : sᶜˢ ⊆ t ↔ s ⊆ tᶜˢ := by rw [←compls_subset_compls, compls_compls]
+
+@[simp] lemma compls_nonempty : sᶜˢ.Nonempty ↔ s.Nonempty := map_nonempty
+
+protected alias ⟨Nonempty.of_compls, Nonempty.compls⟩ := compls_nonempty
+
+@[simp] lemma compls_empty : (∅ : Finset α)ᶜˢ = ∅ := map_empty _
+@[simp] lemma compls_eq_empty : sᶜˢ = ∅ ↔ s = ∅ := map_eq_empty
+@[simp] lemma compls_singleton (a : α) : {a}ᶜˢ = {aᶜ} := map_singleton _ _
+@[simp] lemma compls_univ [Fintype α] : (univ : Finset α)ᶜˢ = univ := by ext; simp
+@[simp] lemma compls_union (s t : Finset α) : (s ∪ t)ᶜˢ = sᶜˢ ∪ tᶜˢ := map_union _ _
+@[simp] lemma compls_inter (s t : Finset α) : (s ∩ t)ᶜˢ = sᶜˢ ∩ tᶜˢ := map_inter _ _
+
+@[simp] lemma compls_infs (s t : Finset α) : (s ⊼ t)ᶜˢ = sᶜˢ ⊻ tᶜˢ := by
+ simp_rw [←image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_inf
+
+@[simp] lemma compls_sups (s t : Finset α) : (s ⊻ t)ᶜˢ = sᶜˢ ⊼ tᶜˢ := by
+ simp_rw [←image_compl]; exact image_image₂_distrib λ _ _ ↦ compl_sup
+
+@[simp] lemma infs_compls_eq_diffs (s t : Finset α) : s ⊼ tᶜˢ = s \\ t := by
+ ext; simp [sdiff_eq]; aesop
+
+@[simp] lemma compls_infs_eq_diffs (s t : Finset α) : sᶜˢ ⊼ t = t \\ s := by
+ rw [infs_comm, infs_compls_eq_diffs]
+
+@[simp] lemma diffs_compls_eq_infs (s t : Finset α) : s \\ tᶜˢ = s ⊼ t := by
+ rw [←infs_compls_eq_diffs, compls_compls]
+
+variable [Fintype α] {𝒜 : Finset (Finset α)} {n : ℕ}
+
+protected lemma _root_.Set.Sized.compls (h𝒜 : (𝒜 : Set (Finset α)).Sized n) :
+ (𝒜ᶜˢ : Set (Finset α)).Sized (Fintype.card α - n) :=
+ Finset.forall_mem_compls.2 $ λ s hs ↦ by rw [Finset.card_compl, h𝒜 hs]
+
+lemma sized_compls (hn : n ≤ Fintype.card α) :
+ (𝒜ᶜˢ : Set (Finset α)).Sized n ↔ (𝒜 : Set (Finset α)).Sized (Fintype.card α - n) where
+ mp h𝒜 := by simpa using h𝒜.compls
+ mpr h𝒜 := by simpa only [tsub_tsub_cancel_of_le hn] using h𝒜.compls
+end Compls
end Finset
Set
/Finset
lemmas match lattice lemma names (#7378)
Rename union_eq_left_iff_subset
to union_eq_left
to match sup_eq_left
. Similarly for the right
and inter
versions.
@@ -422,7 +422,7 @@ open FinsetFamily
ext u
simp only [mem_sups, mem_powerset, le_eq_subset, sup_eq_union]
refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
- · rwa [←inter_distrib_right, inter_eq_right_iff_subset]
+ · rwa [←inter_distrib_right, inter_eq_right]
· rintro ⟨v, hv, w, hw, rfl⟩
exact union_subset_union hv hw
@@ -430,7 +430,7 @@ open FinsetFamily
ext u
simp only [mem_infs, mem_powerset, le_eq_subset, inf_eq_inter]
refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
- · rwa [←inter_inter_distrib_right, inter_eq_right_iff_subset]
+ · rwa [←inter_inter_distrib_right, inter_eq_right]
· rintro ⟨v, hv, w, hw, rfl⟩
exact inter_subset_inter hv hw
@@ -32,18 +32,16 @@ We define the following notation in locale `FinsetFamily`:
[B. Bollobás, *Combinatorics*][bollobas1986]
-/
-
open Function
open SetFamily
-variable {α : Type*} [DecidableEq α]
+variable {F α β : Type*} [DecidableEq α] [DecidableEq β]
namespace Finset
section Sups
-
-variable [SemilatticeSup α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+variable [SemilatticeSup α] [SemilatticeSup β] [SupHomClass F α β] (s s₁ s₂ t t₁ t₂ u v : Finset α)
/-- `s ⊻ t` is the finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t`. -/
protected def hasSups : HasSups (Finset α) :=
@@ -178,6 +176,21 @@ theorem subset_sups {s t : Set α} :
subset_image₂
#align finset.subset_sups Finset.subset_sups
+lemma image_sups (f : F) (s t : Finset α) : image f (s ⊻ t) = image f s ⊻ image f t :=
+ image_image₂_distrib $ map_sup f
+
+lemma map_sups (f : F) (hf) (s t : Finset α) :
+ map ⟨f, hf⟩ (s ⊻ t) = map ⟨f, hf⟩ s ⊻ map ⟨f, hf⟩ t := by
+ simpa [map_eq_image] using image_sups f s t
+
+lemma subset_sups_self : s ⊆ s ⊻ s := fun _a ha ↦ mem_sups.2 ⟨_, ha, _, ha, sup_idem⟩
+lemma sups_subset_self : s ⊻ s ⊆ s ↔ SupClosed (s : Set α) := sups_subset_iff
+@[simp] lemma sups_eq_self : s ⊻ s = s ↔ SupClosed (s : Set α) := by simp [←coe_inj]
+
+lemma filter_sups_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
+ (s ⊻ t).filter (· ≤ a) = s.filter (· ≤ a) ⊻ t.filter (· ≤ a) := by
+ simp only [←coe_inj, coe_filter, coe_sups, ←mem_coe, Set.sep_sups_le]
+
variable (s t u)
theorem biUnion_image_sup_left : (s.biUnion fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
@@ -216,8 +229,7 @@ theorem sups_sups_sups_comm : s ⊻ t ⊻ (u ⊻ v) = s ⊻ u ⊻ (t ⊻ v) :=
end Sups
section Infs
-
-variable [SemilatticeInf α] (s s₁ s₂ t t₁ t₂ u v : Finset α)
+variable [SemilatticeInf α] [SemilatticeInf β] [InfHomClass F α β] (s s₁ s₂ t t₁ t₂ u v : Finset α)
/-- `s ⊼ t` is the finset of elements of the form `a ⊓ b` where `a ∈ s`, `b ∈ t`. -/
protected def hasInfs : HasInfs (Finset α) :=
@@ -352,6 +364,21 @@ theorem subset_infs {s t : Set α} :
subset_image₂
#align finset.subset_infs Finset.subset_infs
+lemma image_infs (f : F) (s t : Finset α) : image f (s ⊼ t) = image f s ⊼ image f t :=
+ image_image₂_distrib $ map_inf f
+
+lemma map_infs (f : F) (hf) (s t : Finset α) :
+ map ⟨f, hf⟩ (s ⊼ t) = map ⟨f, hf⟩ s ⊼ map ⟨f, hf⟩ t := by
+ simpa [map_eq_image] using image_infs f s t
+
+lemma subset_infs_self : s ⊆ s ⊼ s := fun _a ha ↦ mem_infs.2 ⟨_, ha, _, ha, inf_idem⟩
+lemma infs_self_subset : s ⊼ s ⊆ s ↔ InfClosed (s : Set α) := infs_subset_iff
+@[simp] lemma infs_self : s ⊼ s = s ↔ InfClosed (s : Set α) := by simp [←coe_inj]
+
+lemma filter_infs_le [@DecidableRel α (· ≤ ·)] (s t : Finset α) (a : α) :
+ (s ⊼ t).filter (a ≤ ·) = s.filter (a ≤ ·) ⊼ t.filter (a ≤ ·) := by
+ simp only [←coe_inj, coe_filter, coe_infs, ←mem_coe, Set.sep_infs_le]
+
variable (s t u)
theorem biUnion_image_inf_left : (s.biUnion fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
@@ -391,6 +418,22 @@ end Infs
open FinsetFamily
+@[simp] lemma powerset_union (s t : Finset α) : (s ∪ t).powerset = s.powerset ⊻ t.powerset := by
+ ext u
+ simp only [mem_sups, mem_powerset, le_eq_subset, sup_eq_union]
+ refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
+ · rwa [←inter_distrib_right, inter_eq_right_iff_subset]
+ · rintro ⟨v, hv, w, hw, rfl⟩
+ exact union_subset_union hv hw
+
+@[simp] lemma powerset_inter (s t : Finset α) : (s ∩ t).powerset = s.powerset ⊼ t.powerset := by
+ ext u
+ simp only [mem_infs, mem_powerset, le_eq_subset, inf_eq_inter]
+ refine ⟨fun h ↦ ⟨_, inter_subset_left _ u, _, inter_subset_left _ u, ?_⟩, ?_⟩
+ · rwa [←inter_inter_distrib_right, inter_eq_right_iff_subset]
+ · rintro ⟨v, hv, w, hw, rfl⟩
+ exact inter_subset_inter hv hw
+
section DistribLattice
variable [DistribLattice α] (s t u : Finset α)
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -37,7 +37,7 @@ open Function
open SetFamily
-variable {α : Type _} [DecidableEq α]
+variable {α : Type*} [DecidableEq α]
namespace Finset
@@ -2,15 +2,12 @@
Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-
-! This file was ported from Lean 3 source module data.finset.sups
-! leanprover-community/mathlib commit 20715f4ac6819ef2453d9e5106ecd086a5dc2a5e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Finset.NAry
import Mathlib.Data.Set.Sups
+#align_import data.finset.sups from "leanprover-community/mathlib"@"20715f4ac6819ef2453d9e5106ecd086a5dc2a5e"
+
/-!
# Set family operations
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>
@@ -192,7 +192,7 @@ theorem biUnion_image_sup_right : (t.biUnion fun b => s.image fun a => a ⊔ b)
#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_right
-- Porting note: simpNF linter doesn't like @[simp]
-theorem image_sup_product (s t : Finset α) : (s ×ᶠ t).image (uncurry (· ⊔ ·)) = s ⊻ t :=
+theorem image_sup_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊔ ·)) = s ⊻ t :=
image_uncurry_product _ _ _
#align finset.image_sup_product Finset.image_sup_product
@@ -366,7 +366,7 @@ theorem biUnion_image_inf_right : (t.biUnion fun b => s.image fun a => a ⊓ b)
#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_right
-- Porting note: simpNF linter doesn't like @[simp]
-theorem image_inf_product (s t : Finset α) : (s ×ᶠ t).image (uncurry (· ⊓ ·)) = s ⊼ t :=
+theorem image_inf_product (s t : Finset α) : (s ×ˢ t).image (uncurry (· ⊓ ·)) = s ⊼ t :=
image_uncurry_product _ _ _
#align finset.image_inf_product Finset.image_inf_product
@@ -423,7 +423,7 @@ variable [SemilatticeSup α] [OrderBot α] [@DecidableRel α Disjoint] (s s₁ s
/-- The finset of elements of the form `a ⊔ b` where `a ∈ s`, `b ∈ t` and `a` and `b` are disjoint.
-/
def disjSups : Finset α :=
- ((s ×ᶠ t).filter fun ab : α × α => Disjoint ab.1 ab.2).image fun ab => ab.1 ⊔ ab.2
+ ((s ×ˢ t).filter fun ab : α × α => Disjoint ab.1 ab.2).image fun ab => ab.1 ⊔ ab.2
#align finset.disj_sups Finset.disjSups
@[inherit_doc]
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>
@@ -183,13 +183,13 @@ theorem subset_sups {s t : Set α} :
variable (s t u)
-theorem bunionᵢ_image_sup_left : (s.bunionᵢ fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
- bunionᵢ_image_left
-#align finset.bUnion_image_sup_left Finset.bunionᵢ_image_sup_left
+theorem biUnion_image_sup_left : (s.biUnion fun a => t.image <| (· ⊔ ·) a) = s ⊻ t :=
+ biUnion_image_left
+#align finset.bUnion_image_sup_left Finset.biUnion_image_sup_left
-theorem bunionᵢ_image_sup_right : (t.bunionᵢ fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
- bunionᵢ_image_right
-#align finset.bUnion_image_sup_right Finset.bunionᵢ_image_sup_right
+theorem biUnion_image_sup_right : (t.biUnion fun b => s.image fun a => a ⊔ b) = s ⊻ t :=
+ biUnion_image_right
+#align finset.bUnion_image_sup_right Finset.biUnion_image_sup_right
-- Porting note: simpNF linter doesn't like @[simp]
theorem image_sup_product (s t : Finset α) : (s ×ᶠ t).image (uncurry (· ⊔ ·)) = s ⊻ t :=
@@ -357,13 +357,13 @@ theorem subset_infs {s t : Set α} :
variable (s t u)
-theorem bunionᵢ_image_inf_left : (s.bunionᵢ fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
- bunionᵢ_image_left
-#align finset.bUnion_image_inf_left Finset.bunionᵢ_image_inf_left
+theorem biUnion_image_inf_left : (s.biUnion fun a => t.image <| (· ⊓ ·) a) = s ⊼ t :=
+ biUnion_image_left
+#align finset.bUnion_image_inf_left Finset.biUnion_image_inf_left
-theorem bunionᵢ_image_inf_right : (t.bunionᵢ fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
- bunionᵢ_image_right
-#align finset.bUnion_image_inf_right Finset.bunionᵢ_image_inf_right
+theorem biUnion_image_inf_right : (t.biUnion fun b => s.image fun a => a ⊓ b) = s ⊼ t :=
+ biUnion_image_right
+#align finset.bUnion_image_inf_right Finset.biUnion_image_inf_right
-- Porting note: simpNF linter doesn't like @[simp]
theorem image_inf_product (s t : Finset α) : (s ×ᶠ t).image (uncurry (· ⊓ ·)) = s ⊼ t :=
The unported dependencies are