data.set.finite
⟷
Mathlib.Data.Set.Finite
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.
(last sync)
attach
and filter
lemmas (#18087)
Left commutativity and cardinality of list.filter
/multiset.filter
/finset.filter
. Interaction of count
/countp
and attach
.
@@ -927,8 +927,7 @@ eq.trans (by congr) empty_card
theorem card_fintype_insert_of_not_mem {a : α} (s : set α) [fintype s] (h : a ∉ s) :
@fintype.card _ (fintype_insert_of_not_mem s h) = fintype.card s + 1 :=
-by rw [fintype_insert_of_not_mem, fintype.card_of_finset];
- simp [finset.card, to_finset]; refl
+by simp [fintype_insert_of_not_mem, fintype.card_of_finset]
@[simp] theorem card_insert {a : α} (s : set α)
[fintype s] (h : a ∉ s) {d : fintype.{u} (insert a s : set α)} :
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Generalise lemmas from semilattices to codirected orders. Move topology-less lemmas from topology.algebra.order.liminf_limsup
to order.liminf_limsup
. Also turn arguments to bdd_above_insert
and friends implicit.
@@ -1280,7 +1280,7 @@ end
section
-variables [semilattice_sup α] [nonempty α] {s : set α}
+variables [preorder α] [is_directed α (≤)] [nonempty α] {s : set α}
/--A finite set is bounded above.-/
protected lemma finite.bdd_above (hs : s.finite) : bdd_above s :=
@@ -1288,7 +1288,7 @@ finite.induction_on hs bdd_above_empty $ λ a s _ _ h, h.insert a
/--A finite union of sets which are all bounded above is still bounded above.-/
lemma finite.bdd_above_bUnion {I : set β} {S : β → set α} (H : I.finite) :
- (bdd_above (⋃i∈I, S i)) ↔ (∀i ∈ I, bdd_above (S i)) :=
+ bdd_above (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, bdd_above (S i) :=
finite.induction_on H
(by simp only [bUnion_empty, bdd_above_empty, ball_empty_iff])
(λ a s ha _ hs, by simp only [bUnion_insert, ball_insert_iff, bdd_above_union, hs])
@@ -1299,22 +1299,17 @@ end
section
-variables [semilattice_inf α] [nonempty α] {s : set α}
+variables [preorder α] [is_directed α (≥)] [nonempty α] {s : set α}
/--A finite set is bounded below.-/
-protected lemma finite.bdd_below (hs : s.finite) : bdd_below s := @finite.bdd_above αᵒᵈ _ _ _ hs
+protected lemma finite.bdd_below (hs : s.finite) : bdd_below s := @finite.bdd_above αᵒᵈ _ _ _ _ hs
/--A finite union of sets which are all bounded below is still bounded below.-/
lemma finite.bdd_below_bUnion {I : set β} {S : β → set α} (H : I.finite) :
bdd_below (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, bdd_below (S i) :=
-@finite.bdd_above_bUnion αᵒᵈ _ _ _ _ _ H
+@finite.bdd_above_bUnion αᵒᵈ _ _ _ _ _ _ H
-lemma infinite_of_not_bdd_below : ¬ bdd_below s → s.infinite :=
-begin
- contrapose!,
- rw not_infinite,
- apply finite.bdd_below,
-end
+lemma infinite_of_not_bdd_below : ¬ bdd_below s → s.infinite := mt finite.bdd_below
end
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Redefine nat.nth
in terms of already available definitions, review API, generalize some lemmas.
Also fix some typos in data/set/intervals/monotone
.
@@ -98,6 +98,14 @@ h.nonempty_fintype.some
protected noncomputable def finite.to_finset {s : set α} (h : s.finite) : finset α :=
@set.to_finset _ _ h.fintype
+theorem finite.to_finset_eq_to_finset {s : set α} [fintype s] (h : s.finite) :
+ h.to_finset = s.to_finset :=
+by { rw [finite.to_finset], congr }
+
+@[simp]
+theorem to_finite_to_finset (s : set α) [fintype s] : s.to_finite.to_finset = s.to_finset :=
+s.to_finite.to_finset_eq_to_finset
+
theorem finite.exists_finset {s : set α} (h : s.finite) :
∃ s' : finset α, ∀ a : α, a ∈ s' ↔ a ∈ s :=
by { casesI h, exact ⟨s.to_finset, λ _, mem_to_finset⟩ }
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
set.finite.bUnion
(#19098)
Add set.finite.Union
and equiv.set_finite_iff
.
From the sphere eversion project.
@@ -393,6 +393,10 @@ end fintype_instances
end set
+lemma equiv.set_finite_iff {s : set α} {t : set β} (hst : s ≃ t) :
+ s.finite ↔ t.finite :=
+by simp_rw [← set.finite_coe_iff, hst.finite_iff]
+
/-! ### Finset -/
namespace finset
@@ -594,6 +598,21 @@ theorem finite.sInter {α : Type*} {s : set (set α)} {t : set α} (ht : t ∈ s
(hf : t.finite) : (⋂₀ s).finite :=
hf.subset (sInter_subset_of_mem ht)
+/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
+union `⋃ i, s i` is a finite set. -/
+lemma finite.Union {ι : Type*} {s : ι → set α} {t : set ι} (ht : t.finite)
+ (hs : ∀ i ∈ t, (s i).finite) (he : ∀ i ∉ t, s i = ∅) :
+ (⋃ i, s i).finite :=
+begin
+ suffices : (⋃ i, s i) ⊆ (⋃ i ∈ t, s i),
+ { exact (ht.bUnion hs).subset this, },
+ refine Union_subset (λ i x hx, _),
+ by_cases hi : i ∈ t,
+ { exact mem_bUnion hi hx },
+ { rw [he i hi, mem_empty_iff_false] at hx,
+ contradiction, },
+end
+
theorem finite.bind {α β} {s : set α} {f : α → set β} (h : s.finite) (hf : ∀ a ∈ s, (f a).finite) :
(s >>= f).finite :=
h.bUnion hf
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Prove the following lemmas (and their dual)
set.infinite_of_forall_exists_lt
: (∀ a, ∃ b ∈ s, a < b) → s.infinite
in a nonempty preorderset.infinite_iff_exists_lt
: (∀ a, ∃ b ∈ s, a < b) ↔ s.infinite
in a locally finite order with a bottom elementCo-authored-by: Yaël Dillies <yael.dillies@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -1054,9 +1054,6 @@ theorem infinite_of_injective_forall_mem [infinite α] {s : set β} {f : α →
(hi : injective f) (hf : ∀ x : α, f x ∈ s) : s.infinite :=
by { rw ←range_subset_iff at hf, exact (infinite_range_of_injective hi).mono hf }
-lemma infinite.exists_nat_lt {s : set ℕ} (hs : s.infinite) (n : ℕ) : ∃ m ∈ s, n < m :=
-let ⟨m, hm⟩ := (hs.diff $ set.finite_le_nat n).nonempty in ⟨m, by simpa using hm⟩
-
lemma infinite.exists_not_mem_finset {s : set α} (hs : s.infinite) (f : finset α) :
∃ a ∈ s, a ∉ f :=
let ⟨a, has, haf⟩ := (hs.diff (to_finite f)).nonempty
@@ -1076,6 +1073,23 @@ end
/-! ### Order properties -/
+section preorder
+variables [preorder α] [nonempty α] {s : set α}
+
+lemma infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.infinite :=
+begin
+ inhabit α,
+ set f : ℕ → α := λ n, nat.rec_on n (h default).some (λ n a, (h a).some),
+ have hf : ∀ n, f n ∈ s := by rintro (_ | _); exact (h _).some_spec.some,
+ refine infinite_of_injective_forall_mem (strict_mono_nat_of_lt_succ $ λ n, _).injective hf,
+ exact (h _).some_spec.some_spec,
+end
+
+lemma infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.infinite :=
+@infinite_of_forall_exists_gt αᵒᵈ _ _ _ h
+
+end preorder
+
lemma finite_is_top (α : Type*) [partial_order α] : {x : α | is_top x}.finite :=
(subsingleton_is_top α).finite
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
s ×ˢ t
is finite (#18674)
The one non-trivial result is infinite_image2
, because it requires only injectivity of the f a
and λ a, f a b
rather than of the uncurrying of f
.
@@ -117,8 +117,13 @@ protected def infinite (s : set α) : Prop := ¬ s.finite
@[simp] lemma not_infinite {s : set α} : ¬ s.infinite ↔ s.finite := not_not
+alias not_infinite ↔ _ finite.not_infinite
+
+attribute [simp] finite.not_infinite
+
/-- See also `finite_or_infinite`, `fintype_or_infinite`. -/
protected lemma finite_or_infinite (s : set α) : s.finite ∨ s.infinite := em _
+protected lemma infinite_or_finite (s : set α) : s.infinite ∨ s.finite := em' _
/-! ### Basic properties of `set.finite.to_finset` -/
@@ -595,6 +600,9 @@ h.bUnion hf
@[simp] theorem finite_empty : (∅ : set α).finite := to_finite _
+protected lemma infinite.nonempty {s : set α} (h : s.infinite) : s.nonempty :=
+nonempty_iff_ne_empty.2 $ by { rintro rfl, exact h finite_empty }
+
@[simp] theorem finite_singleton (a : α) : ({a} : set α).finite := to_finite _
theorem finite_pure (a : α) : (pure a : set α).finite := to_finite _
@@ -639,17 +647,49 @@ lemma finite_lt_nat (n : ℕ) : set.finite {i | i < n} := to_finite _
lemma finite_le_nat (n : ℕ) : set.finite {i | i ≤ n} := to_finite _
-lemma finite.prod {s : set α} {t : set β} (hs : s.finite) (ht : t.finite) :
- (s ×ˢ t : set (α × β)).finite :=
+section prod
+variables {s : set α} {t : set β}
+
+protected lemma finite.prod (hs : s.finite) (ht : t.finite) : (s ×ˢ t : set (α × β)).finite :=
by { casesI hs, casesI ht, apply to_finite }
-lemma finite.off_diag {s : set α} (hs : s.finite) : s.off_diag.finite :=
+lemma finite.of_prod_left (h : (s ×ˢ t : set (α × β)).finite) : t.nonempty → s.finite :=
+λ ⟨b, hb⟩, (h.image prod.fst).subset $ λ a ha, ⟨(a, b), ⟨ha, hb⟩, rfl⟩
+
+lemma finite.of_prod_right (h : (s ×ˢ t : set (α × β)).finite) : s.nonempty → t.finite :=
+λ ⟨a, ha⟩, (h.image prod.snd).subset $ λ b hb, ⟨(a, b), ⟨ha, hb⟩, rfl⟩
+
+protected lemma infinite.prod_left (hs : s.infinite) (ht : t.nonempty) : (s ×ˢ t).infinite :=
+λ h, hs $ h.of_prod_left ht
+
+protected lemma infinite.prod_right (ht : t.infinite) (hs : s.nonempty) : (s ×ˢ t).infinite :=
+λ h, ht $ h.of_prod_right hs
+
+protected lemma infinite_prod :
+ (s ×ˢ t).infinite ↔ s.infinite ∧ t.nonempty ∨ t.infinite ∧ s.nonempty :=
+begin
+ refine ⟨λ h, _, _⟩,
+ { simp_rw [set.infinite, and_comm (¬ _), ←not_imp],
+ by_contra',
+ exact h ((this.1 h.nonempty.snd).prod $ this.2 h.nonempty.fst) },
+ { rintro (h | h),
+ { exact h.1.prod_left h.2 },
+ { exact h.1.prod_right h.2 } }
+end
+
+lemma finite_prod : (s ×ˢ t).finite ↔ (s.finite ∨ t = ∅) ∧ (t.finite ∨ s = ∅) :=
+by simp only [←not_infinite, set.infinite_prod, not_or_distrib, not_and_distrib,
+ not_nonempty_iff_eq_empty]
+
+protected lemma finite.off_diag (hs : s.finite) : s.off_diag.finite :=
by { classical, casesI hs, apply set.to_finite }
-lemma finite.image2 (f : α → β → γ) {s : set α} {t : set β} (hs : s.finite) (ht : t.finite) :
+protected lemma finite.image2 (f : α → β → γ) (hs : s.finite) (ht : t.finite) :
(image2 f s t).finite :=
by { casesI hs, casesI ht, apply to_finite }
+end prod
+
theorem finite.seq {f : set (α → β)} {s : set α} (hf : f.finite) (hs : s.finite) :
(f.seq s).finite :=
by { classical, casesI hf, casesI hs, apply to_finite }
@@ -944,9 +984,6 @@ lemma infinite.exists_subset_card_eq {s : set α} (hs : s.infinite) (n : ℕ) :
∃ t : finset α, ↑t ⊆ s ∧ t.card = n :=
⟨((finset.range n).map (hs.nat_embedding _)).map (embedding.subtype _), by simp⟩
-lemma infinite.nonempty {s : set α} (h : s.infinite) : s.nonempty :=
-let a := infinite.nat_embedding s h 37 in ⟨a.1, a.2⟩
-
lemma infinite_of_finite_compl [infinite α] {s : set α} (hs : sᶜ.finite) : s.infinite :=
λ h, set.infinite_univ (by simpa using hs.union h)
@@ -962,14 +999,41 @@ lemma infinite.diff {s t : set α} (hs : s.infinite) (ht : t.finite) : (s \ t).i
@[simp] lemma infinite_union {s t : set α} : (s ∪ t).infinite ↔ s.infinite ∨ t.infinite :=
by simp only [set.infinite, finite_union, not_and_distrib]
-theorem infinite_of_infinite_image (f : α → β) {s : set α} (hs : (f '' s).infinite) :
- s.infinite :=
+theorem infinite.of_image (f : α → β) {s : set α} (hs : (f '' s).infinite) : s.infinite :=
mt (finite.image f) hs
theorem infinite_image_iff {s : set α} {f : α → β} (hi : inj_on f s) :
(f '' s).infinite ↔ s.infinite :=
not_congr $ finite_image_iff hi
+alias infinite_image_iff ↔ _ infinite.image
+
+attribute [protected] infinite.image
+
+section image2
+variables {f : α → β → γ} {s : set α} {t : set β} {a : α} {b : β}
+
+protected lemma infinite.image2_left (hs : s.infinite) (hb : b ∈ t) (hf : inj_on (λ a, f a b) s) :
+ (image2 f s t).infinite :=
+(hs.image hf).mono $ image_subset_image2_left hb
+
+protected lemma infinite.image2_right (ht : t.infinite) (ha : a ∈ s) (hf : inj_on (f a) t) :
+ (image2 f s t).infinite :=
+(ht.image hf).mono $ image_subset_image2_right ha
+
+theorem infinite_image2 (hfs : ∀ b ∈ t, inj_on (λ a, f a b) s) (hft : ∀ a ∈ s, inj_on (f a) t) :
+ (image2 f s t).infinite ↔ s.infinite ∧ t.nonempty ∨ t.infinite ∧ s.nonempty :=
+begin
+ refine ⟨λ h, set.infinite_prod.1 _, _⟩,
+ { rw ←image_uncurry_prod at h,
+ exact h.of_image _ },
+ { rintro (⟨hs, b, hb⟩ | ⟨ht, a, ha⟩),
+ { exact hs.image2_left hb (hfs _ hb) },
+ { exact ht.image2_right ha (hft _ ha) } }
+end
+
+end image2
+
theorem infinite_of_inj_on_maps_to {s : set α} {t : set β} {f : α → β}
(hi : inj_on f s) (hm : maps_to f s t) (hs : s.infinite) : t.infinite :=
((infinite_image_iff hi).2 hs).mono (maps_to'.mp hm)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
s ∩ t * s ∪ t ⊆ s * t
(#17961)
and distributivity of set.to_finset
/set.finite.to_finset
over algebraic operations.
@@ -196,7 +196,6 @@ by { ext, simp }
@[simp] protected lemma to_finset_empty (h : (∅ : set α).finite) : h.to_finset = ∅ :=
by { ext, simp }
--- Note: Not `simp` because `set.finite.to_finset_set_of` already proves it
@[simp] protected lemma to_finset_univ [fintype α] (h : (set.univ : set α).finite) :
h.to_finset = finset.univ :=
by { ext, simp }
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
eq_or_eq_or_eq_of_forall_not_lt_lt
, finite.of_forall_not_lt_lt
, set.finite_of_forall_not_lt_lt
(replacing set.finite_of_forall_between_eq_endpoints
), and set.finite_of_forall_not_lt_lt'
.data.finset.basic
instead of data.finset.sort
in data.set.finite
.@@ -3,7 +3,7 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
-/
-import data.finset.sort
+import data.finset.basic
import data.set.functor
import data.finite.basic
@@ -1227,27 +1227,27 @@ s.finite_to_set.bdd_below
end finset
-/--
-If a set `s` does not contain any elements between any pair of elements `x, z ∈ s` with `x ≤ z`
-(i.e if given `x, y, z ∈ s` such that `x ≤ y ≤ z`, then `y` is either `x` or `z`), then `s` is
-finite.
--/
-lemma set.finite_of_forall_between_eq_endpoints {α : Type*} [linear_order α] (s : set α)
- (h : ∀ (x ∈ s) (y ∈ s) (z ∈ s), x ≤ y → y ≤ z → x = y ∨ y = z) :
- set.finite s :=
+variables [linear_order α]
+
+/-- If a linear order does not contain any triple of elements `x < y < z`, then this type
+is finite. -/
+lemma finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z → false) :
+ finite α :=
begin
- by_contra hinf,
- change s.infinite at hinf,
- rcases hinf.exists_subset_card_eq 3 with ⟨t, hts, ht⟩,
- let f := t.order_iso_of_fin ht,
- let x := f 0,
- let y := f 1,
- let z := f 2,
- have := h x (hts x.2) y (hts y.2) z (hts z.2)
- (f.monotone $ by dec_trivial) (f.monotone $ by dec_trivial),
- have key₁ : (0 : fin 3) ≠ 1 := by dec_trivial,
- have key₂ : (1 : fin 3) ≠ 2 := by dec_trivial,
- cases this,
- { dsimp only [x, y] at this, exact key₁ (f.injective $ subtype.coe_injective this) },
- { dsimp only [y, z] at this, exact key₂ (f.injective $ subtype.coe_injective this) }
+ nontriviality α,
+ rcases exists_pair_ne α with ⟨x, y, hne⟩,
+ refine @finite.of_fintype α ⟨{x, y}, λ z , _⟩,
+ simpa [hne] using eq_or_eq_or_eq_of_forall_not_lt_lt h z x y
end
+
+/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
+lemma set.finite_of_forall_not_lt_lt {s : set α} (h : ∀ (x y z ∈ s), x < y → y < z → false) :
+ set.finite s :=
+@set.to_finite _ s $ finite.of_forall_not_lt_lt $ by simpa only [set_coe.forall'] using h
+
+lemma set.finite_diff_Union_Ioo (s : set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).finite :=
+set.finite_of_forall_not_lt_lt $ λ x hx y hy z hz hxy hyz, hy.2 $ mem_Union₂_of_mem hx.1 $
+ mem_Union₂_of_mem hz.1 ⟨hxy, hyz⟩
+
+lemma set.finite_diff_Union_Ioo' (s : set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).finite :=
+by simpa only [Union, supr_prod, supr_subtype] using s.finite_diff_Union_Ioo
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -425,7 +425,7 @@ instance fintypeInterOfLeft (s t : Set α) [Fintype s] [DecidablePred (· ∈ t)
/-- A `fintype` instance for set intersection where the right set has a `fintype` instance. -/
instance fintypeInterOfRight (s t : Set α) [Fintype t] [DecidablePred (· ∈ s)] :
Fintype (s ∩ t : Set α) :=
- Fintype.ofFinset (t.toFinset.filterₓ (· ∈ s)) <| by simp [and_comm']
+ Fintype.ofFinset (t.toFinset.filterₓ (· ∈ s)) <| by simp [and_comm]
#align set.fintype_inter_of_right Set.fintypeInterOfRight
-/
@@ -1184,7 +1184,7 @@ protected theorem infinite_prod :
(s ×ˢ t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
by
refine' ⟨fun h => _, _⟩
- · simp_rw [Set.Infinite, and_comm' ¬_, ← not_imp]
+ · simp_rw [Set.Infinite, and_comm ¬_, ← not_imp]
by_contra!
exact h ((this.1 h.nonempty.snd).Prod <| this.2 h.nonempty.fst)
· rintro (h | h)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1010,7 +1010,7 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
#align set.finite.sInter Set.Finite.sInter
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i «expr ∉ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (i «expr ∉ » t) -/
#print Set.Finite.iUnion /-
/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
union `⋃ i, s i` is a finite set. -/
@@ -2133,7 +2133,7 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
#print Set.finite_of_forall_not_lt_lt /-
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1021,7 +1021,7 @@ theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Fin
refine' Union_subset fun i x hx => _
by_cases hi : i ∈ t
· exact mem_bUnion hi hx
- · rw [he i hi, mem_empty_iff_false] at hx
+ · rw [he i hi, mem_empty_iff_false] at hx
contradiction
#align set.finite.Union Set.Finite.iUnion
-/
@@ -1461,7 +1461,7 @@ theorem Finite.induction_on' {C : Set α → Prop} {S : Set α} (h : S.Finite) (
by
refine' @Set.Finite.induction_on α (fun s => s ⊆ S → C s) S h (fun _ => H0) _ subset.rfl
intro a s has hsf hCs haS
- rw [insert_subset] at haS
+ rw [insert_subset] at haS
exact H1 haS.1 haS.2 has (hCs haS.2)
#align set.finite.induction_on' Set.Finite.induction_on'
-/
@@ -1727,7 +1727,7 @@ theorem infinite_image2 (hfs : ∀ b ∈ t, InjOn (fun a => f a b) s) (hft : ∀
(image2 f s t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
by
refine' ⟨fun h => Set.infinite_prod.1 _, _⟩
- · rw [← image_uncurry_prod] at h
+ · rw [← image_uncurry_prod] at h
exact h.of_image _
· rintro (⟨hs, b, hb⟩ | ⟨ht, a, ha⟩)
· exact hs.image2_left hb (hfs _ hb)
@@ -1762,7 +1762,7 @@ theorem infinite_range_of_injective [Infinite α] {f : α → β} (hi : Injectiv
#print Set.infinite_of_injective_forall_mem /-
theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α → β} (hi : Injective f)
- (hf : ∀ x : α, f x ∈ s) : s.Infinite := by rw [← range_subset_iff] at hf ;
+ (hf : ∀ x : α, f x ∈ s) : s.Infinite := by rw [← range_subset_iff] at hf;
exact (infinite_range_of_injective hi).mono hf
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-/
@@ -1839,7 +1839,7 @@ theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : S
theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t : Set β} {f : α → β}
(hf : ∀ a, f a ∈ t) (ht : t.Finite) : ∃ a b, a < b ∧ f a = f b :=
by
- rw [← maps_univ_to] at hf
+ rw [← maps_univ_to] at hf
obtain ⟨a, -, b, -, h⟩ := (@infinite_univ α _).exists_lt_map_eq_of_mapsTo hf ht
exact ⟨a, b, h⟩
#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_mem
@@ -1898,7 +1898,7 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
refine' hs.induction_on _ _
· intro hf; simp [iSup_const]
· intro a s has hs ihs hf
- rw [ball_insert_iff] at hf
+ rw [ball_insert_iff] at hf
simp only [iInf_insert, ← ihs hf.2]
exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -55,7 +55,6 @@ variable {α : Type u} {β : Type v} {ι : Sort w} {γ : Type x}
namespace Set
-#print Set.Finite /-
/-- A set is finite if there is a `finset` with the same elements.
This is represented as there being a `fintype` instance for the set
coerced to a type.
@@ -65,8 +64,7 @@ so that it won't be frozen as a local instance. -/
@[protected]
inductive Finite (s : Set α) : Prop
| intro : Fintype s → Finite
-#align set.finite Set.Finite
--/
+#align set.finite Set.Finiteₓ
-- The `protected` attribute does not take effect within the same namespace block.
end Set
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -694,7 +694,8 @@ namespace Multiset
#print Multiset.finite_toSet /-
@[simp]
-theorem finite_toSet (s : Multiset α) : {x | x ∈ s}.Finite := by classical
+theorem finite_toSet (s : Multiset α) : {x | x ∈ s}.Finite := by
+ classical simpa only [← Multiset.mem_toFinset] using s.to_finset.finite_to_set
#align multiset.finite_to_set Multiset.finite_toSet
-/
@@ -988,7 +989,11 @@ theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.F
#print Set.Finite.biUnion /-
theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
- (ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by classical
+ (ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
+ classical
+ cases hs
+ haveI := fintype_bUnion s t fun i hi => (ht i hi).Fintype
+ apply to_finite
#align set.finite.bUnion Set.Finite.biUnion
-/
@@ -1198,7 +1203,10 @@ theorem finite_prod : (s ×ˢ t).Finite ↔ (s.Finite ∨ t = ∅) ∧ (t.Finite
-/
#print Set.Finite.offDiag /-
-protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by classical
+protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by
+ classical
+ cases hs
+ apply Set.toFinite
#align set.finite.off_diag Set.Finite.offDiag
-/
@@ -1212,7 +1220,11 @@ end Prod
#print Set.Finite.seq /-
theorem Finite.seq {f : Set (α → β)} {s : Set α} (hf : f.Finite) (hs : s.Finite) :
- (f.seq s).Finite := by classical
+ (f.seq s).Finite := by
+ classical
+ cases hf
+ cases hs
+ apply to_finite
#align set.finite.seq Set.Finite.seq
-/
@@ -1268,6 +1280,8 @@ theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set
cases nonempty_fintype δ
lift t to ∀ d, Finset (κ d) using ht
classical
+ rw [← Fintype.coe_piFinset]
+ apply Finset.finite_toSet
#align set.finite.pi Set.Finite.pi
-/
@@ -1483,7 +1497,15 @@ theorem seq_of_forall_finite_exists {γ : Type _} {P : γ → Set γ → Prop}
⟨fun n =>
@Nat.strongRecOn' (fun _ => γ) n fun n ih =>
Classical.choose <| h (range fun m : Iio n => ih m.1 m.2) (finite_range _),
- fun n => by classical⟩
+ fun n => by
+ classical
+ refine' Nat.strongRecOn' n fun n ih => _
+ rw [Nat.strongRecOn'_beta]
+ convert Classical.choose_spec (h _ _)
+ ext x
+ constructor
+ · rintro ⟨m, hmn, rfl⟩; exact ⟨⟨m, hmn⟩, rfl⟩
+ · rintro ⟨⟨m, hmn⟩, rfl⟩; exact ⟨m, hmn, rfl⟩⟩
#align set.seq_of_forall_finite_exists Set.seq_of_forall_finite_exists
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -694,8 +694,7 @@ namespace Multiset
#print Multiset.finite_toSet /-
@[simp]
-theorem finite_toSet (s : Multiset α) : {x | x ∈ s}.Finite := by
- classical simpa only [← Multiset.mem_toFinset] using s.to_finset.finite_to_set
+theorem finite_toSet (s : Multiset α) : {x | x ∈ s}.Finite := by classical
#align multiset.finite_to_set Multiset.finite_toSet
-/
@@ -989,11 +988,7 @@ theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.F
#print Set.Finite.biUnion /-
theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
- (ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
- classical
- cases hs
- haveI := fintype_bUnion s t fun i hi => (ht i hi).Fintype
- apply to_finite
+ (ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by classical
#align set.finite.bUnion Set.Finite.biUnion
-/
@@ -1203,10 +1198,7 @@ theorem finite_prod : (s ×ˢ t).Finite ↔ (s.Finite ∨ t = ∅) ∧ (t.Finite
-/
#print Set.Finite.offDiag /-
-protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by
- classical
- cases hs
- apply Set.toFinite
+protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by classical
#align set.finite.off_diag Set.Finite.offDiag
-/
@@ -1220,11 +1212,7 @@ end Prod
#print Set.Finite.seq /-
theorem Finite.seq {f : Set (α → β)} {s : Set α} (hf : f.Finite) (hs : s.Finite) :
- (f.seq s).Finite := by
- classical
- cases hf
- cases hs
- apply to_finite
+ (f.seq s).Finite := by classical
#align set.finite.seq Set.Finite.seq
-/
@@ -1280,8 +1268,6 @@ theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set
cases nonempty_fintype δ
lift t to ∀ d, Finset (κ d) using ht
classical
- rw [← Fintype.coe_piFinset]
- apply Finset.finite_toSet
#align set.finite.pi Set.Finite.pi
-/
@@ -1497,15 +1483,7 @@ theorem seq_of_forall_finite_exists {γ : Type _} {P : γ → Set γ → Prop}
⟨fun n =>
@Nat.strongRecOn' (fun _ => γ) n fun n ih =>
Classical.choose <| h (range fun m : Iio n => ih m.1 m.2) (finite_range _),
- fun n => by
- classical
- refine' Nat.strongRecOn' n fun n ih => _
- rw [Nat.strongRecOn'_beta]
- convert Classical.choose_spec (h _ _)
- ext x
- constructor
- · rintro ⟨m, hmn, rfl⟩; exact ⟨⟨m, hmn⟩, rfl⟩
- · rintro ⟨⟨m, hmn⟩, rfl⟩; exact ⟨m, hmn, rfl⟩⟩
+ fun n => by classical⟩
#align set.seq_of_forall_finite_exists Set.seq_of_forall_finite_exists
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1577,12 +1577,10 @@ theorem card_lt_card {s t : Set α} [Fintype s] [Fintype t] (h : s ⊂ t) :
#align set.card_lt_card Set.card_lt_card
-/
-#print Set.card_le_of_subset /-
theorem card_le_of_subset {s t : Set α} [Fintype s] [Fintype t] (hsub : s ⊆ t) :
Fintype.card s ≤ Fintype.card t :=
Fintype.card_le_of_injective (Set.inclusion hsub) (Set.inclusion_injective hsub)
#align set.card_le_of_subset Set.card_le_of_subset
--/
#print Set.eq_of_subset_of_card_le /-
theorem eq_of_subset_of_card_le {s t : Set α} [Fintype s] [Fintype t] (hsub : s ⊆ t)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1187,7 +1187,7 @@ protected theorem infinite_prod :
by
refine' ⟨fun h => _, _⟩
· simp_rw [Set.Infinite, and_comm' ¬_, ← not_imp]
- by_contra'
+ by_contra!
exact h ((this.1 h.nonempty.snd).Prod <| this.2 h.nonempty.fst)
· rintro (h | h)
· exact h.1.prodLeft h.2
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -7,7 +7,7 @@ import Data.Finset.Basic
import Data.Set.Functor
import Data.Finite.Basic
-#align_import data.set.finite from "leanprover-community/mathlib"@"ffde2d8a6e689149e44fd95fa862c23a57f8c780"
+#align_import data.set.finite from "leanprover-community/mathlib"@"65a1391a0106c9204fe45bc73a039f056558cb83"
/-!
# Finite sets
@@ -1530,7 +1530,7 @@ theorem empty_card' {h : Fintype.{u} (∅ : Set α)} : @Fintype.card (∅ : Set
#print Set.card_fintypeInsertOfNotMem /-
theorem card_fintypeInsertOfNotMem {a : α} (s : Set α) [Fintype s] (h : a ∉ s) :
@Fintype.card _ (fintypeInsertOfNotMem s h) = Fintype.card s + 1 := by
- rw [fintype_insert_of_not_mem, Fintype.card_ofFinset] <;> simp [Finset.card, to_finset] <;> rfl
+ simp [fintype_insert_of_not_mem, Fintype.card_ofFinset]
#align set.card_fintype_insert_of_not_mem Set.card_fintypeInsertOfNotMem
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
-/
-import Mathbin.Data.Finset.Basic
-import Mathbin.Data.Set.Functor
-import Mathbin.Data.Finite.Basic
+import Data.Finset.Basic
+import Data.Set.Functor
+import Data.Finite.Basic
#align_import data.set.finite from "leanprover-community/mathlib"@"ffde2d8a6e689149e44fd95fa862c23a57f8c780"
@@ -842,11 +842,11 @@ instance finite_image (s : Set α) (f : α → β) [Finite s] : Finite (f '' s)
#align finite.set.finite_image Finite.Set.finite_image
-/
-/- ./././Mathport/Syntax/Translate/Expr.lean:372:4: unsupported set replacement {(f x) | x : α} -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:373:4: unsupported set replacement {(f x) | x : α} -/
#print Finite.Set.finite_replacement /-
instance finite_replacement [Finite α] (f : α → β) :
Finite
- "./././Mathport/Syntax/Translate/Expr.lean:372:4: unsupported set replacement {(f x) | x : α}" :=
+ "./././Mathport/Syntax/Translate/Expr.lean:373:4: unsupported set replacement {(f x) | x : α}" :=
Finite.Set.finite_range f
#align finite.set.finite_replacement Finite.Set.finite_replacement
-/
@@ -1012,7 +1012,7 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
#align set.finite.sInter Set.Finite.sInter
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i «expr ∉ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i «expr ∉ » t) -/
#print Set.Finite.iUnion /-
/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
union `⋃ i, s i` is a finite set. -/
@@ -2137,7 +2137,7 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
#print Set.finite_of_forall_not_lt_lt /-
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/ffde2d8a6e689149e44fd95fa862c23a57f8c780
@@ -7,7 +7,7 @@ import Mathbin.Data.Finset.Basic
import Mathbin.Data.Set.Functor
import Mathbin.Data.Finite.Basic
-#align_import data.set.finite from "leanprover-community/mathlib"@"7fdd4f3746cb059edfdb5d52cba98f66fce418c0"
+#align_import data.set.finite from "leanprover-community/mathlib"@"ffde2d8a6e689149e44fd95fa862c23a57f8c780"
/-!
# Finite sets
@@ -2050,7 +2050,7 @@ theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α)
section
-variable [SemilatticeSup α] [Nonempty α] {s : Set α}
+variable [Preorder α] [IsDirected α (· ≤ ·)] [Nonempty α] {s : Set α}
#print Set.Finite.bddAbove /-
/-- A finite set is bounded above.-/
@@ -2078,12 +2078,12 @@ end
section
-variable [SemilatticeInf α] [Nonempty α] {s : Set α}
+variable [Preorder α] [IsDirected α (· ≥ ·)] [Nonempty α] {s : Set α}
#print Set.Finite.bddBelow /-
/-- A finite set is bounded below.-/
protected theorem Finite.bddBelow (hs : s.Finite) : BddBelow s :=
- @Finite.bddAbove αᵒᵈ _ _ _ hs
+ @Finite.bddAbove αᵒᵈ _ _ _ _ hs
#align set.finite.bdd_below Set.Finite.bddBelow
-/
@@ -2091,16 +2091,13 @@ protected theorem Finite.bddBelow (hs : s.Finite) : BddBelow s :=
/-- A finite union of sets which are all bounded below is still bounded below.-/
theorem Finite.bddBelow_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddBelow (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddBelow (S i) :=
- @Finite.bddAbove_biUnion αᵒᵈ _ _ _ _ _ H
+ @Finite.bddAbove_biUnion αᵒᵈ _ _ _ _ _ _ H
#align set.finite.bdd_below_bUnion Set.Finite.bddBelow_biUnion
-/
#print Set.infinite_of_not_bddBelow /-
theorem infinite_of_not_bddBelow : ¬BddBelow s → s.Infinite :=
- by
- contrapose!
- rw [not_infinite]
- apply finite.bdd_below
+ mt Finite.bddBelow
#align set.infinite_of_not_bdd_below Set.infinite_of_not_bddBelow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -79,7 +79,7 @@ theorem finite_def {s : Set α} : s.Finite ↔ Nonempty (Fintype s) :=
#align set.finite_def Set.finite_def
-/
-alias finite_def ↔ finite.nonempty_fintype _
+alias ⟨finite.nonempty_fintype, _⟩ := finite_def
#align set.finite.nonempty_fintype Set.Finite.nonempty_fintype
#print Set.finite_coe_iff /-
@@ -174,7 +174,7 @@ theorem not_infinite {s : Set α} : ¬s.Infinite ↔ s.Finite :=
#align set.not_infinite Set.not_infinite
-/
-alias not_infinite ↔ _ Finite.not_infinite
+alias ⟨_, Finite.not_infinite⟩ := not_infinite
#align set.finite.not_infinite Set.Finite.not_infinite
attribute [simp] Finite.not_infinite
@@ -276,10 +276,10 @@ protected theorem toFinset_ssubset_toFinset : hs.toFinset ⊂ ht.toFinset ↔ s
#align set.finite.to_finset_ssubset_to_finset Set.Finite.toFinset_ssubset_toFinset
-/
-alias finite.to_finset_subset_to_finset ↔ _ to_finset_mono
+alias ⟨_, to_finset_mono⟩ := finite.to_finset_subset_to_finset
#align set.finite.to_finset_mono Set.Finite.toFinset_mono
-alias finite.to_finset_ssubset_to_finset ↔ _ to_finset_strict_mono
+alias ⟨_, to_finset_strict_mono⟩ := finite.to_finset_ssubset_to_finset
#align set.finite.to_finset_strict_mono Set.Finite.toFinset_strictMono
attribute [protected] to_finset_mono to_finset_strict_mono
@@ -906,7 +906,7 @@ theorem finite_univ_iff : (@univ α).Finite ↔ Finite α :=
#align set.finite_univ_iff Set.finite_univ_iff
-/
-alias finite_univ_iff ↔ _root_.finite.of_finite_univ _
+alias ⟨_root_.finite.of_finite_univ, _⟩ := finite_univ_iff
#align finite.of_finite_univ Finite.of_finite_univ
#print Set.Finite.union /-
@@ -1641,7 +1641,7 @@ theorem infinite_coe_iff {s : Set α} : Infinite s ↔ s.Infinite :=
#align set.infinite_coe_iff Set.infinite_coe_iff
-/
-alias infinite_coe_iff ↔ _ infinite.to_subtype
+alias ⟨_, infinite.to_subtype⟩ := infinite_coe_iff
#align set.infinite.to_subtype Set.Infinite.to_subtype
#print Set.Infinite.natEmbedding /-
@@ -1703,7 +1703,7 @@ theorem infinite_image_iff {s : Set α} {f : α → β} (hi : InjOn f s) :
#align set.infinite_image_iff Set.infinite_image_iff
-/
-alias infinite_image_iff ↔ _ infinite.image
+alias ⟨_, infinite.image⟩ := infinite_image_iff
#align set.infinite.image Set.Infinite.image
attribute [protected] infinite.image
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
-
-! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 7fdd4f3746cb059edfdb5d52cba98f66fce418c0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.Basic
import Mathbin.Data.Set.Functor
import Mathbin.Data.Finite.Basic
+#align_import data.set.finite from "leanprover-community/mathlib"@"7fdd4f3746cb059edfdb5d52cba98f66fce418c0"
+
/-!
# Finite sets
@@ -1015,7 +1012,7 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
#align set.finite.sInter Set.Finite.sInter
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i «expr ∉ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i «expr ∉ » t) -/
#print Set.Finite.iUnion /-
/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
union `⋃ i, s i` is a finite set. -/
@@ -2143,7 +2140,7 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
#print Set.finite_of_forall_not_lt_lt /-
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -132,14 +132,18 @@ protected noncomputable def Finite.toFinset {s : Set α} (h : s.Finite) : Finset
#align set.finite.to_finset Set.Finite.toFinset
-/
+#print Set.Finite.toFinset_eq_toFinset /-
theorem Finite.toFinset_eq_toFinset {s : Set α} [Fintype s] (h : s.Finite) :
h.toFinset = s.toFinset := by rw [finite.to_finset]; congr
#align set.finite.to_finset_eq_to_finset Set.Finite.toFinset_eq_toFinset
+-/
+#print Set.toFinite_toFinset /-
@[simp]
theorem toFinite_toFinset (s : Set α) [Fintype s] : s.toFinite.toFinset = s.toFinset :=
s.toFinite.toFinset_eq_toFinset
#align set.to_finite_to_finset Set.toFinite_toFinset
+-/
#print Set.Finite.exists_finset /-
theorem Finite.exists_finset {s : Set α} (h : s.Finite) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -240,10 +240,12 @@ theorem toFinset_subset {t : Finset α} : hs.toFinset ⊆ t ↔ s ⊆ t := by
#align set.finite.to_finset_subset Set.Finite.toFinset_subset
-/
+#print Set.Finite.toFinset_ssubset /-
@[simp]
theorem toFinset_ssubset {t : Finset α} : hs.toFinset ⊂ t ↔ s ⊂ t := by
rw [← Finset.coe_ssubset, finite.coe_to_finset]
#align set.finite.to_finset_ssubset Set.Finite.toFinset_ssubset
+-/
#print Set.Finite.subset_toFinset /-
@[simp]
@@ -252,10 +254,12 @@ theorem subset_toFinset {s : Finset α} : s ⊆ ht.toFinset ↔ ↑s ⊆ t := by
#align set.finite.subset_to_finset Set.Finite.subset_toFinset
-/
+#print Set.Finite.ssubset_toFinset /-
@[simp]
theorem ssubset_toFinset {s : Finset α} : s ⊂ ht.toFinset ↔ ↑s ⊂ t := by
rw [← Finset.coe_ssubset, finite.coe_to_finset]
#align set.finite.ssubset_to_finset Set.Finite.ssubset_toFinset
+-/
#print Set.Finite.toFinset_subset_toFinset /-
@[mono]
@@ -264,10 +268,12 @@ protected theorem toFinset_subset_toFinset : hs.toFinset ⊆ ht.toFinset ↔ s
#align set.finite.to_finset_subset_to_finset Set.Finite.toFinset_subset_toFinset
-/
+#print Set.Finite.toFinset_ssubset_toFinset /-
@[mono]
protected theorem toFinset_ssubset_toFinset : hs.toFinset ⊂ ht.toFinset ↔ s ⊂ t := by
simp only [← Finset.coe_ssubset, finite.coe_to_finset]
#align set.finite.to_finset_ssubset_to_finset Set.Finite.toFinset_ssubset_toFinset
+-/
alias finite.to_finset_subset_to_finset ↔ _ to_finset_mono
#align set.finite.to_finset_mono Set.Finite.toFinset_mono
@@ -284,32 +290,44 @@ protected theorem toFinset_setOf [Fintype α] (p : α → Prop) [DecidablePred p
#align set.finite.to_finset_set_of Set.Finite.toFinset_setOf
-/
+#print Set.Finite.disjoint_toFinset /-
@[simp]
theorem disjoint_toFinset {hs : s.Finite} {ht : t.Finite} :
Disjoint hs.toFinset ht.toFinset ↔ Disjoint s t :=
@disjoint_toFinset _ _ _ hs.Fintype ht.Fintype
#align set.finite.disjoint_to_finset Set.Finite.disjoint_toFinset
+-/
+#print Set.Finite.toFinset_inter /-
protected theorem toFinset_inter [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∩ t).Finite) : h.toFinset = hs.toFinset ∩ ht.toFinset := by ext; simp
#align set.finite.to_finset_inter Set.Finite.toFinset_inter
+-/
+#print Set.Finite.toFinset_union /-
protected theorem toFinset_union [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∪ t).Finite) : h.toFinset = hs.toFinset ∪ ht.toFinset := by ext; simp
#align set.finite.to_finset_union Set.Finite.toFinset_union
+-/
+#print Set.Finite.toFinset_diff /-
protected theorem toFinset_diff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s \ t).Finite) : h.toFinset = hs.toFinset \ ht.toFinset := by ext; simp
#align set.finite.to_finset_diff Set.Finite.toFinset_diff
+-/
+#print Set.Finite.toFinset_symmDiff /-
protected theorem toFinset_symmDiff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∆ t).Finite) : h.toFinset = hs.toFinset ∆ ht.toFinset := by ext;
simp [mem_symm_diff, Finset.mem_symmDiff]
#align set.finite.to_finset_symm_diff Set.Finite.toFinset_symmDiff
+-/
+#print Set.Finite.toFinset_compl /-
protected theorem toFinset_compl [DecidableEq α] [Fintype α] (hs : s.Finite) (h : sᶜ.Finite) :
h.toFinset = hs.toFinsetᶜ := by ext; simp
#align set.finite.to_finset_compl Set.Finite.toFinset_compl
+-/
#print Set.Finite.toFinset_empty /-
@[simp]
@@ -375,10 +393,12 @@ noncomputable def fintypeOfFiniteUniv (H : (univ : Set α).Finite) : Fintype α
#align set.fintype_of_finite_univ Set.fintypeOfFiniteUniv
-/
+#print Set.fintypeUnion /-
instance fintypeUnion [DecidableEq α] (s t : Set α) [Fintype s] [Fintype t] :
Fintype (s ∪ t : Set α) :=
Fintype.ofFinset (s.toFinset ∪ t.toFinset) <| by simp
#align set.fintype_union Set.fintypeUnion
+-/
#print Set.fintypeSep /-
instance fintypeSep (s : Set α) (p : α → Prop) [Fintype s] [DecidablePred p] :
@@ -387,22 +407,28 @@ instance fintypeSep (s : Set α) (p : α → Prop) [Fintype s] [DecidablePred p]
#align set.fintype_sep Set.fintypeSep
-/
+#print Set.fintypeInter /-
instance fintypeInter (s t : Set α) [DecidableEq α] [Fintype s] [Fintype t] :
Fintype (s ∩ t : Set α) :=
Fintype.ofFinset (s.toFinset ∩ t.toFinset) <| by simp
#align set.fintype_inter Set.fintypeInter
+-/
+#print Set.fintypeInterOfLeft /-
/-- A `fintype` instance for set intersection where the left set has a `fintype` instance. -/
instance fintypeInterOfLeft (s t : Set α) [Fintype s] [DecidablePred (· ∈ t)] :
Fintype (s ∩ t : Set α) :=
Fintype.ofFinset (s.toFinset.filterₓ (· ∈ t)) <| by simp
#align set.fintype_inter_of_left Set.fintypeInterOfLeft
+-/
+#print Set.fintypeInterOfRight /-
/-- A `fintype` instance for set intersection where the right set has a `fintype` instance. -/
instance fintypeInterOfRight (s t : Set α) [Fintype t] [DecidablePred (· ∈ s)] :
Fintype (s ∩ t : Set α) :=
Fintype.ofFinset (t.toFinset.filterₓ (· ∈ s)) <| by simp [and_comm']
#align set.fintype_inter_of_right Set.fintypeInterOfRight
+-/
#print Set.fintypeSubset /-
/-- A `fintype` structure on a set defines a `fintype` structure on its subset. -/
@@ -411,15 +437,19 @@ def fintypeSubset (s : Set α) {t : Set α} [Fintype s] [DecidablePred (· ∈ t
#align set.fintype_subset Set.fintypeSubset
-/
+#print Set.fintypeDiff /-
instance fintypeDiff [DecidableEq α] (s t : Set α) [Fintype s] [Fintype t] :
Fintype (s \ t : Set α) :=
Fintype.ofFinset (s.toFinset \ t.toFinset) <| by simp
#align set.fintype_diff Set.fintypeDiff
+-/
+#print Set.fintypeDiffLeft /-
instance fintypeDiffLeft (s t : Set α) [Fintype s] [DecidablePred (· ∈ t)] :
Fintype (s \ t : Set α) :=
Set.fintypeSep s (· ∈ tᶜ)
#align set.fintype_diff_left Set.fintypeDiffLeft
+-/
#print Set.fintypeiUnion /-
instance fintypeiUnion [DecidableEq α] [Fintype (PLift ι)] (f : ι → Set α) [∀ i, Fintype (f i)] :
@@ -709,9 +739,11 @@ example : Finite (∅ : Set α) :=
example (a : α) : Finite ({a} : Set α) :=
inferInstance
+#print Finite.Set.finite_union /-
instance finite_union (s t : Set α) [Finite s] [Finite t] : Finite (s ∪ t : Set α) := by
cases nonempty_fintype s; cases nonempty_fintype t; infer_instance
#align finite.set.finite_union Finite.Set.finite_union
+-/
#print Finite.Set.finite_sep /-
instance finite_sep (s : Set α) (p : α → Prop) [Finite s] : Finite ({a ∈ s | p a} : Set α) := by
@@ -725,17 +757,23 @@ protected theorem subset (s : Set α) {t : Set α} [Finite s] (h : t ⊆ s) : Fi
#align finite.set.subset Finite.Set.subset
-/
+#print Finite.Set.finite_inter_of_right /-
instance finite_inter_of_right (s t : Set α) [Finite t] : Finite (s ∩ t : Set α) :=
Finite.Set.subset t (inter_subset_right s t)
#align finite.set.finite_inter_of_right Finite.Set.finite_inter_of_right
+-/
+#print Finite.Set.finite_inter_of_left /-
instance finite_inter_of_left (s t : Set α) [Finite s] : Finite (s ∩ t : Set α) :=
Finite.Set.subset s (inter_subset_left s t)
#align finite.set.finite_inter_of_left Finite.Set.finite_inter_of_left
+-/
+#print Finite.Set.finite_diff /-
instance finite_diff (s t : Set α) [Finite s] : Finite (s \ t : Set α) :=
Finite.Set.subset s (diff_subset s t)
#align finite.set.finite_diff Finite.Set.finite_diff
+-/
#print Finite.Set.finite_range /-
instance finite_range (f : ι → α) [Finite ι] : Finite (range f) := by
@@ -757,6 +795,7 @@ instance finite_sUnion {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t :
#align finite.set.finite_sUnion Finite.Set.finite_sUnion
-/
+#print Finite.Set.finite_biUnion /-
theorem finite_biUnion {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
(H : ∀ i ∈ s, Finite (t i)) : Finite (⋃ x ∈ s, t x) :=
by
@@ -764,6 +803,7 @@ theorem finite_biUnion {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
haveI : ∀ i : s, Finite (t i) := fun i => H i i.property
infer_instance
#align finite.set.finite_bUnion Finite.Set.finite_biUnion
+-/
#print Finite.Set.finite_biUnion' /-
instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α) [∀ i, Finite (t i)] :
@@ -868,17 +908,23 @@ theorem finite_univ_iff : (@univ α).Finite ↔ Finite α :=
alias finite_univ_iff ↔ _root_.finite.of_finite_univ _
#align finite.of_finite_univ Finite.of_finite_univ
+#print Set.Finite.union /-
theorem Finite.union {s t : Set α} (hs : s.Finite) (ht : t.Finite) : (s ∪ t).Finite := by cases hs;
cases ht; apply to_finite
#align set.finite.union Set.Finite.union
+-/
+#print Set.Finite.finite_of_compl /-
theorem Finite.finite_of_compl {s : Set α} (hs : s.Finite) (hsc : sᶜ.Finite) : Finite α := by
rw [← finite_univ_iff, ← union_compl_self s]; exact hs.union hsc
#align set.finite.finite_of_compl Set.Finite.finite_of_compl
+-/
+#print Set.Finite.sup /-
theorem Finite.sup {s t : Set α} : s.Finite → t.Finite → (s ⊔ t).Finite :=
Finite.union
#align set.finite.sup Set.Finite.sup
+-/
#print Set.Finite.sep /-
theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : {a ∈ s | p a}.Finite := by cases hs;
@@ -886,21 +932,29 @@ theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : {a ∈ s | p
#align set.finite.sep Set.Finite.sep
-/
+#print Set.Finite.inter_of_left /-
theorem Finite.inter_of_left {s : Set α} (hs : s.Finite) (t : Set α) : (s ∩ t).Finite := by
cases hs; apply to_finite
#align set.finite.inter_of_left Set.Finite.inter_of_left
+-/
+#print Set.Finite.inter_of_right /-
theorem Finite.inter_of_right {s : Set α} (hs : s.Finite) (t : Set α) : (t ∩ s).Finite := by
cases hs; apply to_finite
#align set.finite.inter_of_right Set.Finite.inter_of_right
+-/
+#print Set.Finite.inf_of_left /-
theorem Finite.inf_of_left {s : Set α} (h : s.Finite) (t : Set α) : (s ⊓ t).Finite :=
h.inter_of_left t
#align set.finite.inf_of_left Set.Finite.inf_of_left
+-/
+#print Set.Finite.inf_of_right /-
theorem Finite.inf_of_right {s : Set α} (h : s.Finite) (t : Set α) : (t ⊓ s).Finite :=
h.inter_of_right t
#align set.finite.inf_of_right Set.Finite.inf_of_right
+-/
#print Set.Finite.subset /-
theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) : t.Finite := by
@@ -908,13 +962,17 @@ theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) :
#align set.finite.subset Set.Finite.subset
-/
+#print Set.Finite.diff /-
theorem Finite.diff {s : Set α} (hs : s.Finite) (t : Set α) : (s \ t).Finite := by cases hs;
apply to_finite
#align set.finite.diff Set.Finite.diff
+-/
+#print Set.Finite.of_diff /-
theorem Finite.of_diff {s t : Set α} (hd : (s \ t).Finite) (ht : t.Finite) : s.Finite :=
(hd.union ht).Subset <| subset_diff_union _ _
#align set.finite.of_diff Set.Finite.of_diff
+-/
#print Set.finite_iUnion /-
theorem finite_iUnion [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite := by
@@ -928,6 +986,7 @@ theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.F
#align set.finite.sUnion Set.Finite.sUnion
-/
+#print Set.Finite.biUnion /-
theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
(ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
classical
@@ -935,12 +994,15 @@ theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
haveI := fintype_bUnion s t fun i hi => (ht i hi).Fintype
apply to_finite
#align set.finite.bUnion Set.Finite.biUnion
+-/
+#print Set.Finite.biUnion' /-
/-- Dependent version of `finite.bUnion`. -/
theorem Finite.biUnion' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
(ht : ∀ i ∈ s, (t i ‹_›).Finite) : (⋃ i ∈ s, t i ‹_›).Finite := by cases hs;
rw [bUnion_eq_Union]; apply finite_Union fun i : s => ht i.1 i.2
#align set.finite.bUnion' Set.Finite.biUnion'
+-/
#print Set.Finite.sInter /-
theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
@@ -950,6 +1012,7 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i «expr ∉ » t) -/
+#print Set.Finite.iUnion /-
/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
union `⋃ i, s i` is a finite set. -/
theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Finite)
@@ -962,6 +1025,7 @@ theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Fin
· rw [he i hi, mem_empty_iff_false] at hx
contradiction
#align set.finite.Union Set.Finite.iUnion
+-/
#print Set.Finite.bind /-
theorem Finite.bind {α β} {s : Set α} {f : α → Set β} (h : s.Finite) (hf : ∀ a ∈ s, (f a).Finite) :
@@ -1207,6 +1271,7 @@ theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : {b | b
#align set.finite.finite_subsets Set.Finite.finite_subsets
-/
+#print Set.Finite.pi /-
/-- Finite product of finite sets is finite -/
theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set (κ d)}
(ht : ∀ d, (t d).Finite) : (pi univ t).Finite :=
@@ -1217,6 +1282,7 @@ theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set
rw [← Fintype.coe_piFinset]
apply Finset.finite_toSet
#align set.finite.pi Set.Finite.pi
+-/
#print Set.union_finset_finite_of_range_finite /-
/-- A finite union of finsets is finite. -/
@@ -1249,11 +1315,13 @@ instance Finite.inhabited : Inhabited { s : Set α // s.Finite } :=
#align set.finite.inhabited Set.Finite.inhabited
-/
+#print Set.finite_union /-
@[simp]
theorem finite_union {s t : Set α} : (s ∪ t).Finite ↔ s.Finite ∧ t.Finite :=
⟨fun h => ⟨h.Subset (subset_union_left _ _), h.Subset (subset_union_right _ _)⟩, fun ⟨hs, ht⟩ =>
hs.union ht⟩
#align set.finite_union Set.finite_union
+-/
#print Set.finite_image_iff /-
theorem finite_image_iff {s : Set α} {f : α → β} (hi : InjOn f s) : (f '' s).Finite ↔ s.Finite :=
@@ -1335,11 +1403,14 @@ theorem finite_image_fst_and_snd_iff {s : Set (α × β)} :
#align set.finite_image_fst_and_snd_iff Set.finite_image_fst_and_snd_iff
-/
+#print Set.forall_finite_image_eval_iff /-
theorem forall_finite_image_eval_iff {δ : Type _} [Finite δ] {κ : δ → Type _} {s : Set (∀ d, κ d)} :
(∀ d, (eval d '' s).Finite) ↔ s.Finite :=
⟨fun h => (Finite.pi h).Subset <| subset_pi_eval_image _ _, fun h d => h.image _⟩
#align set.forall_finite_image_eval_iff Set.forall_finite_image_eval_iff
+-/
+#print Set.finite_subset_iUnion /-
theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set α} (h : s ⊆ ⋃ i, t i) :
∃ I : Set ι, I.Finite ∧ s ⊆ ⋃ i ∈ I, t i :=
by
@@ -1349,7 +1420,9 @@ theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set
rw [bUnion_range, mem_Union]
exact ⟨⟨x, hx⟩, hf _⟩
#align set.finite_subset_Union Set.finite_subset_iUnion
+-/
+#print Set.eq_finite_iUnion_of_finite_subset_iUnion /-
theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
(h : t ⊆ ⋃ i, s i) :
∃ I : Set ι,
@@ -1366,6 +1439,7 @@ theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : S
· rintro ⟨i, hi, H⟩
exact H⟩
#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_iUnion_of_finite_subset_iUnion
+-/
#print Set.Finite.induction_on /-
@[elab_as_elim]
@@ -1494,11 +1568,13 @@ theorem card_singleton (a : α) : Fintype.card ({a} : Set α) = 1 :=
#align set.card_singleton Set.card_singleton
-/
+#print Set.card_lt_card /-
theorem card_lt_card {s t : Set α} [Fintype s] [Fintype t] (h : s ⊂ t) :
Fintype.card s < Fintype.card t :=
Fintype.card_lt_of_injective_not_surjective (Set.inclusion h.1) (Set.inclusion_injective h.1)
fun hst => (ssubset_iff_subset_ne.1 h).2 (eq_of_inclusion_surjective hst)
#align set.card_lt_card Set.card_lt_card
+-/
#print Set.card_le_of_subset /-
theorem card_le_of_subset {s t : Set α} [Fintype s] [Fintype t] (hsub : s ⊆ t) :
@@ -1582,13 +1658,17 @@ theorem Infinite.exists_subset_card_eq {s : Set α} (hs : s.Infinite) (n : ℕ)
#align set.infinite.exists_subset_card_eq Set.Infinite.exists_subset_card_eq
-/
+#print Set.infinite_of_finite_compl /-
theorem infinite_of_finite_compl [Infinite α] {s : Set α} (hs : sᶜ.Finite) : s.Infinite := fun h =>
Set.infinite_univ (by simpa using hs.union h)
#align set.infinite_of_finite_compl Set.infinite_of_finite_compl
+-/
+#print Set.Finite.infinite_compl /-
theorem Finite.infinite_compl [Infinite α] {s : Set α} (hs : s.Finite) : sᶜ.Infinite := fun h =>
Set.infinite_univ (by simpa using hs.union h)
#align set.finite.infinite_compl Set.Finite.infinite_compl
+-/
#print Set.Infinite.mono /-
protected theorem Infinite.mono {s t : Set α} (h : s ⊆ t) : s.Infinite → t.Infinite :=
@@ -1596,14 +1676,18 @@ protected theorem Infinite.mono {s t : Set α} (h : s ⊆ t) : s.Infinite → t.
#align set.infinite.mono Set.Infinite.mono
-/
+#print Set.Infinite.diff /-
theorem Infinite.diff {s t : Set α} (hs : s.Infinite) (ht : t.Finite) : (s \ t).Infinite := fun h =>
hs <| h.of_diff ht
#align set.infinite.diff Set.Infinite.diff
+-/
+#print Set.infinite_union /-
@[simp]
theorem infinite_union {s t : Set α} : (s ∪ t).Infinite ↔ s.Infinite ∨ t.Infinite := by
simp only [Set.Infinite, finite_union, not_and_or]
#align set.infinite_union Set.infinite_union
+-/
#print Set.Infinite.of_image /-
theorem Infinite.of_image (f : α → β) {s : Set α} (hs : (f '' s).Infinite) : s.Infinite :=
@@ -1663,12 +1747,14 @@ theorem infinite_of_injOn_mapsTo {s : Set α} {t : Set β} {f : α → β} (hi :
#align set.infinite_of_inj_on_maps_to Set.infinite_of_injOn_mapsTo
-/
+#print Set.Infinite.exists_ne_map_eq_of_mapsTo /-
theorem Infinite.exists_ne_map_eq_of_mapsTo {s : Set α} {t : Set β} {f : α → β} (hs : s.Infinite)
(hf : MapsTo f s t) (ht : t.Finite) : ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ f x = f y :=
by
contrapose! ht
exact infinite_of_inj_on_maps_to (fun x hx y hy => not_imp_not.1 (ht x hx y hy)) hf hs
#align set.infinite.exists_ne_map_eq_of_maps_to Set.Infinite.exists_ne_map_eq_of_mapsTo
+-/
#print Set.infinite_range_of_injective /-
theorem infinite_range_of_injective [Infinite α] {f : α → β} (hi : Injective f) :
@@ -1684,11 +1770,13 @@ theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α →
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-/
+#print Set.Infinite.exists_not_mem_finset /-
theorem Infinite.exists_not_mem_finset {s : Set α} (hs : s.Infinite) (f : Finset α) :
∃ a ∈ s, a ∉ f :=
let ⟨a, has, haf⟩ := (hs.diffₓ (toFinite f)).Nonempty
⟨a, has, fun h => haf <| Finset.mem_coe.1 h⟩
#align set.infinite.exists_not_mem_finset Set.Infinite.exists_not_mem_finset
+-/
#print Set.not_injOn_infinite_finite_image /-
theorem not_injOn_infinite_finite_image {f : α → β} {s : Set α} (h_inf : s.Infinite)
@@ -1711,6 +1799,7 @@ section Preorder
variable [Preorder α] [Nonempty α] {s : Set α}
+#print Set.infinite_of_forall_exists_gt /-
theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinite :=
by
inhabit α
@@ -1719,10 +1808,13 @@ theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinit
refine' infinite_of_injective_forall_mem (strictMono_nat_of_lt_succ fun n => _).Injective hf
exact (h _).choose_spec.choose_spec
#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gt
+-/
+#print Set.infinite_of_forall_exists_lt /-
theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinite :=
@infinite_of_forall_exists_gt αᵒᵈ _ _ _ h
#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_lt
+-/
end Preorder
@@ -1738,11 +1830,13 @@ theorem finite_isBot (α : Type _) [PartialOrder α] : {x : α | IsBot x}.Finite
#align set.finite_is_bot Set.finite_isBot
-/
+#print Set.Infinite.exists_lt_map_eq_of_mapsTo /-
theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : Set β} {f : α → β}
(hs : s.Infinite) (hf : MapsTo f s t) (ht : t.Finite) : ∃ x ∈ s, ∃ y ∈ s, x < y ∧ f x = f y :=
let ⟨x, hx, y, hy, hxy, hf⟩ := hs.exists_ne_map_eq_of_mapsTo hf ht
hxy.lt_or_lt.elim (fun hxy => ⟨x, hx, y, hy, hxy, hf⟩) fun hyx => ⟨y, hy, x, hx, hyx, hf.symm⟩
#align set.infinite.exists_lt_map_eq_of_maps_to Set.Infinite.exists_lt_map_eq_of_mapsTo
+-/
#print Set.Finite.exists_lt_map_eq_of_forall_mem /-
theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t : Set β} {f : α → β}
@@ -1754,19 +1848,23 @@ theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t
#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_mem
-/
+#print Set.exists_min_image /-
theorem exists_min_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.Finite) :
s.Nonempty → ∃ a ∈ s, ∀ b ∈ s, f a ≤ f b
| ⟨x, hx⟩ => by
simpa only [exists_prop, finite.mem_to_finset] using
h1.to_finset.exists_min_image f ⟨x, h1.mem_to_finset.2 hx⟩
#align set.exists_min_image Set.exists_min_image
+-/
+#print Set.exists_max_image /-
theorem exists_max_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.Finite) :
s.Nonempty → ∃ a ∈ s, ∀ b ∈ s, f b ≤ f a
| ⟨x, hx⟩ => by
simpa only [exists_prop, finite.mem_to_finset] using
h1.to_finset.exists_max_image f ⟨x, h1.mem_to_finset.2 hx⟩
#align set.exists_max_image Set.exists_max_image
+-/
#print Set.exists_lower_bound_image /-
theorem exists_lower_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set α) (f : α → β)
@@ -1794,6 +1892,7 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
#align set.exists_upper_bound_image Set.exists_upper_bound_image
-/
+#print Set.Finite.iSup_biInf_of_monotone /-
theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
@@ -1806,77 +1905,101 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
simp only [iInf_insert, ← ihs hf.2]
exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
+-/
+#print Set.Finite.iSup_biInf_of_antitone /-
theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
@Finite.iSup_biInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitone
+-/
+#print Set.Finite.iInf_biSup_of_monotone /-
theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_antitone fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotone
+-/
+#print Set.Finite.iInf_biSup_of_antitone /-
theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_monotone fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitone
+-/
+#print Set.iSup_iInf_of_monotone /-
theorem Set.iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j := by
simpa only [iInf_univ] using finite_univ.supr_binfi_of_monotone fun i hi => hf i
#align supr_infi_of_monotone Set.iSup_iInf_of_monotone
+-/
+#print Set.iSup_iInf_of_antitone /-
theorem Set.iSup_iInf_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j :=
@Set.iSup_iInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
#align supr_infi_of_antitone Set.iSup_iInf_of_antitone
+-/
+#print Set.iInf_iSup_of_monotone /-
theorem Set.iInf_iSup_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
Set.iSup_iInf_of_antitone fun i => (hf i).dual_right
#align infi_supr_of_monotone Set.iInf_iSup_of_monotone
+-/
+#print Set.iInf_iSup_of_antitone /-
theorem Set.iInf_iSup_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
Set.iSup_iInf_of_monotone fun i => (hf i).dual_right
#align infi_supr_of_antitone Set.iInf_iSup_of_antitone
+-/
+#print Set.iUnion_iInter_of_monotone /-
/-- An increasing union distributes over finite intersection. -/
theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
(⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
Set.iSup_iInf_of_monotone hs
#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotone
+-/
+#print Set.iUnion_iInter_of_antitone /-
/-- A decreasing union distributes over finite intersection. -/
theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
(⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
Set.iSup_iInf_of_antitone hs
#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitone
+-/
+#print Set.iInter_iUnion_of_monotone /-
/-- An increasing intersection distributes over finite union. -/
theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
(⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
Set.iInf_iSup_of_monotone hs
#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotone
+-/
+#print Set.iInter_iUnion_of_antitone /-
/-- A decreasing intersection distributes over finite union. -/
theorem iInter_iUnion_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
(⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
Set.iInf_iSup_of_antitone hs
#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitone
+-/
+#print Set.iUnion_pi_of_monotone /-
theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
{I : Set ι} {s : ∀ i, ι' → Set (α i)} (hI : I.Finite) (hs : ∀ i ∈ I, Monotone (s i)) :
(⋃ j : ι', I.pi fun i => s i j) = I.pi fun i => ⋃ j, s i j :=
@@ -1885,12 +2008,15 @@ theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι']
haveI := hI.fintype
exact Union_Inter_of_monotone fun i j₁ j₂ h => preimage_mono <| hs i i.2 h
#align set.Union_pi_of_monotone Set.iUnion_pi_of_monotone
+-/
+#print Set.iUnion_univ_pi_of_monotone /-
theorem iUnion_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
{α : ι → Type _} {s : ∀ i, ι' → Set (α i)} (hs : ∀ i, Monotone (s i)) :
(⋃ j : ι', pi univ fun i => s i j) = pi univ fun i => ⋃ j, s i j :=
iUnion_pi_of_monotone finite_univ fun i _ => hs i
#align set.Union_univ_pi_of_monotone Set.iUnion_univ_pi_of_monotone
+-/
#print Set.finite_range_findGreatest /-
theorem finite_range_findGreatest {P : α → ℕ → Prop} [∀ x, DecidablePred (P x)] {b : ℕ} :
@@ -1899,6 +2025,7 @@ theorem finite_range_findGreatest {P : α → ℕ → Prop} [∀ x, DecidablePre
#align set.finite_range_find_greatest Set.finite_range_findGreatest
-/
+#print Set.Finite.exists_maximal_wrt /-
theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α) (h : Set.Finite s) :
s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a' :=
by
@@ -1918,6 +2045,7 @@ theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α)
· exact (h hbc).elim
· exact ih c hcs hbc
#align set.finite.exists_maximal_wrt Set.Finite.exists_maximal_wrt
+-/
section
@@ -2020,12 +2148,16 @@ theorem Set.finite_of_forall_not_lt_lt {s : Set α}
#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
-/
+#print Set.finite_diff_iUnion_Ioo /-
theorem Set.finite_diff_iUnion_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
Set.finite_of_forall_not_lt_lt fun x hx y hy z hz hxy hyz =>
hy.2 <| mem_iUnion₂_of_mem hx.1 <| mem_iUnion₂_of_mem hz.1 ⟨hxy, hyz⟩
#align set.finite_diff_Union_Ioo Set.finite_diff_iUnion_Ioo
+-/
+#print Set.finite_diff_iUnion_Ioo' /-
theorem Set.finite_diff_iUnion_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
simpa only [Union, iSup_prod, iSup_subtype] using s.finite_diff_Union_Ioo
#align set.finite_diff_Union_Ioo' Set.finite_diff_iUnion_Ioo'
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 5bb9fffd23f9f65b367f5d451da18cc60bf47335
+! leanprover-community/mathlib commit 7fdd4f3746cb059edfdb5d52cba98f66fce418c0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -132,6 +132,15 @@ protected noncomputable def Finite.toFinset {s : Set α} (h : s.Finite) : Finset
#align set.finite.to_finset Set.Finite.toFinset
-/
+theorem Finite.toFinset_eq_toFinset {s : Set α} [Fintype s] (h : s.Finite) :
+ h.toFinset = s.toFinset := by rw [finite.to_finset]; congr
+#align set.finite.to_finset_eq_to_finset Set.Finite.toFinset_eq_toFinset
+
+@[simp]
+theorem toFinite_toFinset (s : Set α) [Fintype s] : s.toFinite.toFinset = s.toFinset :=
+ s.toFinite.toFinset_eq_toFinset
+#align set.to_finite_to_finset Set.toFinite_toFinset
+
#print Set.Finite.exists_finset /-
theorem Finite.exists_finset {s : Set α} (h : s.Finite) :
∃ s' : Finset α, ∀ a : α, a ∈ s' ↔ a ∈ s := by cases h;
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -792,11 +792,11 @@ instance finite_image (s : Set α) (f : α → β) [Finite s] : Finite (f '' s)
#align finite.set.finite_image Finite.Set.finite_image
-/
-/- ./././Mathport/Syntax/Translate/Expr.lean:366:4: unsupported set replacement {(f x) | x : α} -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:372:4: unsupported set replacement {(f x) | x : α} -/
#print Finite.Set.finite_replacement /-
instance finite_replacement [Finite α] (f : α → β) :
Finite
- "./././Mathport/Syntax/Translate/Expr.lean:366:4: unsupported set replacement {(f x) | x : α}" :=
+ "./././Mathport/Syntax/Translate/Expr.lean:372:4: unsupported set replacement {(f x) | x : α}" :=
Finite.Set.finite_range f
#align finite.set.finite_replacement Finite.Set.finite_replacement
-/
@@ -1468,7 +1468,6 @@ theorem card_image_of_inj_on {s : Set α} [Fintype s] {f : α → β} [Fintype (
(Finset.card_image_of_injOn fun x hx y hy hxy =>
H x (mem_to_finset.1 hx) y (mem_to_finset.1 hy) hxy)
_ = Fintype.card s := (Fintype.card_of_finset' _ fun a => mem_to_finset).symm
-
#align set.card_image_of_inj_on Set.card_image_of_inj_on
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -940,7 +940,7 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
#align set.finite.sInter Set.Finite.sInter
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i «expr ∉ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i «expr ∉ » t) -/
/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
union `⋃ i, s i` is a finite set. -/
theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Finite)
@@ -2003,7 +2003,7 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
#print Set.finite_of_forall_not_lt_lt /-
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -271,7 +271,7 @@ attribute [protected] to_finset_mono to_finset_strict_mono
#print Set.Finite.toFinset_setOf /-
@[simp]
protected theorem toFinset_setOf [Fintype α] (p : α → Prop) [DecidablePred p]
- (h : { x | p x }.Finite) : h.toFinset = Finset.univ.filterₓ p := by ext; simp
+ (h : {x | p x}.Finite) : h.toFinset = Finset.univ.filterₓ p := by ext; simp
#align set.finite.to_finset_set_of Set.Finite.toFinset_setOf
-/
@@ -373,7 +373,7 @@ instance fintypeUnion [DecidableEq α] (s t : Set α) [Fintype s] [Fintype t] :
#print Set.fintypeSep /-
instance fintypeSep (s : Set α) (p : α → Prop) [Fintype s] [DecidablePred p] :
- Fintype ({ a ∈ s | p a } : Set α) :=
+ Fintype ({a ∈ s | p a} : Set α) :=
Fintype.ofFinset (s.toFinset.filterₓ p) <| by simp
#align set.fintype_sep Set.fintypeSep
-/
@@ -556,13 +556,13 @@ instance fintypeMap {α β} [DecidableEq β] :
-/
#print Set.fintypeLTNat /-
-instance fintypeLTNat (n : ℕ) : Fintype { i | i < n } :=
+instance fintypeLTNat (n : ℕ) : Fintype {i | i < n} :=
Fintype.ofFinset (Finset.range n) <| by simp
#align set.fintype_lt_nat Set.fintypeLTNat
-/
#print Set.fintypeLENat /-
-instance fintypeLENat (n : ℕ) : Fintype { i | i ≤ n } := by
+instance fintypeLENat (n : ℕ) : Fintype {i | i ≤ n} := by
simpa [Nat.lt_succ_iff] using Set.fintypeLTNat (n + 1)
#align set.fintype_le_nat Set.fintypeLENat
-/
@@ -612,7 +612,7 @@ instance fintypeSeq' {α β : Type u} [DecidableEq β] (f : Set (α → β)) (s
-/
#print Set.fintypeMemFinset /-
-instance fintypeMemFinset (s : Finset α) : Fintype { a | a ∈ s } :=
+instance fintypeMemFinset (s : Finset α) : Fintype {a | a ∈ s} :=
Finset.fintypeCoeSort s
#align set.fintype_mem_finset Set.fintypeMemFinset
-/
@@ -654,7 +654,7 @@ namespace Multiset
#print Multiset.finite_toSet /-
@[simp]
-theorem finite_toSet (s : Multiset α) : { x | x ∈ s }.Finite := by
+theorem finite_toSet (s : Multiset α) : {x | x ∈ s}.Finite := by
classical simpa only [← Multiset.mem_toFinset] using s.to_finset.finite_to_set
#align multiset.finite_to_set Multiset.finite_toSet
-/
@@ -670,7 +670,7 @@ end Multiset
#print List.finite_toSet /-
@[simp]
-theorem List.finite_toSet (l : List α) : { x | x ∈ l }.Finite :=
+theorem List.finite_toSet (l : List α) : {x | x ∈ l}.Finite :=
(show Multiset α from ⟦l⟧).finite_toSet
#align list.finite_to_set List.finite_toSet
-/
@@ -705,7 +705,7 @@ instance finite_union (s t : Set α) [Finite s] [Finite t] : Finite (s ∪ t : S
#align finite.set.finite_union Finite.Set.finite_union
#print Finite.Set.finite_sep /-
-instance finite_sep (s : Set α) (p : α → Prop) [Finite s] : Finite ({ a ∈ s | p a } : Set α) := by
+instance finite_sep (s : Set α) (p : α → Prop) [Finite s] : Finite ({a ∈ s | p a} : Set α) := by
cases nonempty_fintype s; infer_instance
#align finite.set.finite_sep Finite.Set.finite_sep
-/
@@ -767,7 +767,7 @@ instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set
/-- Example: `finite (⋃ (i < n), f i)` where `f : ℕ → set α` and `[∀ i, finite (f i)]`
(when given instances from `data.nat.interval`).
-/
-instance finite_biUnion'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
+instance finite_biUnion'' {ι : Type _} (p : ι → Prop) [h : Finite {x | p x}] (t : ι → Set α)
[∀ i, Finite (t i)] : Finite (⋃ (x) (h : p x), t x) :=
@Finite.Set.finite_biUnion' _ _ (setOf p) h t _
#align finite.set.finite_bUnion'' Finite.Set.finite_biUnion''
@@ -872,8 +872,8 @@ theorem Finite.sup {s t : Set α} : s.Finite → t.Finite → (s ⊔ t).Finite :
#align set.finite.sup Set.Finite.sup
#print Set.Finite.sep /-
-theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : { a ∈ s | p a }.Finite := by
- cases hs; apply to_finite
+theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : {a ∈ s | p a}.Finite := by cases hs;
+ apply to_finite
#align set.finite.sep Set.Finite.sep
-/
@@ -922,9 +922,9 @@ theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.F
theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
(ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
classical
- cases hs
- haveI := fintype_bUnion s t fun i hi => (ht i hi).Fintype
- apply to_finite
+ cases hs
+ haveI := fintype_bUnion s t fun i hi => (ht i hi).Fintype
+ apply to_finite
#align set.finite.bUnion Set.Finite.biUnion
/-- Dependent version of `finite.bUnion`. -/
@@ -1008,7 +1008,7 @@ theorem finite_range (f : ι → α) [Finite ι] : (range f).Finite :=
#print Set.Finite.dependent_image /-
theorem Finite.dependent_image {s : Set α} (hs : s.Finite) (F : ∀ i ∈ s, β) :
- { y : β | ∃ (x : _) (hx : x ∈ s), y = F x hx }.Finite := by cases hs;
+ {y : β | ∃ (x : _) (hx : x ∈ s), y = F x hx}.Finite := by cases hs;
simpa [range, eq_comm] using finite_range fun x : s => F x x.2
#align set.finite.dependent_image Set.Finite.dependent_image
-/
@@ -1056,13 +1056,13 @@ theorem Finite.preimage_embedding {s : Set β} (f : α ↪ β) (h : s.Finite) :
-/
#print Set.finite_lt_nat /-
-theorem finite_lt_nat (n : ℕ) : Set.Finite { i | i < n } :=
+theorem finite_lt_nat (n : ℕ) : Set.Finite {i | i < n} :=
toFinite _
#align set.finite_lt_nat Set.finite_lt_nat
-/
#print Set.finite_le_nat /-
-theorem finite_le_nat (n : ℕ) : Set.Finite { i | i ≤ n } :=
+theorem finite_le_nat (n : ℕ) : Set.Finite {i | i ≤ n} :=
toFinite _
#align set.finite_le_nat Set.finite_le_nat
-/
@@ -1131,8 +1131,8 @@ theorem finite_prod : (s ×ˢ t).Finite ↔ (s.Finite ∨ t = ∅) ∧ (t.Finite
#print Set.Finite.offDiag /-
protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by
classical
- cases hs
- apply Set.toFinite
+ cases hs
+ apply Set.toFinite
#align set.finite.off_diag Set.Finite.offDiag
-/
@@ -1148,9 +1148,9 @@ end Prod
theorem Finite.seq {f : Set (α → β)} {s : Set α} (hf : f.Finite) (hs : s.Finite) :
(f.seq s).Finite := by
classical
- cases hf
- cases hs
- apply to_finite
+ cases hf
+ cases hs
+ apply to_finite
#align set.finite.seq Set.Finite.seq
-/
@@ -1162,7 +1162,7 @@ theorem Finite.seq' {α β : Type u} {f : Set (α → β)} {s : Set α} (hf : f.
-/
#print Set.finite_mem_finset /-
-theorem finite_mem_finset (s : Finset α) : { a | a ∈ s }.Finite :=
+theorem finite_mem_finset (s : Finset α) : {a | a ∈ s}.Finite :=
toFinite _
#align set.finite_mem_finset Set.finite_mem_finset
-/
@@ -1191,7 +1191,7 @@ theorem exists_finite_iff_finset {p : Set α → Prop} :
#print Set.Finite.finite_subsets /-
/-- There are finitely many subsets of a given finite set -/
-theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : { b | b ⊆ a }.Finite :=
+theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : {b | b ⊆ a}.Finite :=
⟨Fintype.ofFinset ((Finset.powerset h.toFinset).map Finset.coeEmb.1) fun s => by
simpa [← @exists_finite_iff_finset α fun t => t ⊆ a ∧ t = s, finite.subset_to_finset, ←
and_assoc] using h.subset⟩
@@ -1205,8 +1205,8 @@ theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set
cases nonempty_fintype δ
lift t to ∀ d, Finset (κ d) using ht
classical
- rw [← Fintype.coe_piFinset]
- apply Finset.finite_toSet
+ rw [← Fintype.coe_piFinset]
+ apply Finset.finite_toSet
#align set.finite.pi Set.Finite.pi
#print Set.union_finset_finite_of_range_finite /-
@@ -1311,7 +1311,7 @@ theorem Finite.fin_param {s : Set α} (h : s.Finite) :
-/
#print Set.finite_option /-
-theorem finite_option {s : Set (Option α)} : s.Finite ↔ { x : α | some x ∈ s }.Finite :=
+theorem finite_option {s : Set (Option α)} : s.Finite ↔ {x : α | some x ∈ s}.Finite :=
⟨fun h => h.preimage_embedding Embedding.some, fun h =>
((h.image some).insert none).Subset fun x =>
Option.casesOn x (fun _ => Or.inl rfl) fun x hx => Or.inr <| mem_image_of_mem _ hx⟩
@@ -1344,8 +1344,7 @@ theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set
theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
(h : t ⊆ ⋃ i, s i) :
∃ I : Set ι,
- I.Finite ∧
- ∃ σ : { i | i ∈ I } → Set α, (∀ i, (σ i).Finite) ∧ (∀ i, σ i ⊆ s i) ∧ t = ⋃ i, σ i :=
+ I.Finite ∧ ∃ σ : {i | i ∈ I} → Set α, (∀ i, (σ i).Finite) ∧ (∀ i, σ i ⊆ s i) ∧ t = ⋃ i, σ i :=
let ⟨I, Ifin, hI⟩ := finite_subset_iUnion tfin h
⟨I, Ifin, fun x => s x ∩ t, fun i => tfin.Subset (inter_subset_right _ _), fun i =>
inter_subset_left _ _, by
@@ -1416,13 +1415,13 @@ theorem seq_of_forall_finite_exists {γ : Type _} {P : γ → Set γ → Prop}
Classical.choose <| h (range fun m : Iio n => ih m.1 m.2) (finite_range _),
fun n => by
classical
- refine' Nat.strongRecOn' n fun n ih => _
- rw [Nat.strongRecOn'_beta]
- convert Classical.choose_spec (h _ _)
- ext x
- constructor
- · rintro ⟨m, hmn, rfl⟩; exact ⟨⟨m, hmn⟩, rfl⟩
- · rintro ⟨⟨m, hmn⟩, rfl⟩; exact ⟨m, hmn, rfl⟩⟩
+ refine' Nat.strongRecOn' n fun n ih => _
+ rw [Nat.strongRecOn'_beta]
+ convert Classical.choose_spec (h _ _)
+ ext x
+ constructor
+ · rintro ⟨m, hmn, rfl⟩; exact ⟨⟨m, hmn⟩, rfl⟩
+ · rintro ⟨⟨m, hmn⟩, rfl⟩; exact ⟨m, hmn, rfl⟩⟩
#align set.seq_of_forall_finite_exists Set.seq_of_forall_finite_exists
-/
@@ -1527,8 +1526,8 @@ theorem Finite.card_toFinset {s : Set α} [Fintype s] (h : s.Finite) :
-/
#print Set.card_ne_eq /-
-theorem card_ne_eq [Fintype α] (a : α) [Fintype { x : α | x ≠ a }] :
- Fintype.card { x : α | x ≠ a } = Fintype.card α - 1 :=
+theorem card_ne_eq [Fintype α] (a : α) [Fintype {x : α | x ≠ a}] :
+ Fintype.card {x : α | x ≠ a} = Fintype.card α - 1 :=
by
haveI := Classical.decEq α
rw [← to_finset_card, to_finset_set_of, Finset.filter_ne',
@@ -1720,13 +1719,13 @@ theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinit
end Preorder
#print Set.finite_isTop /-
-theorem finite_isTop (α : Type _) [PartialOrder α] : { x : α | IsTop x }.Finite :=
+theorem finite_isTop (α : Type _) [PartialOrder α] : {x : α | IsTop x}.Finite :=
(subsingleton_isTop α).Finite
#align set.finite_is_top Set.finite_isTop
-/
#print Set.finite_isBot /-
-theorem finite_isBot (α : Type _) [PartialOrder α] : { x : α | IsBot x }.Finite :=
+theorem finite_isBot (α : Type _) [PartialOrder α] : {x : α | IsBot x}.Finite :=
(subsingleton_isBot α).Finite
#align set.finite_is_bot Set.finite_isBot
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -950,7 +950,7 @@ theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Fin
refine' Union_subset fun i x hx => _
by_cases hi : i ∈ t
· exact mem_bUnion hi hx
- · rw [he i hi, mem_empty_iff_false] at hx
+ · rw [he i hi, mem_empty_iff_false] at hx
contradiction
#align set.finite.Union Set.Finite.iUnion
@@ -1008,7 +1008,7 @@ theorem finite_range (f : ι → α) [Finite ι] : (range f).Finite :=
#print Set.Finite.dependent_image /-
theorem Finite.dependent_image {s : Set α} (hs : s.Finite) (F : ∀ i ∈ s, β) :
- { y : β | ∃ (x : _)(hx : x ∈ s), y = F x hx }.Finite := by cases hs;
+ { y : β | ∃ (x : _) (hx : x ∈ s), y = F x hx }.Finite := by cases hs;
simpa [range, eq_comm] using finite_range fun x : s => F x x.2
#align set.finite.dependent_image Set.Finite.dependent_image
-/
@@ -1297,14 +1297,14 @@ theorem Finite.toFinset_offDiag {s : Set α} [DecidableEq α] (hs : s.Finite) :
-/
#print Set.Finite.fin_embedding /-
-theorem Finite.fin_embedding {s : Set α} (h : s.Finite) : ∃ (n : ℕ)(f : Fin n ↪ α), range f = s :=
+theorem Finite.fin_embedding {s : Set α} (h : s.Finite) : ∃ (n : ℕ) (f : Fin n ↪ α), range f = s :=
⟨_, (Fintype.equivFin (h.toFinset : Set α)).symm.asEmbedding, by simp⟩
#align set.finite.fin_embedding Set.Finite.fin_embedding
-/
#print Set.Finite.fin_param /-
theorem Finite.fin_param {s : Set α} (h : s.Finite) :
- ∃ (n : ℕ)(f : Fin n → α), Injective f ∧ range f = s :=
+ ∃ (n : ℕ) (f : Fin n → α), Injective f ∧ range f = s :=
let ⟨n, f, hf⟩ := h.fin_embedding
⟨n, f, f.Injective, hf⟩
#align set.finite.fin_param Set.Finite.fin_param
@@ -1380,7 +1380,7 @@ theorem Finite.induction_on' {C : Set α → Prop} {S : Set α} (h : S.Finite) (
by
refine' @Set.Finite.induction_on α (fun s => s ⊆ S → C s) S h (fun _ => H0) _ subset.rfl
intro a s has hsf hCs haS
- rw [insert_subset] at haS
+ rw [insert_subset] at haS
exact H1 haS.1 haS.2 has (hCs haS.2)
#align set.finite.induction_on' Set.Finite.induction_on'
-/
@@ -1440,7 +1440,7 @@ theorem empty_card : Fintype.card (∅ : Set α) = 0 :=
#print Set.empty_card' /-
@[simp]
theorem empty_card' {h : Fintype.{u} (∅ : Set α)} : @Fintype.card (∅ : Set α) h = 0 :=
- Eq.trans (by congr ) empty_card
+ Eq.trans (by congr) empty_card
#align set.empty_card' Set.empty_card'
-/
@@ -1639,7 +1639,7 @@ theorem infinite_image2 (hfs : ∀ b ∈ t, InjOn (fun a => f a b) s) (hft : ∀
(image2 f s t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
by
refine' ⟨fun h => Set.infinite_prod.1 _, _⟩
- · rw [← image_uncurry_prod] at h
+ · rw [← image_uncurry_prod] at h
exact h.of_image _
· rintro (⟨hs, b, hb⟩ | ⟨ht, a, ha⟩)
· exact hs.image2_left hb (hfs _ hb)
@@ -1672,7 +1672,7 @@ theorem infinite_range_of_injective [Infinite α] {f : α → β} (hi : Injectiv
#print Set.infinite_of_injective_forall_mem /-
theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α → β} (hi : Injective f)
- (hf : ∀ x : α, f x ∈ s) : s.Infinite := by rw [← range_subset_iff] at hf;
+ (hf : ∀ x : α, f x ∈ s) : s.Infinite := by rw [← range_subset_iff] at hf ;
exact (infinite_range_of_injective hi).mono hf
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-/
@@ -1741,7 +1741,7 @@ theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : S
theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t : Set β} {f : α → β}
(hf : ∀ a, f a ∈ t) (ht : t.Finite) : ∃ a b, a < b ∧ f a = f b :=
by
- rw [← maps_univ_to] at hf
+ rw [← maps_univ_to] at hf
obtain ⟨a, -, b, -, h⟩ := (@infinite_univ α _).exists_lt_map_eq_of_mapsTo hf ht
exact ⟨a, b, h⟩
#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_mem
@@ -1795,7 +1795,7 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
refine' hs.induction_on _ _
· intro hf; simp [iSup_const]
· intro a s has hs ihs hf
- rw [ball_insert_iff] at hf
+ rw [ball_insert_iff] at hf
simp only [iInf_insert, ← ihs hf.2]
exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -621,9 +621,11 @@ end FintypeInstances
end Set
+#print Equiv.set_finite_iff /-
theorem Equiv.set_finite_iff {s : Set α} {t : Set β} (hst : s ≃ t) : s.Finite ↔ t.Finite := by
simp_rw [← Set.finite_coe_iff, hst.finite_iff]
#align equiv.set_finite_iff Equiv.set_finite_iff
+-/
/-! ### Finset -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -687,7 +687,7 @@ Some set instances do not appear here since they are consequences of others, for
namespace Finite.Set
-open Classical
+open scoped Classical
example {s : Set α} [Finite α] : Finite s :=
inferInstance
@@ -1717,13 +1717,17 @@ theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinit
end Preorder
+#print Set.finite_isTop /-
theorem finite_isTop (α : Type _) [PartialOrder α] : { x : α | IsTop x }.Finite :=
(subsingleton_isTop α).Finite
#align set.finite_is_top Set.finite_isTop
+-/
+#print Set.finite_isBot /-
theorem finite_isBot (α : Type _) [PartialOrder α] : { x : α | IsBot x }.Finite :=
(subsingleton_isBot α).Finite
#align set.finite_is_bot Set.finite_isBot
+-/
theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : Set β} {f : α → β}
(hs : s.Infinite) (hf : MapsTo f s t) (ht : t.Finite) : ∃ x ∈ s, ∃ y ∈ s, x < y ∧ f x = f y :=
@@ -1731,6 +1735,7 @@ theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : S
hxy.lt_or_lt.elim (fun hxy => ⟨x, hx, y, hy, hxy, hf⟩) fun hyx => ⟨y, hy, x, hx, hyx, hf.symm⟩
#align set.infinite.exists_lt_map_eq_of_maps_to Set.Infinite.exists_lt_map_eq_of_mapsTo
+#print Set.Finite.exists_lt_map_eq_of_forall_mem /-
theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t : Set β} {f : α → β}
(hf : ∀ a, f a ∈ t) (ht : t.Finite) : ∃ a b, a < b ∧ f a = f b :=
by
@@ -1738,6 +1743,7 @@ theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t
obtain ⟨a, -, b, -, h⟩ := (@infinite_univ α _).exists_lt_map_eq_of_mapsTo hf ht
exact ⟨a, b, h⟩
#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_mem
+-/
theorem exists_min_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.Finite) :
s.Nonempty → ∃ a ∈ s, ∀ b ∈ s, f a ≤ f b
@@ -1753,6 +1759,7 @@ theorem exists_max_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.F
h1.to_finset.exists_max_image f ⟨x, h1.mem_to_finset.2 hx⟩
#align set.exists_max_image Set.exists_max_image
+#print Set.exists_lower_bound_image /-
theorem exists_lower_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set α) (f : α → β)
(h : s.Finite) : ∃ a : α, ∀ b ∈ s, f a ≤ f b :=
by
@@ -1763,7 +1770,9 @@ theorem exists_lower_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
⟨x₀, fun x hx => hx₀ x hx⟩
· exact Nonempty.elim hα fun a => ⟨a, fun x hx => absurd (Set.nonempty_of_mem hx) hs⟩
#align set.exists_lower_bound_image Set.exists_lower_bound_image
+-/
+#print Set.exists_upper_bound_image /-
theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set α) (f : α → β)
(h : s.Finite) : ∃ a : α, ∀ b ∈ s, f b ≤ f a :=
by
@@ -1774,6 +1783,7 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
⟨x₀, fun x hx => hx₀ x hx⟩
· exact Nonempty.elim hα fun a => ⟨a, fun x hx => absurd (Set.nonempty_of_mem hx) hs⟩
#align set.exists_upper_bound_image Set.exists_upper_bound_image
+-/
theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -1980,6 +1990,7 @@ end Finset
variable [LinearOrder α]
+#print Finite.of_forall_not_lt_lt /-
/-- If a linear order does not contain any triple of elements `x < y < z`, then this type
is finite. -/
theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z → False) : Finite α :=
@@ -1989,13 +2000,16 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
refine' @Finite.of_fintype α ⟨{x, y}, fun z => _⟩
simpa [hne] using eq_or_eq_or_eq_of_forall_not_lt_lt h z x y
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
+#print Set.finite_of_forall_not_lt_lt /-
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
(h : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s) (z) (_ : z ∈ s), x < y → y < z → False) : Set.Finite s :=
@Set.toFinite _ s <| Finite.of_forall_not_lt_lt <| by simpa only [SetCoe.forall'] using h
#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
+-/
theorem Set.finite_diff_iUnion_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
Set.finite_of_forall_not_lt_lt fun x hx y hy z hz hxy hyz =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -231,12 +231,6 @@ theorem toFinset_subset {t : Finset α} : hs.toFinset ⊆ t ↔ s ⊆ t := by
#align set.finite.to_finset_subset Set.Finite.toFinset_subset
-/
-/- warning: set.finite.to_finset_ssubset -> Set.Finite.toFinset_ssubset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {hs : Set.Finite.{u1} α s} {t : Finset.{u1} α}, Iff (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.hasSsubset.{u1} α) (Set.Finite.toFinset.{u1} α s hs) t) (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.hasSsubset.{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}} {s : Set.{u1} α} {hs : Set.Finite.{u1} α s} {t : Finset.{u1} α}, Iff (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.instHasSSubsetFinset.{u1} α) (Set.Finite.toFinset.{u1} α s hs) t) (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.instHasSSubsetSet.{u1} α) s (Finset.toSet.{u1} α t))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_ssubset Set.Finite.toFinset_ssubsetₓ'. -/
@[simp]
theorem toFinset_ssubset {t : Finset α} : hs.toFinset ⊂ t ↔ s ⊂ t := by
rw [← Finset.coe_ssubset, finite.coe_to_finset]
@@ -249,12 +243,6 @@ theorem subset_toFinset {s : Finset α} : s ⊆ ht.toFinset ↔ ↑s ⊆ t := by
#align set.finite.subset_to_finset Set.Finite.subset_toFinset
-/
-/- warning: set.finite.ssubset_to_finset -> Set.Finite.ssubset_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {t : Set.{u1} α} {ht : Set.Finite.{u1} α t} {s : Finset.{u1} α}, Iff (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.hasSsubset.{u1} α) s (Set.Finite.toFinset.{u1} α t ht)) (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.hasSsubset.{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) t)
-but is expected to have type
- forall {α : Type.{u1}} {t : Set.{u1} α} {ht : Set.Finite.{u1} α t} {s : Finset.{u1} α}, Iff (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.instHasSSubsetFinset.{u1} α) s (Set.Finite.toFinset.{u1} α t ht)) (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.instHasSSubsetSet.{u1} α) (Finset.toSet.{u1} α s) t)
-Case conversion may be inaccurate. Consider using '#align set.finite.ssubset_to_finset Set.Finite.ssubset_toFinsetₓ'. -/
@[simp]
theorem ssubset_toFinset {s : Finset α} : s ⊂ ht.toFinset ↔ ↑s ⊂ t := by
rw [← Finset.coe_ssubset, finite.coe_to_finset]
@@ -267,12 +255,6 @@ protected theorem toFinset_subset_toFinset : hs.toFinset ⊆ ht.toFinset ↔ s
#align set.finite.to_finset_subset_to_finset Set.Finite.toFinset_subset_toFinset
-/
-/- warning: set.finite.to_finset_ssubset_to_finset -> Set.Finite.toFinset_ssubset_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} {hs : Set.Finite.{u1} α s} {ht : Set.Finite.{u1} α t}, Iff (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.hasSsubset.{u1} α) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht)) (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.hasSsubset.{u1} α) s t)
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} {hs : Set.Finite.{u1} α s} {ht : Set.Finite.{u1} α t}, Iff (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.instHasSSubsetFinset.{u1} α) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht)) (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.instHasSSubsetSet.{u1} α) s t)
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_ssubset_to_finset Set.Finite.toFinset_ssubset_toFinsetₓ'. -/
@[mono]
protected theorem toFinset_ssubset_toFinset : hs.toFinset ⊂ ht.toFinset ↔ s ⊂ t := by
simp only [← Finset.coe_ssubset, finite.coe_to_finset]
@@ -281,12 +263,6 @@ protected theorem toFinset_ssubset_toFinset : hs.toFinset ⊂ ht.toFinset ↔ s
alias finite.to_finset_subset_to_finset ↔ _ to_finset_mono
#align set.finite.to_finset_mono Set.Finite.toFinset_mono
-/- warning: set.finite.to_finset_strict_mono -> Set.Finite.toFinset_strictMono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} {hs : Set.Finite.{u1} α s} {ht : Set.Finite.{u1} α t}, (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.hasSsubset.{u1} α) s t) -> (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.hasSsubset.{u1} α) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} {hs : Set.Finite.{u1} α s} {ht : Set.Finite.{u1} α t}, (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.instHasSSubsetSet.{u1} α) s t) -> (HasSSubset.SSubset.{u1} (Finset.{u1} α) (Finset.instHasSSubsetFinset.{u1} α) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_strict_mono Set.Finite.toFinset_strictMonoₓ'. -/
alias finite.to_finset_ssubset_to_finset ↔ _ to_finset_strict_mono
#align set.finite.to_finset_strict_mono Set.Finite.toFinset_strictMono
@@ -299,65 +275,29 @@ protected theorem toFinset_setOf [Fintype α] (p : α → Prop) [DecidablePred p
#align set.finite.to_finset_set_of Set.Finite.toFinset_setOf
-/
-/- warning: set.finite.disjoint_to_finset -> Set.Finite.disjoint_toFinset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} {hs : Set.Finite.{u1} α s} {ht : Set.Finite.{u1} α t}, Iff (Disjoint.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α) (Finset.orderBot.{u1} α) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht)) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t)
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} {hs : Set.Finite.{u1} α s} {ht : Set.Finite.{u1} α t}, Iff (Disjoint.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht)) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t)
-Case conversion may be inaccurate. Consider using '#align set.finite.disjoint_to_finset Set.Finite.disjoint_toFinsetₓ'. -/
@[simp]
theorem disjoint_toFinset {hs : s.Finite} {ht : t.Finite} :
Disjoint hs.toFinset ht.toFinset ↔ Disjoint s t :=
@disjoint_toFinset _ _ _ hs.Fintype ht.Fintype
#align set.finite.disjoint_to_finset Set.Finite.disjoint_toFinset
-/- warning: set.finite.to_finset_inter -> Set.Finite.toFinset_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) h) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t) h) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_inter Set.Finite.toFinset_interₓ'. -/
protected theorem toFinset_inter [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∩ t).Finite) : h.toFinset = hs.toFinset ∩ ht.toFinset := by ext; simp
#align set.finite.to_finset_inter Set.Finite.toFinset_inter
-/- warning: set.finite.to_finset_union -> Set.Finite.toFinset_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t) h) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t) h) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_union Set.Finite.toFinset_unionₓ'. -/
protected theorem toFinset_union [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∪ t).Finite) : h.toFinset = hs.toFinset ∪ ht.toFinset := by ext; simp
#align set.finite.to_finset_union Set.Finite.toFinset_union
-/- warning: set.finite.to_finset_diff -> Set.Finite.toFinset_diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t) h) (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.hasSdiff.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t) h) (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_diff Set.Finite.toFinset_diffₓ'. -/
protected theorem toFinset_diff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s \ t).Finite) : h.toFinset = hs.toFinset \ ht.toFinset := by ext; simp
#align set.finite.to_finset_diff Set.Finite.toFinset_diff
-/- warning: set.finite.to_finset_symm_diff -> Set.Finite.toFinset_symmDiff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t) h) (symmDiff.{u1} (Finset.{u1} α) (SemilatticeSup.toHasSup.{u1} (Finset.{u1} α) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)))) (Finset.hasSdiff.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t) h) (symmDiff.{u1} (Finset.{u1} α) (SemilatticeSup.toSup.{u1} (Finset.{u1} α) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_symm_diff Set.Finite.toFinset_symmDiffₓ'. -/
protected theorem toFinset_symmDiff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∆ t).Finite) : h.toFinset = hs.toFinset ∆ ht.toFinset := by ext;
simp [mem_symm_diff, Finset.mem_symmDiff]
#align set.finite.to_finset_symm_diff Set.Finite.toFinset_symmDiff
-/- warning: set.finite.to_finset_compl -> Set.Finite.toFinset_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} α] (hs : Set.Finite.{u1} α s) (h : Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) h) (HasCompl.compl.{u1} (Finset.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} α) (Finset.booleanAlgebra.{u1} α _inst_2 (fun (a : α) (b : α) => _inst_1 a b))) (Set.Finite.toFinset.{u1} α s hs))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} α] (hs : Set.Finite.{u1} α s) (h : Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) h) (HasCompl.compl.{u1} (Finset.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} α) (Finset.booleanAlgebra.{u1} α _inst_2 (fun (a : α) (b : α) => _inst_1 a b))) (Set.Finite.toFinset.{u1} α s hs))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_compl Set.Finite.toFinset_complₓ'. -/
protected theorem toFinset_compl [DecidableEq α] [Fintype α] (hs : s.Finite) (h : sᶜ.Finite) :
h.toFinset = hs.toFinsetᶜ := by ext; simp
#align set.finite.to_finset_compl Set.Finite.toFinset_compl
@@ -426,12 +366,6 @@ noncomputable def fintypeOfFiniteUniv (H : (univ : Set α).Finite) : Fintype α
#align set.fintype_of_finite_univ Set.fintypeOfFiniteUniv
-/
-/- warning: set.fintype_union -> Set.fintypeUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Set.{u1} α) (t : Set.{u1} α) [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Set.{u1} α) (t : Set.{u1} α) [_inst_2 : Fintype.{u1} (Set.Elem.{u1} α s)] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} α t)], Fintype.{u1} (Set.Elem.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.fintype_union Set.fintypeUnionₓ'. -/
instance fintypeUnion [DecidableEq α] (s t : Set α) [Fintype s] [Fintype t] :
Fintype (s ∪ t : Set α) :=
Fintype.ofFinset (s.toFinset ∪ t.toFinset) <| by simp
@@ -444,35 +378,17 @@ instance fintypeSep (s : Set α) (p : α → Prop) [Fintype s] [DecidablePred p]
#align set.fintype_sep Set.fintypeSep
-/
-/- warning: set.fintype_inter -> Set.fintypeInter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} α s)] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} α t)], Fintype.{u1} (Set.Elem.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.fintype_inter Set.fintypeInterₓ'. -/
instance fintypeInter (s t : Set α) [DecidableEq α] [Fintype s] [Fintype t] :
Fintype (s ∩ t : Set α) :=
Fintype.ofFinset (s.toFinset ∩ t.toFinset) <| by simp
#align set.fintype_inter Set.fintypeInter
-/- warning: set.fintype_inter_of_left -> Set.fintypeInterOfLeft is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_2 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x t)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} α s)] [_inst_2 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x t)], Fintype.{u1} (Set.Elem.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.fintype_inter_of_left Set.fintypeInterOfLeftₓ'. -/
/-- A `fintype` instance for set intersection where the left set has a `fintype` instance. -/
instance fintypeInterOfLeft (s t : Set α) [Fintype s] [DecidablePred (· ∈ t)] :
Fintype (s ∩ t : Set α) :=
Fintype.ofFinset (s.toFinset.filterₓ (· ∈ t)) <| by simp
#align set.fintype_inter_of_left Set.fintypeInterOfLeft
-/- warning: set.fintype_inter_of_right -> Set.fintypeInterOfRight is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t)] [_inst_2 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x s)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} α t)] [_inst_2 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x s)], Fintype.{u1} (Set.Elem.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.fintype_inter_of_right Set.fintypeInterOfRightₓ'. -/
/-- A `fintype` instance for set intersection where the right set has a `fintype` instance. -/
instance fintypeInterOfRight (s t : Set α) [Fintype t] [DecidablePred (· ∈ s)] :
Fintype (s ∩ t : Set α) :=
@@ -486,23 +402,11 @@ def fintypeSubset (s : Set α) {t : Set α} [Fintype s] [DecidablePred (· ∈ t
#align set.fintype_subset Set.fintypeSubset
-/
-/- warning: set.fintype_diff -> Set.fintypeDiff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Set.{u1} α) (t : Set.{u1} α) [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Set.{u1} α) (t : Set.{u1} α) [_inst_2 : Fintype.{u1} (Set.Elem.{u1} α s)] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} α t)], Fintype.{u1} (Set.Elem.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.fintype_diff Set.fintypeDiffₓ'. -/
instance fintypeDiff [DecidableEq α] (s t : Set α) [Fintype s] [Fintype t] :
Fintype (s \ t : Set α) :=
Fintype.ofFinset (s.toFinset \ t.toFinset) <| by simp
#align set.fintype_diff Set.fintypeDiff
-/- warning: set.fintype_diff_left -> Set.fintypeDiffLeft is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_2 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x t)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} α s)] [_inst_2 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x t)], Fintype.{u1} (Set.Elem.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.fintype_diff_left Set.fintypeDiffLeftₓ'. -/
instance fintypeDiffLeft (s t : Set α) [Fintype s] [DecidablePred (· ∈ t)] :
Fintype (s \ t : Set α) :=
Set.fintypeSep s (· ∈ tᶜ)
@@ -794,12 +698,6 @@ example : Finite (∅ : Set α) :=
example (a : α) : Finite ({a} : Set α) :=
inferInstance
-/- warning: finite.set.finite_union -> Finite.Set.finite_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_2 : Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t)], Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} α s)] [_inst_2 : Finite.{succ u1} (Set.Elem.{u1} α t)], Finite.{succ u1} (Set.Elem.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align finite.set.finite_union Finite.Set.finite_unionₓ'. -/
instance finite_union (s t : Set α) [Finite s] [Finite t] : Finite (s ∪ t : Set α) := by
cases nonempty_fintype s; cases nonempty_fintype t; infer_instance
#align finite.set.finite_union Finite.Set.finite_union
@@ -816,32 +714,14 @@ protected theorem subset (s : Set α) {t : Set α} [Finite s] (h : t ⊆ s) : Fi
#align finite.set.subset Finite.Set.subset
-/
-/- warning: finite.set.finite_inter_of_right -> Finite.Set.finite_inter_of_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t)], Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} α t)], Finite.{succ u1} (Set.Elem.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align finite.set.finite_inter_of_right Finite.Set.finite_inter_of_rightₓ'. -/
instance finite_inter_of_right (s t : Set α) [Finite t] : Finite (s ∩ t : Set α) :=
Finite.Set.subset t (inter_subset_right s t)
#align finite.set.finite_inter_of_right Finite.Set.finite_inter_of_right
-/- warning: finite.set.finite_inter_of_left -> Finite.Set.finite_inter_of_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)], Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} α s)], Finite.{succ u1} (Set.Elem.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align finite.set.finite_inter_of_left Finite.Set.finite_inter_of_leftₓ'. -/
instance finite_inter_of_left (s t : Set α) [Finite s] : Finite (s ∩ t : Set α) :=
Finite.Set.subset s (inter_subset_left s t)
#align finite.set.finite_inter_of_left Finite.Set.finite_inter_of_left
-/- warning: finite.set.finite_diff -> Finite.Set.finite_diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)], Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t))
-but is expected to have type
- forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} α s)], Finite.{succ u1} (Set.Elem.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align finite.set.finite_diff Finite.Set.finite_diffₓ'. -/
instance finite_diff (s t : Set α) [Finite s] : Finite (s \ t : Set α) :=
Finite.Set.subset s (diff_subset s t)
#align finite.set.finite_diff Finite.Set.finite_diff
@@ -866,12 +746,6 @@ instance finite_sUnion {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t :
#align finite.set.finite_sUnion Finite.Set.finite_sUnion
-/
-/- warning: finite.set.finite_bUnion -> Finite.Set.finite_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : Set.{u2} ι) [_inst_1 : Finite.{succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) s)] (t : ι -> (Set.{u1} α)), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (t i)))) -> (Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Set.iUnion.{u1, succ u2} α ι (fun (x : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x s) => t x)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} (s : Set.{u1} ι) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} ι s)] (t : ι -> (Set.{u2} α)), (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Finite.{succ u2} (Set.Elem.{u2} α (t i)))) -> (Finite.{succ u2} (Set.Elem.{u2} α (Set.iUnion.{u2, succ u1} α ι (fun (x : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x s) => t x)))))
-Case conversion may be inaccurate. Consider using '#align finite.set.finite_bUnion Finite.Set.finite_biUnionₓ'. -/
theorem finite_biUnion {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
(H : ∀ i ∈ s, Finite (t i)) : Finite (⋃ x ∈ s, t x) :=
by
@@ -983,32 +857,14 @@ theorem finite_univ_iff : (@univ α).Finite ↔ Finite α :=
alias finite_univ_iff ↔ _root_.finite.of_finite_univ _
#align finite.of_finite_univ Finite.of_finite_univ
-/- warning: set.finite.union -> Set.Finite.union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.finite.union Set.Finite.unionₓ'. -/
theorem Finite.union {s t : Set α} (hs : s.Finite) (ht : t.Finite) : (s ∪ t).Finite := by cases hs;
cases ht; apply to_finite
#align set.finite.union Set.Finite.union
-/- warning: set.finite.finite_of_compl -> Set.Finite.finite_of_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s)) -> (Finite.{succ u1} α)
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)) -> (Finite.{succ u1} α)
-Case conversion may be inaccurate. Consider using '#align set.finite.finite_of_compl Set.Finite.finite_of_complₓ'. -/
theorem Finite.finite_of_compl {s : Set α} (hs : s.Finite) (hsc : sᶜ.Finite) : Finite α := by
rw [← finite_univ_iff, ← union_compl_self s]; exact hs.union hsc
#align set.finite.finite_of_compl Set.Finite.finite_of_compl
-/- warning: set.finite.sup -> Set.Finite.sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (Sup.sup.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) s t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (Sup.sup.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) s t))
-Case conversion may be inaccurate. Consider using '#align set.finite.sup Set.Finite.supₓ'. -/
theorem Finite.sup {s t : Set α} : s.Finite → t.Finite → (s ⊔ t).Finite :=
Finite.union
#align set.finite.sup Set.Finite.sup
@@ -1019,42 +875,18 @@ theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : { a ∈ s |
#align set.finite.sep Set.Finite.sep
-/
-/- warning: set.finite.inter_of_left -> Set.Finite.inter_of_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.finite.inter_of_left Set.Finite.inter_of_leftₓ'. -/
theorem Finite.inter_of_left {s : Set α} (hs : s.Finite) (t : Set α) : (s ∩ t).Finite := by
cases hs; apply to_finite
#align set.finite.inter_of_left Set.Finite.inter_of_left
-/- warning: set.finite.inter_of_right -> Set.Finite.inter_of_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) t s))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) t s))
-Case conversion may be inaccurate. Consider using '#align set.finite.inter_of_right Set.Finite.inter_of_rightₓ'. -/
theorem Finite.inter_of_right {s : Set α} (hs : s.Finite) (t : Set α) : (t ∩ s).Finite := by
cases hs; apply to_finite
#align set.finite.inter_of_right Set.Finite.inter_of_right
-/- warning: set.finite.inf_of_left -> Set.Finite.inf_of_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (SemilatticeInf.toHasInf.{u1} (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) s t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (Lattice.toInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t))
-Case conversion may be inaccurate. Consider using '#align set.finite.inf_of_left Set.Finite.inf_of_leftₓ'. -/
theorem Finite.inf_of_left {s : Set α} (h : s.Finite) (t : Set α) : (s ⊓ t).Finite :=
h.inter_of_left t
#align set.finite.inf_of_left Set.Finite.inf_of_left
-/- warning: set.finite.inf_of_right -> Set.Finite.inf_of_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (SemilatticeInf.toHasInf.{u1} (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) t s))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (Lattice.toInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) t s))
-Case conversion may be inaccurate. Consider using '#align set.finite.inf_of_right Set.Finite.inf_of_rightₓ'. -/
theorem Finite.inf_of_right {s : Set α} (h : s.Finite) (t : Set α) : (t ⊓ s).Finite :=
h.inter_of_right t
#align set.finite.inf_of_right Set.Finite.inf_of_right
@@ -1065,22 +897,10 @@ theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) :
#align set.finite.subset Set.Finite.subset
-/
-/- warning: set.finite.diff -> Set.Finite.diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.finite.diff Set.Finite.diffₓ'. -/
theorem Finite.diff {s : Set α} (hs : s.Finite) (t : Set α) : (s \ t).Finite := by cases hs;
apply to_finite
#align set.finite.diff Set.Finite.diff
-/- warning: set.finite.of_diff -> Set.Finite.of_diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t)) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t)) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align set.finite.of_diff Set.Finite.of_diffₓ'. -/
theorem Finite.of_diff {s t : Set α} (hd : (s \ t).Finite) (ht : t.Finite) : s.Finite :=
(hd.union ht).Subset <| subset_diff_union _ _
#align set.finite.of_diff Set.Finite.of_diff
@@ -1097,12 +917,6 @@ theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.F
#align set.finite.sUnion Set.Finite.sUnion
-/
-/- warning: set.finite.bUnion -> Set.Finite.biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {s : Set.{u2} ι}, (Set.Finite.{u2} ι s) -> (forall {t : ι -> (Set.{u1} α)}, (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Set.Finite.{u1} α (t i))) -> (Set.Finite.{u1} α (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) => t i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {t : ι -> (Set.{u2} α)}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Set.Finite.{u2} α (t i))) -> (Set.Finite.{u2} α (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) => t i)))))
-Case conversion may be inaccurate. Consider using '#align set.finite.bUnion Set.Finite.biUnionₓ'. -/
theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
(ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
classical
@@ -1111,12 +925,6 @@ theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
apply to_finite
#align set.finite.bUnion Set.Finite.biUnion
-/- warning: set.finite.bUnion' -> Set.Finite.biUnion' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {s : Set.{u2} ι}, (Set.Finite.{u2} ι s) -> (forall {t : forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Set.{u1} α)}, (forall (i : ι) (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s), Set.Finite.{u1} α (t i H)) -> (Set.Finite.{u1} α (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) => t i H)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {t : forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Set.{u2} α)}, (forall (i : ι) (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s), Set.Finite.{u2} α (t i H)) -> (Set.Finite.{u2} α (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) => t i H)))))
-Case conversion may be inaccurate. Consider using '#align set.finite.bUnion' Set.Finite.biUnion'ₓ'. -/
/-- Dependent version of `finite.bUnion`. -/
theorem Finite.biUnion' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
(ht : ∀ i ∈ s, (t i ‹_›).Finite) : (⋃ i ∈ s, t i ‹_›).Finite := by cases hs;
@@ -1388,12 +1196,6 @@ theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : { b |
#align set.finite.finite_subsets Set.Finite.finite_subsets
-/
-/- warning: set.finite.pi -> Set.Finite.pi is a dubious translation:
-lean 3 declaration is
- forall {δ : Type.{u1}} [_inst_1 : Finite.{succ u1} δ] {κ : δ -> Type.{u2}} {t : forall (d : δ), Set.{u2} (κ d)}, (forall (d : δ), Set.Finite.{u2} (κ d) (t d)) -> (Set.Finite.{max u1 u2} (forall (i : δ), κ i) (Set.pi.{u1, u2} δ (fun (d : δ) => κ d) (Set.univ.{u1} δ) t))
-but is expected to have type
- forall {δ : Type.{u2}} [_inst_1 : Finite.{succ u2} δ] {κ : δ -> Type.{u1}} {t : forall (d : δ), Set.{u1} (κ d)}, (forall (d : δ), Set.Finite.{u1} (κ d) (t d)) -> (Set.Finite.{max u2 u1} (forall (i : δ), κ i) (Set.pi.{u2, u1} δ (fun (d : δ) => κ d) (Set.univ.{u2} δ) t))
-Case conversion may be inaccurate. Consider using '#align set.finite.pi Set.Finite.piₓ'. -/
/-- Finite product of finite sets is finite -/
theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set (κ d)}
(ht : ∀ d, (t d).Finite) : (pi univ t).Finite :=
@@ -1436,12 +1238,6 @@ instance Finite.inhabited : Inhabited { s : Set α // s.Finite } :=
#align set.finite.inhabited Set.Finite.inhabited
-/
-/- warning: set.finite_union -> Set.finite_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)) (And (Set.Finite.{u1} α s) (Set.Finite.{u1} α t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)) (And (Set.Finite.{u1} α s) (Set.Finite.{u1} α t))
-Case conversion may be inaccurate. Consider using '#align set.finite_union Set.finite_unionₓ'. -/
@[simp]
theorem finite_union {s t : Set α} : (s ∪ t).Finite ↔ s.Finite ∧ t.Finite :=
⟨fun h => ⟨h.Subset (subset_union_left _ _), h.Subset (subset_union_right _ _)⟩, fun ⟨hs, ht⟩ =>
@@ -1528,23 +1324,11 @@ theorem finite_image_fst_and_snd_iff {s : Set (α × β)} :
#align set.finite_image_fst_and_snd_iff Set.finite_image_fst_and_snd_iff
-/
-/- warning: set.forall_finite_image_eval_iff -> Set.forall_finite_image_eval_iff is a dubious translation:
-lean 3 declaration is
- forall {δ : Type.{u1}} [_inst_1 : Finite.{succ u1} δ] {κ : δ -> Type.{u2}} {s : Set.{max u1 u2} (forall (d : δ), κ d)}, Iff (forall (d : δ), Set.Finite.{u2} (κ d) (Set.image.{max u1 u2, u2} (forall (x : δ), κ x) (κ d) (Function.eval.{succ u1, succ u2} δ (fun (d : δ) => κ d) d) s)) (Set.Finite.{max u1 u2} (forall (d : δ), κ d) s)
-but is expected to have type
- forall {δ : Type.{u2}} [_inst_1 : Finite.{succ u2} δ] {κ : δ -> Type.{u1}} {s : Set.{max u2 u1} (forall (d : δ), κ d)}, Iff (forall (d : δ), Set.Finite.{u1} (κ d) (Set.image.{max u2 u1, u1} (forall (x : δ), κ x) (κ d) (Function.eval.{succ u2, succ u1} δ (fun (d : δ) => κ d) d) s)) (Set.Finite.{max u2 u1} (forall (d : δ), κ d) s)
-Case conversion may be inaccurate. Consider using '#align set.forall_finite_image_eval_iff Set.forall_finite_image_eval_iffₓ'. -/
theorem forall_finite_image_eval_iff {δ : Type _} [Finite δ] {κ : δ → Type _} {s : Set (∀ d, κ d)} :
(∀ d, (eval d '' s).Finite) ↔ s.Finite :=
⟨fun h => (Finite.pi h).Subset <| subset_pi_eval_image _ _, fun h d => h.image _⟩
#align set.forall_finite_image_eval_iff Set.forall_finite_image_eval_iff
-/- warning: set.finite_subset_Union -> Set.finite_subset_iUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall {ι : Type.{u2}} {t : ι -> (Set.{u1} α)}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => t i))) -> (Exists.{succ u2} (Set.{u2} ι) (fun (I : Set.{u2} ι) => And (Set.Finite.{u2} ι I) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I) => t i)))))))
-but is expected to have type
- forall {α : Type.{u2}} {s : Set.{u2} α}, (Set.Finite.{u2} α s) -> (forall {ι : Type.{u1}} {t : ι -> (Set.{u2} α)}, (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => t i))) -> (Exists.{succ u1} (Set.{u1} ι) (fun (I : Set.{u1} ι) => And (Set.Finite.{u1} ι I) (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I) => t i)))))))
-Case conversion may be inaccurate. Consider using '#align set.finite_subset_Union Set.finite_subset_iUnionₓ'. -/
theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set α} (h : s ⊆ ⋃ i, t i) :
∃ I : Set ι, I.Finite ∧ s ⊆ ⋃ i ∈ I, t i :=
by
@@ -1555,9 +1339,6 @@ theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set
exact ⟨⟨x, hx⟩, hf _⟩
#align set.finite_subset_Union Set.finite_subset_iUnion
-/- warning: set.eq_finite_Union_of_finite_subset_Union -> Set.eq_finite_iUnion_of_finite_subset_iUnion is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_iUnion_of_finite_subset_iUnionₓ'. -/
theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
(h : t ⊆ ⋃ i, s i) :
∃ I : Set ι,
@@ -1704,12 +1485,6 @@ theorem card_singleton (a : α) : Fintype.card ({a} : Set α) = 1 :=
#align set.card_singleton Set.card_singleton
-/
-/- warning: set.card_lt_card -> Set.card_lt_card is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t)], (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.hasSsubset.{u1} α) s t) -> (LT.lt.{0} Nat Nat.hasLt (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) _inst_1) (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) t) _inst_2))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} α s)] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} α t)], (HasSSubset.SSubset.{u1} (Set.{u1} α) (Set.instHasSSubsetSet.{u1} α) s t) -> (LT.lt.{0} Nat instLTNat (Fintype.card.{u1} (Set.Elem.{u1} α s) _inst_1) (Fintype.card.{u1} (Set.Elem.{u1} α t) _inst_2))
-Case conversion may be inaccurate. Consider using '#align set.card_lt_card Set.card_lt_cardₓ'. -/
theorem card_lt_card {s t : Set α} [Fintype s] [Fintype t] (h : s ⊂ t) :
Fintype.card s < Fintype.card t :=
Fintype.card_lt_of_injective_not_surjective (Set.inclusion h.1) (Set.inclusion_injective h.1)
@@ -1798,22 +1573,10 @@ theorem Infinite.exists_subset_card_eq {s : Set α} (hs : s.Infinite) (n : ℕ)
#align set.infinite.exists_subset_card_eq Set.Infinite.exists_subset_card_eq
-/
-/- warning: set.infinite_of_finite_compl -> Set.infinite_of_finite_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Infinite.{succ u1} α] {s : Set.{u1} α}, (Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s)) -> (Set.Infinite.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Infinite.{succ u1} α] {s : Set.{u1} α}, (Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)) -> (Set.Infinite.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align set.infinite_of_finite_compl Set.infinite_of_finite_complₓ'. -/
theorem infinite_of_finite_compl [Infinite α] {s : Set α} (hs : sᶜ.Finite) : s.Infinite := fun h =>
Set.infinite_univ (by simpa using hs.union h)
#align set.infinite_of_finite_compl Set.infinite_of_finite_compl
-/- warning: set.finite.infinite_compl -> Set.Finite.infinite_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Infinite.{succ u1} α] {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Infinite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Infinite.{succ u1} α] {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Infinite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s))
-Case conversion may be inaccurate. Consider using '#align set.finite.infinite_compl Set.Finite.infinite_complₓ'. -/
theorem Finite.infinite_compl [Infinite α] {s : Set α} (hs : s.Finite) : sᶜ.Infinite := fun h =>
Set.infinite_univ (by simpa using hs.union h)
#align set.finite.infinite_compl Set.Finite.infinite_compl
@@ -1824,22 +1587,10 @@ protected theorem Infinite.mono {s t : Set α} (h : s ⊆ t) : s.Infinite → t.
#align set.infinite.mono Set.Infinite.mono
-/
-/- warning: set.infinite.diff -> Set.Infinite.diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Infinite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Infinite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Infinite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Infinite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align set.infinite.diff Set.Infinite.diffₓ'. -/
theorem Infinite.diff {s t : Set α} (hs : s.Infinite) (ht : t.Finite) : (s \ t).Infinite := fun h =>
hs <| h.of_diff ht
#align set.infinite.diff Set.Infinite.diff
-/- warning: set.infinite_union -> Set.infinite_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Set.Infinite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)) (Or (Set.Infinite.{u1} α s) (Set.Infinite.{u1} α t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Set.Infinite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)) (Or (Set.Infinite.{u1} α s) (Set.Infinite.{u1} α t))
-Case conversion may be inaccurate. Consider using '#align set.infinite_union Set.infinite_unionₓ'. -/
@[simp]
theorem infinite_union {s t : Set α} : (s ∪ t).Infinite ↔ s.Infinite ∨ t.Infinite := by
simp only [Set.Infinite, finite_union, not_and_or]
@@ -1903,12 +1654,6 @@ theorem infinite_of_injOn_mapsTo {s : Set α} {t : Set β} {f : α → β} (hi :
#align set.infinite_of_inj_on_maps_to Set.infinite_of_injOn_mapsTo
-/
-/- warning: set.infinite.exists_ne_map_eq_of_maps_to -> Set.Infinite.exists_ne_map_eq_of_mapsTo is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {s : Set.{u1} α} {t : Set.{u2} β} {f : α -> β}, (Set.Infinite.{u1} α s) -> (Set.MapsTo.{u1, u2} α β f s t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (x : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => And (Ne.{succ u1} α x y) (Eq.{succ u2} β (f x) (f y)))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {s : Set.{u1} α} {t : Set.{u2} β} {f : α -> β}, (Set.Infinite.{u1} α s) -> (Set.MapsTo.{u1, u2} α β f s t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (And (Ne.{succ u1} α x y) (Eq.{succ u2} β (f x) (f y)))))))
-Case conversion may be inaccurate. Consider using '#align set.infinite.exists_ne_map_eq_of_maps_to Set.Infinite.exists_ne_map_eq_of_mapsToₓ'. -/
theorem Infinite.exists_ne_map_eq_of_mapsTo {s : Set α} {t : Set β} {f : α → β} (hs : s.Infinite)
(hf : MapsTo f s t) (ht : t.Finite) : ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ f x = f y :=
by
@@ -1930,12 +1675,6 @@ theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α →
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-/
-/- warning: set.infinite.exists_not_mem_finset -> Set.Infinite.exists_not_mem_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Infinite.{u1} α s) -> (forall (f : Finset.{u1} α), Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a f))))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Infinite.{u1} α s) -> (forall (f : Finset.{u1} α), Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a f))))
-Case conversion may be inaccurate. Consider using '#align set.infinite.exists_not_mem_finset Set.Infinite.exists_not_mem_finsetₓ'. -/
theorem Infinite.exists_not_mem_finset {s : Set α} (hs : s.Infinite) (f : Finset α) :
∃ a ∈ s, a ∉ f :=
let ⟨a, has, haf⟩ := (hs.diffₓ (toFinite f)).Nonempty
@@ -1963,12 +1702,6 @@ section Preorder
variable [Preorder α] [Nonempty α] {s : Set α}
-/- warning: set.infinite_of_forall_exists_gt -> Set.infinite_of_forall_exists_gt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α _inst_1) a b))) -> (Set.Infinite.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) (LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) a b))) -> (Set.Infinite.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gtₓ'. -/
theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinite :=
by
inhabit α
@@ -1978,56 +1711,26 @@ theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinit
exact (h _).choose_spec.choose_spec
#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gt
-/- warning: set.infinite_of_forall_exists_lt -> Set.infinite_of_forall_exists_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α _inst_1) b a))) -> (Set.Infinite.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) (LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) b a))) -> (Set.Infinite.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_ltₓ'. -/
theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinite :=
@infinite_of_forall_exists_gt αᵒᵈ _ _ _ h
#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_lt
end Preorder
-/- warning: set.finite_is_top -> Set.finite_isTop is a dubious translation:
-lean 3 declaration is
- forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
-but is expected to have type
- forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
-Case conversion may be inaccurate. Consider using '#align set.finite_is_top Set.finite_isTopₓ'. -/
theorem finite_isTop (α : Type _) [PartialOrder α] : { x : α | IsTop x }.Finite :=
(subsingleton_isTop α).Finite
#align set.finite_is_top Set.finite_isTop
-/- warning: set.finite_is_bot -> Set.finite_isBot is a dubious translation:
-lean 3 declaration is
- forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
-but is expected to have type
- forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
-Case conversion may be inaccurate. Consider using '#align set.finite_is_bot Set.finite_isBotₓ'. -/
theorem finite_isBot (α : Type _) [PartialOrder α] : { x : α | IsBot x }.Finite :=
(subsingleton_isBot α).Finite
#align set.finite_is_bot Set.finite_isBot
-/- warning: set.infinite.exists_lt_map_eq_of_maps_to -> Set.Infinite.exists_lt_map_eq_of_mapsTo is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α} {t : Set.{u2} β} {f : α -> β}, (Set.Infinite.{u1} α s) -> (Set.MapsTo.{u1, u2} α β f s t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (x : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) (Eq.{succ u2} β (f x) (f y)))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α} {t : Set.{u2} β} {f : α -> β}, (Set.Infinite.{u1} α s) -> (Set.MapsTo.{u1, u2} α β f s t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) (Eq.{succ u2} β (f x) (f y)))))))
-Case conversion may be inaccurate. Consider using '#align set.infinite.exists_lt_map_eq_of_maps_to Set.Infinite.exists_lt_map_eq_of_mapsToₓ'. -/
theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : Set β} {f : α → β}
(hs : s.Infinite) (hf : MapsTo f s t) (ht : t.Finite) : ∃ x ∈ s, ∃ y ∈ s, x < y ∧ f x = f y :=
let ⟨x, hx, y, hy, hxy, hf⟩ := hs.exists_ne_map_eq_of_mapsTo hf ht
hxy.lt_or_lt.elim (fun hxy => ⟨x, hx, y, hy, hxy, hf⟩) fun hyx => ⟨y, hy, x, hx, hyx, hf.symm⟩
#align set.infinite.exists_lt_map_eq_of_maps_to Set.Infinite.exists_lt_map_eq_of_mapsTo
-/- warning: set.finite.exists_lt_map_eq_of_forall_mem -> Set.Finite.exists_lt_map_eq_of_forall_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : Infinite.{succ u1} α] {t : Set.{u2} β} {f : α -> β}, (forall (a : α), Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f a) t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (a : α) => Exists.{succ u1} α (fun (b : α) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b) (Eq.{succ u2} β (f a) (f b)))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : Infinite.{succ u1} α] {t : Set.{u2} β} {f : α -> β}, (forall (a : α), Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (f a) t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (a : α) => Exists.{succ u1} α (fun (b : α) => And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b) (Eq.{succ u2} β (f a) (f b)))))
-Case conversion may be inaccurate. Consider using '#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_memₓ'. -/
theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t : Set β} {f : α → β}
(hf : ∀ a, f a ∈ t) (ht : t.Finite) : ∃ a b, a < b ∧ f a = f b :=
by
@@ -2036,12 +1739,6 @@ theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t
exact ⟨a, b, h⟩
#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_mem
-/- warning: set.exists_min_image -> Set.exists_min_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f a) (f b)))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f a) (f b)))))
-Case conversion may be inaccurate. Consider using '#align set.exists_min_image Set.exists_min_imageₓ'. -/
theorem exists_min_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.Finite) :
s.Nonempty → ∃ a ∈ s, ∀ b ∈ s, f a ≤ f b
| ⟨x, hx⟩ => by
@@ -2049,12 +1746,6 @@ theorem exists_min_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.F
h1.to_finset.exists_min_image f ⟨x, h1.mem_to_finset.2 hx⟩
#align set.exists_min_image Set.exists_min_image
-/- warning: set.exists_max_image -> Set.exists_max_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f b) (f a)))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f b) (f a)))))
-Case conversion may be inaccurate. Consider using '#align set.exists_max_image Set.exists_max_imageₓ'. -/
theorem exists_max_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.Finite) :
s.Nonempty → ∃ a ∈ s, ∀ b ∈ s, f b ≤ f a
| ⟨x, hx⟩ => by
@@ -2062,12 +1753,6 @@ theorem exists_max_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.F
h1.to_finset.exists_max_image f ⟨x, h1.mem_to_finset.2 hx⟩
#align set.exists_max_image Set.exists_max_image
-/- warning: set.exists_lower_bound_image -> Set.exists_lower_bound_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f a) (f b))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f a) (f b))))
-Case conversion may be inaccurate. Consider using '#align set.exists_lower_bound_image Set.exists_lower_bound_imageₓ'. -/
theorem exists_lower_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set α) (f : α → β)
(h : s.Finite) : ∃ a : α, ∀ b ∈ s, f a ≤ f b :=
by
@@ -2079,12 +1764,6 @@ theorem exists_lower_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
· exact Nonempty.elim hα fun a => ⟨a, fun x hx => absurd (Set.nonempty_of_mem hx) hs⟩
#align set.exists_lower_bound_image Set.exists_lower_bound_image
-/- warning: set.exists_upper_bound_image -> Set.exists_upper_bound_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f b) (f a))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f b) (f a))))
-Case conversion may be inaccurate. Consider using '#align set.exists_upper_bound_image Set.exists_upper_bound_imageₓ'. -/
theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set α) (f : α → β)
(h : s.Finite) : ∃ a : α, ∀ b ∈ s, f b ≤ f a :=
by
@@ -2096,12 +1775,6 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
· exact Nonempty.elim hα fun a => ⟨a, fun x hx => absurd (Set.nonempty_of_mem hx) hs⟩
#align set.exists_upper_bound_image Set.exists_upper_bound_image
-/- warning: set.finite.supr_binfi_of_monotone -> Set.Finite.iSup_biInf_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13041 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13043 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13041 x._@.Mathlib.Data.Set.Finite._hyg.13043)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotoneₓ'. -/
theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
@@ -2115,96 +1788,48 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
-/- warning: set.finite.supr_binfi_of_antitone -> Set.Finite.iSup_biInf_of_antitone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13263 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13265 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13263 x._@.Mathlib.Data.Set.Finite._hyg.13265))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitoneₓ'. -/
theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
@Finite.iSup_biInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitone
-/- warning: set.finite.infi_bsupr_of_monotone -> Set.Finite.iInf_biSup_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13443 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13445 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13443 x._@.Mathlib.Data.Set.Finite._hyg.13445))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotoneₓ'. -/
theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_antitone fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotone
-/- warning: set.finite.infi_bsupr_of_antitone -> Set.Finite.iInf_biSup_of_antitone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13615 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13617 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13615 x._@.Mathlib.Data.Set.Finite._hyg.13617)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitoneₓ'. -/
theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_monotone fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitone
-/- warning: supr_infi_of_monotone -> Set.iSup_iInf_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13787 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13789 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13787 x._@.Mathlib.Data.Set.Finite._hyg.13789)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.iSup_iInf_of_monotoneₓ'. -/
theorem Set.iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j := by
simpa only [iInf_univ] using finite_univ.supr_binfi_of_monotone fun i hi => hf i
#align supr_infi_of_monotone Set.iSup_iInf_of_monotone
-/- warning: supr_infi_of_antitone -> Set.iSup_iInf_of_antitone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13924 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13926 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13924 x._@.Mathlib.Data.Set.Finite._hyg.13926))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.iSup_iInf_of_antitoneₓ'. -/
theorem Set.iSup_iInf_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j :=
@Set.iSup_iInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
#align supr_infi_of_antitone Set.iSup_iInf_of_antitone
-/- warning: infi_supr_of_monotone -> Set.iInf_iSup_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14062 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14064 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14062 x._@.Mathlib.Data.Set.Finite._hyg.14064))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.iInf_iSup_of_monotoneₓ'. -/
theorem Set.iInf_iSup_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
Set.iSup_iInf_of_antitone fun i => (hf i).dual_right
#align infi_supr_of_monotone Set.iInf_iSup_of_monotone
-/- warning: infi_supr_of_antitone -> Set.iInf_iSup_of_antitone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14194 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14196 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14194 x._@.Mathlib.Data.Set.Finite._hyg.14196)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.iInf_iSup_of_antitoneₓ'. -/
theorem Set.iInf_iSup_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
Set.iSup_iInf_of_monotone fun i => (hf i).dual_right
#align infi_supr_of_antitone Set.iInf_iSup_of_antitone
-/- warning: set.Union_Inter_of_monotone -> Set.iUnion_iInter_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14323 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14325 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14323 x._@.Mathlib.Data.Set.Finite._hyg.14325)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotoneₓ'. -/
/-- An increasing union distributes over finite intersection. -/
theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
@@ -2212,12 +1837,6 @@ theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'
Set.iSup_iInf_of_monotone hs
#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotone
-/- warning: set.Union_Inter_of_antitone -> Set.iUnion_iInter_of_antitone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14445 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14447 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14445 x._@.Mathlib.Data.Set.Finite._hyg.14447))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitoneₓ'. -/
/-- A decreasing union distributes over finite intersection. -/
theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
@@ -2225,12 +1844,6 @@ theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'
Set.iSup_iInf_of_antitone hs
#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitone
-/- warning: set.Inter_Union_of_monotone -> Set.iInter_iUnion_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14567 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14569 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14567 x._@.Mathlib.Data.Set.Finite._hyg.14569))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotoneₓ'. -/
/-- An increasing intersection distributes over finite union. -/
theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
@@ -2238,12 +1851,6 @@ theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'
Set.iInf_iSup_of_monotone hs
#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotone
-/- warning: set.Inter_Union_of_antitone -> Set.iInter_iUnion_of_antitone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14686 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14688 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14686 x._@.Mathlib.Data.Set.Finite._hyg.14688)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitoneₓ'. -/
/-- A decreasing intersection distributes over finite union. -/
theorem iInter_iUnion_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
@@ -2251,12 +1858,6 @@ theorem iInter_iUnion_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'
Set.iInf_iSup_of_antitone hs
#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitone
-/- warning: set.Union_pi_of_monotone -> Set.iUnion_pi_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] {α : ι -> Type.{u3}} {I : Set.{u1} ι} {s : forall (i : ι), ι' -> (Set.{u3} (α i))}, (Set.Finite.{u1} ι I) -> (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i I) -> (Monotone.{u2, u3} ι' (Set.{u3} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (LinearOrder.toLattice.{u2} ι' _inst_1)))) (PartialOrder.toPreorder.{u3} (Set.{u3} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} (α i)) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} (α i)) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} (α i)) (Set.completeBooleanAlgebra.{u3} (α i)))))))) (s i))) -> (Eq.{succ (max u1 u3)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.iUnion.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u1, u3} ι (fun (i : ι) => α i) I (fun (i : ι) => s i j))) (Set.pi.{u1, u3} ι (fun (i : ι) => α i) I (fun (i : ι) => Set.iUnion.{u3, succ u2} (α i) ι' (fun (j : ι') => s i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] {α : ι -> Type.{u1}} {I : Set.{u3} ι} {s : forall (i : ι), ι' -> (Set.{u1} (α i))}, (Set.Finite.{u3} ι I) -> (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i I) -> (Monotone.{u2, u1} ι' (Set.{u1} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (DistribLattice.toLattice.{u2} ι' (instDistribLattice.{u2} ι' _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (α i)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (α i)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (α i)) (Set.instCompleteBooleanAlgebraSet.{u1} (α i)))))))) (s i))) -> (Eq.{max (succ u3) (succ u1)} (Set.{max u3 u1} (forall (i : ι), α i)) (Set.iUnion.{max u3 u1, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u3, u1} ι (fun (i : ι) => α i) I (fun (i : ι) => s i j))) (Set.pi.{u3, u1} ι (fun (i : ι) => α i) I (fun (i : ι) => Set.iUnion.{u1, succ u2} (α i) ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_pi_of_monotone Set.iUnion_pi_of_monotoneₓ'. -/
theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
{I : Set ι} {s : ∀ i, ι' → Set (α i)} (hI : I.Finite) (hs : ∀ i ∈ I, Monotone (s i)) :
(⋃ j : ι', I.pi fun i => s i j) = I.pi fun i => ⋃ j, s i j :=
@@ -2266,12 +1867,6 @@ theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι']
exact Union_Inter_of_monotone fun i j₁ j₂ h => preimage_mono <| hs i i.2 h
#align set.Union_pi_of_monotone Set.iUnion_pi_of_monotone
-/- warning: set.Union_univ_pi_of_monotone -> Set.iUnion_univ_pi_of_monotone is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : Finite.{succ u1} ι] {α : ι -> Type.{u3}} {s : forall (i : ι), ι' -> (Set.{u3} (α i))}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (LinearOrder.toLattice.{u2} ι' _inst_1)))) (PartialOrder.toPreorder.{u3} (Set.{u3} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} (α i)) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} (α i)) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} (α i)) (Set.completeBooleanAlgebra.{u3} (α i)))))))) (s i)) -> (Eq.{succ (max u1 u3)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.iUnion.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u1, u3} ι (fun (i : ι) => α i) (Set.univ.{u1} ι) (fun (i : ι) => s i j))) (Set.pi.{u1, u3} ι (fun (i : ι) => α i) (Set.univ.{u1} ι) (fun (i : ι) => Set.iUnion.{u3, succ u2} (α i) ι' (fun (j : ι') => s i j))))
-but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : Finite.{succ u3} ι] {α : ι -> Type.{u1}} {s : forall (i : ι), ι' -> (Set.{u1} (α i))}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (DistribLattice.toLattice.{u2} ι' (instDistribLattice.{u2} ι' _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (α i)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (α i)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (α i)) (Set.instCompleteBooleanAlgebraSet.{u1} (α i)))))))) (s i)) -> (Eq.{max (succ u3) (succ u1)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.iUnion.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u3, u1} ι (fun (i : ι) => α i) (Set.univ.{u3} ι) (fun (i : ι) => s i j))) (Set.pi.{u3, u1} ι (fun (i : ι) => α i) (Set.univ.{u3} ι) (fun (i : ι) => Set.iUnion.{u1, succ u2} (α i) ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_univ_pi_of_monotone Set.iUnion_univ_pi_of_monotoneₓ'. -/
theorem iUnion_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
{α : ι → Type _} {s : ∀ i, ι' → Set (α i)} (hs : ∀ i, Monotone (s i)) :
(⋃ j : ι', pi univ fun i => s i j) = pi univ fun i => ⋃ j, s i j :=
@@ -2285,12 +1880,6 @@ theorem finite_range_findGreatest {P : α → ℕ → Prop} [∀ x, DecidablePre
#align set.finite_range_find_greatest Set.finite_range_findGreatest
-/
-/- warning: set.finite.exists_maximal_wrt -> Set.Finite.exists_maximal_wrt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PartialOrder.{u2} β] (f : α -> β) (s : Set.{u1} α), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (a' : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a' s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β _inst_1)) (f a) (f a')) -> (Eq.{succ u2} β (f a) (f a')))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PartialOrder.{u2} β] (f : α -> β) (s : Set.{u1} α), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) (forall (a' : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a' s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β _inst_1)) (f a) (f a')) -> (Eq.{succ u2} β (f a) (f a')))))
-Case conversion may be inaccurate. Consider using '#align set.finite.exists_maximal_wrt Set.Finite.exists_maximal_wrtₓ'. -/
theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α) (h : Set.Finite s) :
s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a' :=
by
@@ -2391,12 +1980,6 @@ end Finset
variable [LinearOrder α]
-/- warning: finite.of_forall_not_lt_lt -> Finite.of_forall_not_lt_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α], (forall {{x : α}} {{y : α}} {{z : α}}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y z) -> False) -> (Finite.{succ u1} α)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α], (forall {{x : α}} {{y : α}} {{z : α}}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y z) -> False) -> (Finite.{succ u1} α)
-Case conversion may be inaccurate. Consider using '#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_ltₓ'. -/
/-- If a linear order does not contain any triple of elements `x < y < z`, then this type
is finite. -/
theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z → False) : Finite α :=
@@ -2407,12 +1990,6 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
simpa [hne] using eq_or_eq_or_eq_of_forall_not_lt_lt h z x y
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
-/- warning: set.finite_of_forall_not_lt_lt -> Set.finite_of_forall_not_lt_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y z) -> False))) -> (Set.Finite.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (forall (z : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y z) -> False))) -> (Set.Finite.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_ltₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
@@ -2420,23 +1997,11 @@ theorem Set.finite_of_forall_not_lt_lt {s : Set α}
@Set.toFinite _ s <| Finite.of_forall_not_lt_lt <| by simpa only [SetCoe.forall'] using h
#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
-/- warning: set.finite_diff_Union_Ioo -> Set.finite_diff_iUnion_Ioo is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => Set.iUnion.{u1, succ u1} α α (fun (y : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) => Set.iUnion.{u1, succ u1} α α (fun (y : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y))))))
-Case conversion may be inaccurate. Consider using '#align set.finite_diff_Union_Ioo Set.finite_diff_iUnion_Iooₓ'. -/
theorem Set.finite_diff_iUnion_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
Set.finite_of_forall_not_lt_lt fun x hx y hy z hz hxy hyz =>
hy.2 <| mem_iUnion₂_of_mem hx.1 <| mem_iUnion₂_of_mem hz.1 ⟨hxy, hyz⟩
#align set.finite_diff_Union_Ioo Set.finite_diff_iUnion_Ioo
-/- warning: set.finite_diff_Union_Ioo' -> Set.finite_diff_iUnion_Ioo' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s (Set.iUnion.{u1, succ u1} α (Prod.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)) (fun (x : Prod.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) (Prod.fst.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) (Prod.snd.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) x)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s (Set.iUnion.{u1, succ u1} α (Prod.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s)) (fun (x : Prod.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s)) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Prod.fst.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s) x)) (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Prod.snd.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s) x)))))
-Case conversion may be inaccurate. Consider using '#align set.finite_diff_Union_Ioo' Set.finite_diff_iUnion_Ioo'ₓ'. -/
theorem Set.finite_diff_iUnion_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
simpa only [Union, iSup_prod, iSup_subtype] using s.finite_diff_Union_Ioo
#align set.finite_diff_Union_Ioo' Set.finite_diff_iUnion_Ioo'
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -134,18 +134,14 @@ protected noncomputable def Finite.toFinset {s : Set α} (h : s.Finite) : Finset
#print Set.Finite.exists_finset /-
theorem Finite.exists_finset {s : Set α} (h : s.Finite) :
- ∃ s' : Finset α, ∀ a : α, a ∈ s' ↔ a ∈ s :=
- by
- cases h
+ ∃ s' : Finset α, ∀ a : α, a ∈ s' ↔ a ∈ s := by cases h;
exact ⟨s.to_finset, fun _ => mem_to_finset⟩
#align set.finite.exists_finset Set.Finite.exists_finset
-/
#print Set.Finite.exists_finset_coe /-
-theorem Finite.exists_finset_coe {s : Set α} (h : s.Finite) : ∃ s' : Finset α, ↑s' = s :=
- by
- cases h
- exact ⟨s.to_finset, s.coe_to_finset⟩
+theorem Finite.exists_finset_coe {s : Set α} (h : s.Finite) : ∃ s' : Finset α, ↑s' = s := by
+ cases h; exact ⟨s.to_finset, s.coe_to_finset⟩
#align set.finite.exists_finset_coe Set.Finite.exists_finset_coe
-/
@@ -299,10 +295,7 @@ attribute [protected] to_finset_mono to_finset_strict_mono
#print Set.Finite.toFinset_setOf /-
@[simp]
protected theorem toFinset_setOf [Fintype α] (p : α → Prop) [DecidablePred p]
- (h : { x | p x }.Finite) : h.toFinset = Finset.univ.filterₓ p :=
- by
- ext
- simp
+ (h : { x | p x }.Finite) : h.toFinset = Finset.univ.filterₓ p := by ext; simp
#align set.finite.to_finset_set_of Set.Finite.toFinset_setOf
-/
@@ -325,10 +318,7 @@ but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t) h) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_inter Set.Finite.toFinset_interₓ'. -/
protected theorem toFinset_inter [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
- (h : (s ∩ t).Finite) : h.toFinset = hs.toFinset ∩ ht.toFinset :=
- by
- ext
- simp
+ (h : (s ∩ t).Finite) : h.toFinset = hs.toFinset ∩ ht.toFinset := by ext; simp
#align set.finite.to_finset_inter Set.Finite.toFinset_inter
/- warning: set.finite.to_finset_union -> Set.Finite.toFinset_union is a dubious translation:
@@ -338,10 +328,7 @@ but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t) h) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_union Set.Finite.toFinset_unionₓ'. -/
protected theorem toFinset_union [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
- (h : (s ∪ t).Finite) : h.toFinset = hs.toFinset ∪ ht.toFinset :=
- by
- ext
- simp
+ (h : (s ∪ t).Finite) : h.toFinset = hs.toFinset ∪ ht.toFinset := by ext; simp
#align set.finite.to_finset_union Set.Finite.toFinset_union
/- warning: set.finite.to_finset_diff -> Set.Finite.toFinset_diff is a dubious translation:
@@ -351,10 +338,7 @@ but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t) h) (SDiff.sdiff.{u1} (Finset.{u1} α) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_diff Set.Finite.toFinset_diffₓ'. -/
protected theorem toFinset_diff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
- (h : (s \ t).Finite) : h.toFinset = hs.toFinset \ ht.toFinset :=
- by
- ext
- simp
+ (h : (s \ t).Finite) : h.toFinset = hs.toFinset \ ht.toFinset := by ext; simp
#align set.finite.to_finset_diff Set.Finite.toFinset_diff
/- warning: set.finite.to_finset_symm_diff -> Set.Finite.toFinset_symmDiff is a dubious translation:
@@ -364,9 +348,7 @@ but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t) h) (symmDiff.{u1} (Finset.{u1} α) (SemilatticeSup.toSup.{u1} (Finset.{u1} α) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_symm_diff Set.Finite.toFinset_symmDiffₓ'. -/
protected theorem toFinset_symmDiff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
- (h : (s ∆ t).Finite) : h.toFinset = hs.toFinset ∆ ht.toFinset :=
- by
- ext
+ (h : (s ∆ t).Finite) : h.toFinset = hs.toFinset ∆ ht.toFinset := by ext;
simp [mem_symm_diff, Finset.mem_symmDiff]
#align set.finite.to_finset_symm_diff Set.Finite.toFinset_symmDiff
@@ -377,26 +359,19 @@ but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} α] (hs : Set.Finite.{u1} α s) (h : Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) h) (HasCompl.compl.{u1} (Finset.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} α) (Finset.booleanAlgebra.{u1} α _inst_2 (fun (a : α) (b : α) => _inst_1 a b))) (Set.Finite.toFinset.{u1} α s hs))
Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_compl Set.Finite.toFinset_complₓ'. -/
protected theorem toFinset_compl [DecidableEq α] [Fintype α] (hs : s.Finite) (h : sᶜ.Finite) :
- h.toFinset = hs.toFinsetᶜ := by
- ext
- simp
+ h.toFinset = hs.toFinsetᶜ := by ext; simp
#align set.finite.to_finset_compl Set.Finite.toFinset_compl
#print Set.Finite.toFinset_empty /-
@[simp]
-protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅ :=
- by
- ext
- simp
+protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅ := by ext; simp
#align set.finite.to_finset_empty Set.Finite.toFinset_empty
-/
#print Set.Finite.toFinset_univ /-
@[simp]
protected theorem toFinset_univ [Fintype α] (h : (Set.univ : Set α).Finite) :
- h.toFinset = Finset.univ := by
- ext
- simp
+ h.toFinset = Finset.univ := by ext; simp
#align set.finite.to_finset_univ Set.Finite.toFinset_univ
-/
@@ -417,18 +392,14 @@ protected theorem toFinset_eq_univ [Fintype α] {h : s.Finite} :
#print Set.Finite.toFinset_image /-
protected theorem toFinset_image [DecidableEq β] (f : α → β) (hs : s.Finite) (h : (f '' s).Finite) :
- h.toFinset = hs.toFinset.image f := by
- ext
- simp
+ h.toFinset = hs.toFinset.image f := by ext; simp
#align set.finite.to_finset_image Set.Finite.toFinset_image
-/
#print Set.Finite.toFinset_range /-
@[simp]
protected theorem toFinset_range [DecidableEq α] [Fintype β] (f : β → α) (h : (range f).Finite) :
- h.toFinset = Finset.univ.image f := by
- ext
- simp
+ h.toFinset = Finset.univ.image f := by ext; simp
#align set.finite.to_finset_range Set.Finite.toFinset_range
-/
@@ -511,9 +482,7 @@ instance fintypeInterOfRight (s t : Set α) [Fintype t] [DecidablePred (· ∈ s
#print Set.fintypeSubset /-
/-- A `fintype` structure on a set defines a `fintype` structure on its subset. -/
def fintypeSubset (s : Set α) {t : Set α} [Fintype s] [DecidablePred (· ∈ t)] (h : t ⊆ s) :
- Fintype t := by
- rw [← inter_eq_self_of_subset_right h]
- apply Set.fintypeInterOfLeft
+ Fintype t := by rw [← inter_eq_self_of_subset_right h]; apply Set.fintypeInterOfLeft
#align set.fintype_subset Set.fintypeSubset
-/
@@ -548,9 +517,7 @@ instance fintypeiUnion [DecidableEq α] [Fintype (PLift ι)] (f : ι → Set α)
#print Set.fintypesUnion /-
instance fintypesUnion [DecidableEq α] {s : Set (Set α)} [Fintype s]
- [H : ∀ t : s, Fintype (t : Set α)] : Fintype (⋃₀ s) :=
- by
- rw [sUnion_eq_Union]
+ [H : ∀ t : s, Fintype (t : Set α)] : Fintype (⋃₀ s) := by rw [sUnion_eq_Union];
exact @Set.fintypeiUnion _ _ _ _ _ H
#align set.fintype_sUnion Set.fintypesUnion
-/
@@ -722,18 +689,14 @@ instance fintypeOffDiag [DecidableEq α] (s : Set α) [Fintype s] : Fintype s.of
#print Set.fintypeImage2 /-
/-- `image2 f s t` is `fintype` if `s` and `t` are. -/
instance fintypeImage2 [DecidableEq γ] (f : α → β → γ) (s : Set α) (t : Set β) [hs : Fintype s]
- [ht : Fintype t] : Fintype (image2 f s t : Set γ) :=
- by
- rw [← image_prod]
+ [ht : Fintype t] : Fintype (image2 f s t : Set γ) := by rw [← image_prod];
apply Set.fintypeImage
#align set.fintype_image2 Set.fintypeImage2
-/
#print Set.fintypeSeq /-
instance fintypeSeq [DecidableEq β] (f : Set (α → β)) (s : Set α) [Fintype f] [Fintype s] :
- Fintype (f.seq s) := by
- rw [seq_def]
- apply Set.fintypeBiUnion'
+ Fintype (f.seq s) := by rw [seq_def]; apply Set.fintypeBiUnion'
#align set.fintype_seq Set.fintypeSeq
-/
@@ -774,9 +737,7 @@ theorem finite_toSet (s : Finset α) : (s : Set α).Finite :=
#print Finset.finite_toSet_toFinset /-
@[simp]
-theorem finite_toSet_toFinset (s : Finset α) : s.finite_toSet.toFinset = s :=
- by
- ext
+theorem finite_toSet_toFinset (s : Finset α) : s.finite_toSet.toFinset = s := by ext;
rw [Set.Finite.mem_toFinset, mem_coe]
#align finset.finite_to_set_to_finset Finset.finite_toSet_toFinset
-/
@@ -795,9 +756,7 @@ theorem finite_toSet (s : Multiset α) : { x | x ∈ s }.Finite := by
#print Multiset.finite_toSet_toFinset /-
@[simp]
theorem finite_toSet_toFinset [DecidableEq α] (s : Multiset α) :
- s.finite_toSet.toFinset = s.toFinset := by
- ext x
- simp
+ s.finite_toSet.toFinset = s.toFinset := by ext x; simp
#align multiset.finite_to_set_to_finset Multiset.finite_toSet_toFinset
-/
@@ -841,26 +800,19 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} (s : Set.{u1} α) (t : Set.{u1} α) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} α s)] [_inst_2 : Finite.{succ u1} (Set.Elem.{u1} α t)], Finite.{succ u1} (Set.Elem.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
Case conversion may be inaccurate. Consider using '#align finite.set.finite_union Finite.Set.finite_unionₓ'. -/
-instance finite_union (s t : Set α) [Finite s] [Finite t] : Finite (s ∪ t : Set α) :=
- by
- cases nonempty_fintype s
- cases nonempty_fintype t
- infer_instance
+instance finite_union (s t : Set α) [Finite s] [Finite t] : Finite (s ∪ t : Set α) := by
+ cases nonempty_fintype s; cases nonempty_fintype t; infer_instance
#align finite.set.finite_union Finite.Set.finite_union
#print Finite.Set.finite_sep /-
-instance finite_sep (s : Set α) (p : α → Prop) [Finite s] : Finite ({ a ∈ s | p a } : Set α) :=
- by
- cases nonempty_fintype s
- infer_instance
+instance finite_sep (s : Set α) (p : α → Prop) [Finite s] : Finite ({ a ∈ s | p a } : Set α) := by
+ cases nonempty_fintype s; infer_instance
#align finite.set.finite_sep Finite.Set.finite_sep
-/
#print Finite.Set.subset /-
-protected theorem subset (s : Set α) {t : Set α} [Finite s] (h : t ⊆ s) : Finite t :=
- by
- rw [← sep_eq_of_subset h]
- infer_instance
+protected theorem subset (s : Set α) {t : Set α} [Finite s] (h : t ⊆ s) : Finite t := by
+ rw [← sep_eq_of_subset h]; infer_instance
#align finite.set.subset Finite.Set.subset
-/
@@ -895,10 +847,8 @@ instance finite_diff (s t : Set α) [Finite s] : Finite (s \ t : Set α) :=
#align finite.set.finite_diff Finite.Set.finite_diff
#print Finite.Set.finite_range /-
-instance finite_range (f : ι → α) [Finite ι] : Finite (range f) :=
- by
- haveI := Fintype.ofFinite (PLift ι)
- infer_instance
+instance finite_range (f : ι → α) [Finite ι] : Finite (range f) := by
+ haveI := Fintype.ofFinite (PLift ι); infer_instance
#align finite.set.finite_range Finite.Set.finite_range
-/
@@ -912,9 +862,7 @@ instance finite_iUnion [Finite ι] (f : ι → Set α) [∀ i, Finite (f i)] : F
#print Finite.Set.finite_sUnion /-
instance finite_sUnion {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t : Set α)] :
- Finite (⋃₀ s) := by
- rw [sUnion_eq_Union]
- exact @Finite.Set.finite_iUnion _ _ _ _ H
+ Finite (⋃₀ s) := by rw [sUnion_eq_Union]; exact @Finite.Set.finite_iUnion _ _ _ _ H
#align finite.set.finite_sUnion Finite.Set.finite_sUnion
-/
@@ -963,10 +911,8 @@ instance finite_insert (a : α) (s : Set α) [Finite s] : Finite (insert a s : S
-/
#print Finite.Set.finite_image /-
-instance finite_image (s : Set α) (f : α → β) [Finite s] : Finite (f '' s) :=
- by
- cases nonempty_fintype s
- infer_instance
+instance finite_image (s : Set α) (f : α → β) [Finite s] : Finite (f '' s) := by
+ cases nonempty_fintype s; infer_instance
#align finite.set.finite_image Finite.Set.finite_image
-/
@@ -989,17 +935,13 @@ instance finite_prod (s : Set α) (t : Set β) [Finite s] [Finite t] :
#print Finite.Set.finite_image2 /-
instance finite_image2 (f : α → β → γ) (s : Set α) (t : Set β) [Finite s] [Finite t] :
- Finite (image2 f s t : Set γ) := by
- rw [← image_prod]
- infer_instance
+ Finite (image2 f s t : Set γ) := by rw [← image_prod]; infer_instance
#align finite.set.finite_image2 Finite.Set.finite_image2
-/
#print Finite.Set.finite_seq /-
-instance finite_seq (f : Set (α → β)) (s : Set α) [Finite f] [Finite s] : Finite (f.seq s) :=
- by
- rw [seq_def]
- infer_instance
+instance finite_seq (f : Set (α → β)) (s : Set α) [Finite f] [Finite s] : Finite (f.seq s) := by
+ rw [seq_def]; infer_instance
#align finite.set.finite_seq Finite.Set.finite_seq
-/
@@ -1047,11 +989,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
Case conversion may be inaccurate. Consider using '#align set.finite.union Set.Finite.unionₓ'. -/
-theorem Finite.union {s t : Set α} (hs : s.Finite) (ht : t.Finite) : (s ∪ t).Finite :=
- by
- cases hs
- cases ht
- apply to_finite
+theorem Finite.union {s t : Set α} (hs : s.Finite) (ht : t.Finite) : (s ∪ t).Finite := by cases hs;
+ cases ht; apply to_finite
#align set.finite.union Set.Finite.union
/- warning: set.finite.finite_of_compl -> Set.Finite.finite_of_compl is a dubious translation:
@@ -1060,10 +999,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)) -> (Finite.{succ u1} α)
Case conversion may be inaccurate. Consider using '#align set.finite.finite_of_compl Set.Finite.finite_of_complₓ'. -/
-theorem Finite.finite_of_compl {s : Set α} (hs : s.Finite) (hsc : sᶜ.Finite) : Finite α :=
- by
- rw [← finite_univ_iff, ← union_compl_self s]
- exact hs.union hsc
+theorem Finite.finite_of_compl {s : Set α} (hs : s.Finite) (hsc : sᶜ.Finite) : Finite α := by
+ rw [← finite_univ_iff, ← union_compl_self s]; exact hs.union hsc
#align set.finite.finite_of_compl Set.Finite.finite_of_compl
/- warning: set.finite.sup -> Set.Finite.sup is a dubious translation:
@@ -1077,10 +1014,8 @@ theorem Finite.sup {s t : Set α} : s.Finite → t.Finite → (s ⊔ t).Finite :
#align set.finite.sup Set.Finite.sup
#print Set.Finite.sep /-
-theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : { a ∈ s | p a }.Finite :=
- by
- cases hs
- apply to_finite
+theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : { a ∈ s | p a }.Finite := by
+ cases hs; apply to_finite
#align set.finite.sep Set.Finite.sep
-/
@@ -1090,10 +1025,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
Case conversion may be inaccurate. Consider using '#align set.finite.inter_of_left Set.Finite.inter_of_leftₓ'. -/
-theorem Finite.inter_of_left {s : Set α} (hs : s.Finite) (t : Set α) : (s ∩ t).Finite :=
- by
- cases hs
- apply to_finite
+theorem Finite.inter_of_left {s : Set α} (hs : s.Finite) (t : Set α) : (s ∩ t).Finite := by
+ cases hs; apply to_finite
#align set.finite.inter_of_left Set.Finite.inter_of_left
/- warning: set.finite.inter_of_right -> Set.Finite.inter_of_right is a dubious translation:
@@ -1102,10 +1035,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) t s))
Case conversion may be inaccurate. Consider using '#align set.finite.inter_of_right Set.Finite.inter_of_rightₓ'. -/
-theorem Finite.inter_of_right {s : Set α} (hs : s.Finite) (t : Set α) : (t ∩ s).Finite :=
- by
- cases hs
- apply to_finite
+theorem Finite.inter_of_right {s : Set α} (hs : s.Finite) (t : Set α) : (t ∩ s).Finite := by
+ cases hs; apply to_finite
#align set.finite.inter_of_right Set.Finite.inter_of_right
/- warning: set.finite.inf_of_left -> Set.Finite.inf_of_left is a dubious translation:
@@ -1129,11 +1060,8 @@ theorem Finite.inf_of_right {s : Set α} (h : s.Finite) (t : Set α) : (t ⊓ s)
#align set.finite.inf_of_right Set.Finite.inf_of_right
#print Set.Finite.subset /-
-theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) : t.Finite :=
- by
- cases hs
- haveI := Finite.Set.subset _ ht
- apply to_finite
+theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) : t.Finite := by
+ cases hs; haveI := Finite.Set.subset _ ht; apply to_finite
#align set.finite.subset Set.Finite.subset
-/
@@ -1143,9 +1071,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s t))
Case conversion may be inaccurate. Consider using '#align set.finite.diff Set.Finite.diffₓ'. -/
-theorem Finite.diff {s : Set α} (hs : s.Finite) (t : Set α) : (s \ t).Finite :=
- by
- cases hs
+theorem Finite.diff {s : Set α} (hs : s.Finite) (t : Set α) : (s \ t).Finite := by cases hs;
apply to_finite
#align set.finite.diff Set.Finite.diff
@@ -1160,19 +1086,14 @@ theorem Finite.of_diff {s t : Set α} (hd : (s \ t).Finite) (ht : t.Finite) : s.
#align set.finite.of_diff Set.Finite.of_diff
#print Set.finite_iUnion /-
-theorem finite_iUnion [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite :=
- by
- haveI := fun i => (H i).Fintype
- apply to_finite
+theorem finite_iUnion [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite := by
+ haveI := fun i => (H i).Fintype; apply to_finite
#align set.finite_Union Set.finite_iUnion
-/
#print Set.Finite.sUnion /-
theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.Finite t) :
- (⋃₀ s).Finite := by
- cases hs
- haveI := fun i : s => (H i i.2).to_subtype
- apply to_finite
+ (⋃₀ s).Finite := by cases hs; haveI := fun i : s => (H i i.2).to_subtype; apply to_finite
#align set.finite.sUnion Set.Finite.sUnion
-/
@@ -1198,11 +1119,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align set.finite.bUnion' Set.Finite.biUnion'ₓ'. -/
/-- Dependent version of `finite.bUnion`. -/
theorem Finite.biUnion' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
- (ht : ∀ i ∈ s, (t i ‹_›).Finite) : (⋃ i ∈ s, t i ‹_›).Finite :=
- by
- cases hs
- rw [bUnion_eq_Union]
- apply finite_Union fun i : s => ht i.1 i.2
+ (ht : ∀ i ∈ s, (t i ‹_›).Finite) : (⋃ i ∈ s, t i ‹_›).Finite := by cases hs;
+ rw [bUnion_eq_Union]; apply finite_Union fun i : s => ht i.1 i.2
#align set.finite.bUnion' Set.Finite.biUnion'
#print Set.Finite.sInter /-
@@ -1242,9 +1160,7 @@ theorem finite_empty : (∅ : Set α).Finite :=
#print Set.Infinite.nonempty /-
protected theorem Infinite.nonempty {s : Set α} (h : s.Infinite) : s.Nonempty :=
- nonempty_iff_ne_empty.2 <| by
- rintro rfl
- exact h finite_empty
+ nonempty_iff_ne_empty.2 <| by rintro rfl; exact h finite_empty
#align set.infinite.nonempty Set.Infinite.nonempty
-/
@@ -1263,17 +1179,13 @@ theorem finite_pure (a : α) : (pure a : Set α).Finite :=
#print Set.Finite.insert /-
@[simp]
-theorem Finite.insert (a : α) {s : Set α} (hs : s.Finite) : (insert a s).Finite :=
- by
- cases hs
+theorem Finite.insert (a : α) {s : Set α} (hs : s.Finite) : (insert a s).Finite := by cases hs;
apply to_finite
#align set.finite.insert Set.Finite.insert
-/
#print Set.Finite.image /-
-theorem Finite.image {s : Set α} (f : α → β) (hs : s.Finite) : (f '' s).Finite :=
- by
- cases hs
+theorem Finite.image {s : Set α} (f : α → β) (hs : s.Finite) : (f '' s).Finite := by cases hs;
apply to_finite
#align set.finite.image Set.Finite.image
-/
@@ -1286,9 +1198,7 @@ theorem finite_range (f : ι → α) [Finite ι] : (range f).Finite :=
#print Set.Finite.dependent_image /-
theorem Finite.dependent_image {s : Set α} (hs : s.Finite) (F : ∀ i ∈ s, β) :
- { y : β | ∃ (x : _)(hx : x ∈ s), y = F x hx }.Finite :=
- by
- cases hs
+ { y : β | ∃ (x : _)(hx : x ∈ s), y = F x hx }.Finite := by cases hs;
simpa [range, eq_comm] using finite_range fun x : s => F x x.2
#align set.finite.dependent_image Set.Finite.dependent_image
-/
@@ -1301,8 +1211,7 @@ theorem Finite.map {α β} {s : Set α} : ∀ f : α → β, s.Finite → (f <$>
#print Set.Finite.of_finite_image /-
theorem Finite.of_finite_image {s : Set α} {f : α → β} (h : (f '' s).Finite) (hi : Set.InjOn f s) :
- s.Finite := by
- cases h
+ s.Finite := by cases h;
exact
⟨Fintype.ofInjective (fun a => (⟨f a.1, mem_image_of_mem f a.2⟩ : f '' s)) fun a b eq =>
Subtype.eq <| hi a.2 b.2 <| Subtype.ext_iff_val.1 Eq⟩
@@ -1311,9 +1220,7 @@ theorem Finite.of_finite_image {s : Set α} {f : α → β} (h : (f '' s).Finite
#print Set.finite_of_finite_preimage /-
theorem finite_of_finite_preimage {f : α → β} {s : Set β} (h : (f ⁻¹' s).Finite)
- (hs : s ⊆ range f) : s.Finite :=
- by
- rw [← image_preimage_eq_of_subset hs]
+ (hs : s ⊆ range f) : s.Finite := by rw [← image_preimage_eq_of_subset hs];
exact finite.image f h
#align set.finite_of_finite_preimage Set.finite_of_finite_preimage
-/
@@ -1356,11 +1263,8 @@ variable {s : Set α} {t : Set β}
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
#print Set.Finite.prod /-
-protected theorem Finite.prod (hs : s.Finite) (ht : t.Finite) : (s ×ˢ t : Set (α × β)).Finite :=
- by
- cases hs
- cases ht
- apply to_finite
+protected theorem Finite.prod (hs : s.Finite) (ht : t.Finite) : (s ×ˢ t : Set (α × β)).Finite := by
+ cases hs; cases ht; apply to_finite
#align set.finite.prod Set.Finite.prod
-/
@@ -1424,10 +1328,7 @@ protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by
#print Set.Finite.image2 /-
protected theorem Finite.image2 (f : α → β → γ) (hs : s.Finite) (ht : t.Finite) :
- (image2 f s t).Finite := by
- cases hs
- cases ht
- apply to_finite
+ (image2 f s t).Finite := by cases hs; cases ht; apply to_finite
#align set.finite.image2 Set.Finite.image2
-/
@@ -1507,9 +1408,7 @@ theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set
#print Set.union_finset_finite_of_range_finite /-
/-- A finite union of finsets is finite. -/
theorem union_finset_finite_of_range_finite (f : α → Finset β) (h : (range f).Finite) :
- (⋃ a, (f a : Set β)).Finite := by
- rw [← bUnion_range]
- exact h.bUnion fun y hy => y.finite_toSet
+ (⋃ a, (f a : Set β)).Finite := by rw [← bUnion_range]; exact h.bUnion fun y hy => y.finite_toSet
#align set.union_finset_finite_of_range_finite Set.union_finset_finite_of_range_finite
-/
@@ -1739,10 +1638,8 @@ theorem seq_of_forall_finite_exists {γ : Type _} {P : γ → Set γ → Prop}
convert Classical.choose_spec (h _ _)
ext x
constructor
- · rintro ⟨m, hmn, rfl⟩
- exact ⟨⟨m, hmn⟩, rfl⟩
- · rintro ⟨⟨m, hmn⟩, rfl⟩
- exact ⟨m, hmn, rfl⟩⟩
+ · rintro ⟨m, hmn, rfl⟩; exact ⟨⟨m, hmn⟩, rfl⟩
+ · rintro ⟨⟨m, hmn⟩, rfl⟩; exact ⟨m, hmn, rfl⟩⟩
#align set.seq_of_forall_finite_exists Set.seq_of_forall_finite_exists
-/
@@ -2021,18 +1918,14 @@ theorem Infinite.exists_ne_map_eq_of_mapsTo {s : Set α} {t : Set β} {f : α
#print Set.infinite_range_of_injective /-
theorem infinite_range_of_injective [Infinite α] {f : α → β} (hi : Injective f) :
- (range f).Infinite :=
- by
- rw [← image_univ, infinite_image_iff (inj_on_of_injective hi _)]
+ (range f).Infinite := by rw [← image_univ, infinite_image_iff (inj_on_of_injective hi _)];
exact infinite_univ
#align set.infinite_range_of_injective Set.infinite_range_of_injective
-/
#print Set.infinite_of_injective_forall_mem /-
theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α → β} (hi : Injective f)
- (hf : ∀ x : α, f x ∈ s) : s.Infinite :=
- by
- rw [← range_subset_iff] at hf
+ (hf : ∀ x : α, f x ∈ s) : s.Infinite := by rw [← range_subset_iff] at hf;
exact (infinite_range_of_injective hi).mono hf
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-/
@@ -2215,8 +2108,7 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
by
revert hf
refine' hs.induction_on _ _
- · intro hf
- simp [iSup_const]
+ · intro hf; simp [iSup_const]
· intro a s has hs ihs hf
rw [ball_insert_iff] at hf
simp only [iInf_insert, ← ihs hf.2]
@@ -2406,8 +2298,7 @@ theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α)
· exact fun h => absurd h not_nonempty_empty
intro a s his _ ih _
cases' s.eq_empty_or_nonempty with h h
- · use a
- simp [h]
+ · use a; simp [h]
rcases ih h with ⟨b, hb, ih⟩
by_cases f b ≤ f a
· refine' ⟨a, Set.mem_insert _ _, fun c hc hac => le_antisymm hac _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 52fa514ec337dd970d71d8de8d0fd68b455a1e54
+! leanprover-community/mathlib commit 5bb9fffd23f9f65b367f5d451da18cc60bf47335
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -754,6 +754,10 @@ end FintypeInstances
end Set
+theorem Equiv.set_finite_iff {s : Set α} {t : Set β} (hst : s ≃ t) : s.Finite ↔ t.Finite := by
+ simp_rw [← Set.finite_coe_iff, hst.finite_iff]
+#align equiv.set_finite_iff Equiv.set_finite_iff
+
/-! ### Finset -/
@@ -1208,6 +1212,20 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
#align set.finite.sInter Set.Finite.sInter
-/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i «expr ∉ » t) -/
+/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
+union `⋃ i, s i` is a finite set. -/
+theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Finite)
+ (hs : ∀ i ∈ t, (s i).Finite) (he : ∀ (i) (_ : i ∉ t), s i = ∅) : (⋃ i, s i).Finite :=
+ by
+ suffices (⋃ i, s i) ⊆ ⋃ i ∈ t, s i by exact (ht.bUnion hs).Subset this
+ refine' Union_subset fun i x hx => _
+ by_cases hi : i ∈ t
+ · exact mem_bUnion hi hx
+ · rw [he i hi, mem_empty_iff_false] at hx
+ contradiction
+#align set.finite.Union Set.Finite.iUnion
+
#print Set.Finite.bind /-
theorem Finite.bind {α β} {s : Set α} {f : α → Set β} (h : s.Finite) (hf : ∀ a ∈ s, (f a).Finite) :
(s >>= f).Finite :=
@@ -1639,10 +1657,7 @@ theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set
#align set.finite_subset_Union Set.finite_subset_iUnion
/- warning: set.eq_finite_Union_of_finite_subset_Union -> Set.eq_finite_iUnion_of_finite_subset_iUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {s : ι -> (Set.{u1} α)} {t : Set.{u1} α}, (Set.Finite.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) t (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => s i))) -> (Exists.{succ u2} (Set.{u2} ι) (fun (I : Set.{u2} ι) => And (Set.Finite.{u2} ι I) (Exists.{max (succ u2) (succ u1)} ((coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) -> (Set.{u1} α)) (fun (σ : (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) -> (Set.{u1} α)) => And (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))), Set.Finite.{u1} α (σ i)) (And (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (σ i) (s ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))))))) i))) (Eq.{succ u1} (Set.{u1} α) t (Set.iUnion.{u1, succ u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) (fun (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) => σ i))))))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} {s : ι -> (Set.{u2} α)} {t : Set.{u2} α}, (Set.Finite.{u2} α t) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) t (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => s i))) -> (Exists.{succ u1} (Set.{u1} ι) (fun (I : Set.{u1} ι) => And (Set.Finite.{u1} ι I) (Exists.{max (succ u2) (succ u1)} ((Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) -> (Set.{u2} α)) (fun (σ : (Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) -> (Set.{u2} α)) => And (forall (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))), Set.Finite.{u2} α (σ i)) (And (forall (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))), HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (σ i) (s (Subtype.val.{succ u1} ι (fun (x : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) i))) (Eq.{succ u2} (Set.{u2} α) t (Set.iUnion.{u2, succ u1} α (Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) (fun (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) => σ i))))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_iUnion_of_finite_subset_iUnionₓ'. -/
theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
(h : t ⊆ ⋃ i, s i) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -2057,7 +2057,7 @@ variable [Preorder α] [Nonempty α] {s : Set α}
/- warning: set.infinite_of_forall_exists_gt -> Set.infinite_of_forall_exists_gt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) a b))) -> (Set.Infinite.{u1} α s)
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α _inst_1) a b))) -> (Set.Infinite.{u1} α s)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) (LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) a b))) -> (Set.Infinite.{u1} α s)
Case conversion may be inaccurate. Consider using '#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gtₓ'. -/
@@ -2072,7 +2072,7 @@ theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinit
/- warning: set.infinite_of_forall_exists_lt -> Set.infinite_of_forall_exists_lt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) b a))) -> (Set.Infinite.{u1} α s)
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toHasLt.{u1} α _inst_1) b a))) -> (Set.Infinite.{u1} α s)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) (LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) b a))) -> (Set.Infinite.{u1} α s)
Case conversion may be inaccurate. Consider using '#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_ltₓ'. -/
@@ -2082,21 +2082,29 @@ theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinit
end Preorder
-#print Set.finite_isTop /-
+/- warning: set.finite_is_top -> Set.finite_isTop is a dubious translation:
+lean 3 declaration is
+ forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsTop.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
+but is expected to have type
+ forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
+Case conversion may be inaccurate. Consider using '#align set.finite_is_top Set.finite_isTopₓ'. -/
theorem finite_isTop (α : Type _) [PartialOrder α] : { x : α | IsTop x }.Finite :=
(subsingleton_isTop α).Finite
#align set.finite_is_top Set.finite_isTop
--/
-#print Set.finite_isBot /-
+/- warning: set.finite_is_bot -> Set.finite_isBot is a dubious translation:
+lean 3 declaration is
+ forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
+but is expected to have type
+ forall (α : Type.{u1}) [_inst_1 : PartialOrder.{u1} α], Set.Finite.{u1} α (setOf.{u1} α (fun (x : α) => IsBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α _inst_1)) x))
+Case conversion may be inaccurate. Consider using '#align set.finite_is_bot Set.finite_isBotₓ'. -/
theorem finite_isBot (α : Type _) [PartialOrder α] : { x : α | IsBot x }.Finite :=
(subsingleton_isBot α).Finite
#align set.finite_is_bot Set.finite_isBot
--/
/- warning: set.infinite.exists_lt_map_eq_of_maps_to -> Set.Infinite.exists_lt_map_eq_of_mapsTo is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α} {t : Set.{u2} β} {f : α -> β}, (Set.Infinite.{u1} α s) -> (Set.MapsTo.{u1, u2} α β f s t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (x : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) (Eq.{succ u2} β (f x) (f y)))))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α} {t : Set.{u2} β} {f : α -> β}, (Set.Infinite.{u1} α s) -> (Set.MapsTo.{u1, u2} α β f s t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (x : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) (Eq.{succ u2} β (f x) (f y)))))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α} {t : Set.{u2} β} {f : α -> β}, (Set.Infinite.{u1} α s) -> (Set.MapsTo.{u1, u2} α β f s t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) (Eq.{succ u2} β (f x) (f y)))))))
Case conversion may be inaccurate. Consider using '#align set.infinite.exists_lt_map_eq_of_maps_to Set.Infinite.exists_lt_map_eq_of_mapsToₓ'. -/
@@ -2106,7 +2114,12 @@ theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : S
hxy.lt_or_lt.elim (fun hxy => ⟨x, hx, y, hy, hxy, hf⟩) fun hyx => ⟨y, hy, x, hx, hyx, hf.symm⟩
#align set.infinite.exists_lt_map_eq_of_maps_to Set.Infinite.exists_lt_map_eq_of_mapsTo
-#print Set.Finite.exists_lt_map_eq_of_forall_mem /-
+/- warning: set.finite.exists_lt_map_eq_of_forall_mem -> Set.Finite.exists_lt_map_eq_of_forall_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : Infinite.{succ u1} α] {t : Set.{u2} β} {f : α -> β}, (forall (a : α), Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f a) t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (a : α) => Exists.{succ u1} α (fun (b : α) => And (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) a b) (Eq.{succ u2} β (f a) (f b)))))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u1} α] [_inst_2 : Infinite.{succ u1} α] {t : Set.{u2} β} {f : α -> β}, (forall (a : α), Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (f a) t) -> (Set.Finite.{u2} β t) -> (Exists.{succ u1} α (fun (a : α) => Exists.{succ u1} α (fun (b : α) => And (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) a b) (Eq.{succ u2} β (f a) (f b)))))
+Case conversion may be inaccurate. Consider using '#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_memₓ'. -/
theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t : Set β} {f : α → β}
(hf : ∀ a, f a ∈ t) (ht : t.Finite) : ∃ a b, a < b ∧ f a = f b :=
by
@@ -2114,11 +2127,10 @@ theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t
obtain ⟨a, -, b, -, h⟩ := (@infinite_univ α _).exists_lt_map_eq_of_mapsTo hf ht
exact ⟨a, b, h⟩
#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_mem
--/
/- warning: set.exists_min_image -> Set.exists_min_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f a) (f b)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f a) (f b)))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f a) (f b)))))
Case conversion may be inaccurate. Consider using '#align set.exists_min_image Set.exists_min_imageₓ'. -/
@@ -2131,7 +2143,7 @@ theorem exists_min_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.F
/- warning: set.exists_max_image -> Set.exists_max_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f b) (f a)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f b) (f a)))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) (forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f b) (f a)))))
Case conversion may be inaccurate. Consider using '#align set.exists_max_image Set.exists_max_imageₓ'. -/
@@ -2142,7 +2154,12 @@ theorem exists_max_image [LinearOrder β] (s : Set α) (f : α → β) (h1 : s.F
h1.to_finset.exists_max_image f ⟨x, h1.mem_to_finset.2 hx⟩
#align set.exists_max_image Set.exists_max_image
-#print Set.exists_lower_bound_image /-
+/- warning: set.exists_lower_bound_image -> Set.exists_lower_bound_image is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f a) (f b))))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f a) (f b))))
+Case conversion may be inaccurate. Consider using '#align set.exists_lower_bound_image Set.exists_lower_bound_imageₓ'. -/
theorem exists_lower_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set α) (f : α → β)
(h : s.Finite) : ∃ a : α, ∀ b ∈ s, f a ≤ f b :=
by
@@ -2153,9 +2170,13 @@ theorem exists_lower_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
⟨x₀, fun x hx => hx₀ x hx⟩
· exact Nonempty.elim hα fun a => ⟨a, fun x hx => absurd (Set.nonempty_of_mem hx) hs⟩
#align set.exists_lower_bound_image Set.exists_lower_bound_image
--/
-#print Set.exists_upper_bound_image /-
+/- warning: set.exists_upper_bound_image -> Set.exists_upper_bound_image is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f b) (f a))))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [hα : Nonempty.{succ u1} α] [_inst_1 : LinearOrder.{u2} β] (s : Set.{u1} α) (f : α -> β), (Set.Finite.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => forall (b : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f b) (f a))))
+Case conversion may be inaccurate. Consider using '#align set.exists_upper_bound_image Set.exists_upper_bound_imageₓ'. -/
theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set α) (f : α → β)
(h : s.Finite) : ∃ a : α, ∀ b ∈ s, f b ≤ f a :=
by
@@ -2166,11 +2187,10 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
⟨x₀, fun x hx => hx₀ x hx⟩
· exact Nonempty.elim hα fun a => ⟨a, fun x hx => absurd (Set.nonempty_of_mem hx) hs⟩
#align set.exists_upper_bound_image Set.exists_upper_bound_image
--/
/- warning: set.finite.supr_binfi_of_monotone -> Set.Finite.iSup_biInf_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13041 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13043 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13041 x._@.Mathlib.Data.Set.Finite._hyg.13043)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotoneₓ'. -/
@@ -2190,7 +2210,7 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
/- warning: set.finite.supr_binfi_of_antitone -> Set.Finite.iSup_biInf_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13263 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13265 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13263 x._@.Mathlib.Data.Set.Finite._hyg.13265))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitoneₓ'. -/
@@ -2202,7 +2222,7 @@ theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonem
/- warning: set.finite.infi_bsupr_of_monotone -> Set.Finite.iInf_biSup_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13443 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13445 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13443 x._@.Mathlib.Data.Set.Finite._hyg.13445))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotoneₓ'. -/
@@ -2214,7 +2234,7 @@ theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
/- warning: set.finite.infi_bsupr_of_antitone -> Set.Finite.iInf_biSup_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13615 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13617 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13615 x._@.Mathlib.Data.Set.Finite._hyg.13617)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitoneₓ'. -/
@@ -2226,7 +2246,7 @@ theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonem
/- warning: supr_infi_of_monotone -> Set.iSup_iInf_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13787 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13789 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13787 x._@.Mathlib.Data.Set.Finite._hyg.13789)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.iSup_iInf_of_monotoneₓ'. -/
@@ -2238,7 +2258,7 @@ theorem Set.iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'
/- warning: supr_infi_of_antitone -> Set.iSup_iInf_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13924 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13926 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13924 x._@.Mathlib.Data.Set.Finite._hyg.13926))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.iSup_iInf_of_antitoneₓ'. -/
@@ -2250,7 +2270,7 @@ theorem Set.iSup_iInf_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'
/- warning: infi_supr_of_monotone -> Set.iInf_iSup_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14062 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14064 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14062 x._@.Mathlib.Data.Set.Finite._hyg.14064))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.iInf_iSup_of_monotoneₓ'. -/
@@ -2262,7 +2282,7 @@ theorem Set.iInf_iSup_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'
/- warning: infi_supr_of_antitone -> Set.iInf_iSup_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14194 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14196 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14194 x._@.Mathlib.Data.Set.Finite._hyg.14196)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.iInf_iSup_of_antitoneₓ'. -/
@@ -2274,7 +2294,7 @@ theorem Set.iInf_iSup_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'
/- warning: set.Union_Inter_of_monotone -> Set.iUnion_iInter_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14323 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14325 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14323 x._@.Mathlib.Data.Set.Finite._hyg.14325)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotoneₓ'. -/
@@ -2287,7 +2307,7 @@ theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'
/- warning: set.Union_Inter_of_antitone -> Set.iUnion_iInter_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14445 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14447 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14445 x._@.Mathlib.Data.Set.Finite._hyg.14447))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitoneₓ'. -/
@@ -2300,7 +2320,7 @@ theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'
/- warning: set.Inter_Union_of_monotone -> Set.iInter_iUnion_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14567 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14569 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14567 x._@.Mathlib.Data.Set.Finite._hyg.14569))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotoneₓ'. -/
@@ -2313,7 +2333,7 @@ theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'
/- warning: set.Inter_Union_of_antitone -> Set.iInter_iUnion_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toHasLe.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14686 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14688 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14686 x._@.Mathlib.Data.Set.Finite._hyg.14688)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitoneₓ'. -/
@@ -2360,7 +2380,7 @@ theorem finite_range_findGreatest {P : α → ℕ → Prop} [∀ x, DecidablePre
/- warning: set.finite.exists_maximal_wrt -> Set.Finite.exists_maximal_wrt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PartialOrder.{u2} β] (f : α -> β) (s : Set.{u1} α), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (a' : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a' s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β _inst_1)) (f a) (f a')) -> (Eq.{succ u2} β (f a) (f a')))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PartialOrder.{u2} β] (f : α -> β) (s : Set.{u1} α), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => forall (a' : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a' s) -> (LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β _inst_1)) (f a) (f a')) -> (Eq.{succ u2} β (f a) (f a')))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PartialOrder.{u2} β] (f : α -> β) (s : Set.{u1} α), (Set.Finite.{u1} α s) -> (Set.Nonempty.{u1} α s) -> (Exists.{succ u1} α (fun (a : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a s) (forall (a' : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a' s) -> (LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β _inst_1)) (f a) (f a')) -> (Eq.{succ u2} β (f a) (f a')))))
Case conversion may be inaccurate. Consider using '#align set.finite.exists_maximal_wrt Set.Finite.exists_maximal_wrtₓ'. -/
@@ -2465,7 +2485,12 @@ end Finset
variable [LinearOrder α]
-#print Finite.of_forall_not_lt_lt /-
+/- warning: finite.of_forall_not_lt_lt -> Finite.of_forall_not_lt_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α], (forall {{x : α}} {{y : α}} {{z : α}}, (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y z) -> False) -> (Finite.{succ u1} α)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α], (forall {{x : α}} {{y : α}} {{z : α}}, (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y z) -> False) -> (Finite.{succ u1} α)
+Case conversion may be inaccurate. Consider using '#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_ltₓ'. -/
/-- If a linear order does not contain any triple of elements `x < y < z`, then this type
is finite. -/
theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z → False) : Finite α :=
@@ -2475,16 +2500,19 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
refine' @Finite.of_fintype α ⟨{x, y}, fun z => _⟩
simpa [hne] using eq_or_eq_or_eq_of_forall_not_lt_lt h z x y
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
--/
+/- warning: set.finite_of_forall_not_lt_lt -> Set.finite_of_forall_not_lt_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (forall (z : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) x y) -> (LT.lt.{u1} α (Preorder.toHasLt.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1))))) y z) -> False))) -> (Set.Finite.{u1} α s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] {s : Set.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (forall (z : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z s) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) x y) -> (LT.lt.{u1} α (Preorder.toLT.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1)))))) y z) -> False))) -> (Set.Finite.{u1} α s)
+Case conversion may be inaccurate. Consider using '#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_ltₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
-#print Set.finite_of_forall_not_lt_lt /-
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
(h : ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s) (z) (_ : z ∈ s), x < y → y < z → False) : Set.Finite s :=
@Set.toFinite _ s <| Finite.of_forall_not_lt_lt <| by simpa only [SetCoe.forall'] using h
#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
--/
/- warning: set.finite_diff_Union_Ioo -> Set.finite_diff_iUnion_Ioo is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -539,40 +539,40 @@ instance fintypeDiffLeft (s t : Set α) [Fintype s] [DecidablePred (· ∈ t)] :
Set.fintypeSep s (· ∈ tᶜ)
#align set.fintype_diff_left Set.fintypeDiffLeft
-#print Set.fintypeUnionᵢ /-
-instance fintypeUnionᵢ [DecidableEq α] [Fintype (PLift ι)] (f : ι → Set α) [∀ i, Fintype (f i)] :
+#print Set.fintypeiUnion /-
+instance fintypeiUnion [DecidableEq α] [Fintype (PLift ι)] (f : ι → Set α) [∀ i, Fintype (f i)] :
Fintype (⋃ i, f i) :=
- Fintype.ofFinset (Finset.univ.bunionᵢ fun i : PLift ι => (f i.down).toFinset) <| by simp
-#align set.fintype_Union Set.fintypeUnionᵢ
+ Fintype.ofFinset (Finset.univ.biUnion fun i : PLift ι => (f i.down).toFinset) <| by simp
+#align set.fintype_Union Set.fintypeiUnion
-/
-#print Set.fintypeUnionₛ /-
-instance fintypeUnionₛ [DecidableEq α] {s : Set (Set α)} [Fintype s]
+#print Set.fintypesUnion /-
+instance fintypesUnion [DecidableEq α] {s : Set (Set α)} [Fintype s]
[H : ∀ t : s, Fintype (t : Set α)] : Fintype (⋃₀ s) :=
by
rw [sUnion_eq_Union]
- exact @Set.fintypeUnionᵢ _ _ _ _ _ H
-#align set.fintype_sUnion Set.fintypeUnionₛ
+ exact @Set.fintypeiUnion _ _ _ _ _ H
+#align set.fintype_sUnion Set.fintypesUnion
-/
-#print Set.fintypeBUnionᵢ /-
+#print Set.fintypeBiUnion /-
/-- A union of sets with `fintype` structure over a set with `fintype` structure has a `fintype`
structure. -/
-def fintypeBUnionᵢ [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
+def fintypeBiUnion [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
(H : ∀ i ∈ s, Fintype (t i)) : Fintype (⋃ x ∈ s, t x) :=
Fintype.ofFinset
- (s.toFinset.attach.bunionᵢ fun x =>
+ (s.toFinset.attach.biUnion fun x =>
haveI := H x (by simpa using x.property)
(t x).toFinset) <|
by simp
-#align set.fintype_bUnion Set.fintypeBUnionᵢ
+#align set.fintype_bUnion Set.fintypeBiUnion
-/
-#print Set.fintypeBUnionᵢ' /-
-instance fintypeBUnionᵢ' [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
+#print Set.fintypeBiUnion' /-
+instance fintypeBiUnion' [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
[∀ i, Fintype (t i)] : Fintype (⋃ x ∈ s, t x) :=
- Fintype.ofFinset (s.toFinset.bunionᵢ fun x => (t x).toFinset) <| by simp
-#align set.fintype_bUnion' Set.fintypeBUnionᵢ'
+ Fintype.ofFinset (s.toFinset.biUnion fun x => (t x).toFinset) <| by simp
+#align set.fintype_bUnion' Set.fintypeBiUnion'
-/
#print Set.fintypeBind /-
@@ -580,14 +580,14 @@ instance fintypeBUnionᵢ' [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype
each `f a`, `a ∈ s`, has a `fintype` structure, then `s >>= f` has a `fintype` structure. -/
def fintypeBind {α β} [DecidableEq β] (s : Set α) [Fintype s] (f : α → Set β)
(H : ∀ a ∈ s, Fintype (f a)) : Fintype (s >>= f) :=
- Set.fintypeBUnionᵢ s f H
+ Set.fintypeBiUnion s f H
#align set.fintype_bind Set.fintypeBind
-/
#print Set.fintypeBind' /-
instance fintypeBind' {α β} [DecidableEq β] (s : Set α) [Fintype s] (f : α → Set β)
[H : ∀ a, Fintype (f a)] : Fintype (s >>= f) :=
- Set.fintypeBUnionᵢ' s f
+ Set.fintypeBiUnion' s f
#align set.fintype_bind' Set.fintypeBind'
-/
@@ -733,7 +733,7 @@ instance fintypeImage2 [DecidableEq γ] (f : α → β → γ) (s : Set α) (t :
instance fintypeSeq [DecidableEq β] (f : Set (α → β)) (s : Set α) [Fintype f] [Fintype s] :
Fintype (f.seq s) := by
rw [seq_def]
- apply Set.fintypeBUnionᵢ'
+ apply Set.fintypeBiUnion'
#align set.fintype_seq Set.fintypeSeq
-/
@@ -898,58 +898,58 @@ instance finite_range (f : ι → α) [Finite ι] : Finite (range f) :=
#align finite.set.finite_range Finite.Set.finite_range
-/
-#print Finite.Set.finite_unionᵢ /-
-instance finite_unionᵢ [Finite ι] (f : ι → Set α) [∀ i, Finite (f i)] : Finite (⋃ i, f i) :=
+#print Finite.Set.finite_iUnion /-
+instance finite_iUnion [Finite ι] (f : ι → Set α) [∀ i, Finite (f i)] : Finite (⋃ i, f i) :=
by
rw [Union_eq_range_psigma]
apply Set.finite_range
-#align finite.set.finite_Union Finite.Set.finite_unionᵢ
+#align finite.set.finite_Union Finite.Set.finite_iUnion
-/
-#print Finite.Set.finite_unionₛ /-
-instance finite_unionₛ {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t : Set α)] :
+#print Finite.Set.finite_sUnion /-
+instance finite_sUnion {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t : Set α)] :
Finite (⋃₀ s) := by
rw [sUnion_eq_Union]
- exact @Finite.Set.finite_unionᵢ _ _ _ _ H
-#align finite.set.finite_sUnion Finite.Set.finite_unionₛ
+ exact @Finite.Set.finite_iUnion _ _ _ _ H
+#align finite.set.finite_sUnion Finite.Set.finite_sUnion
-/
-/- warning: finite.set.finite_bUnion -> Finite.Set.finite_bunionᵢ is a dubious translation:
+/- warning: finite.set.finite_bUnion -> Finite.Set.finite_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : Set.{u2} ι) [_inst_1 : Finite.{succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) s)] (t : ι -> (Set.{u1} α)), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (t i)))) -> (Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι (fun (x : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x s) => t x)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} (s : Set.{u2} ι) [_inst_1 : Finite.{succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) s)] (t : ι -> (Set.{u1} α)), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (t i)))) -> (Finite.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) (Set.iUnion.{u1, succ u2} α ι (fun (x : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x s) => t x)))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} (s : Set.{u1} ι) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} ι s)] (t : ι -> (Set.{u2} α)), (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Finite.{succ u2} (Set.Elem.{u2} α (t i)))) -> (Finite.{succ u2} (Set.Elem.{u2} α (Set.unionᵢ.{u2, succ u1} α ι (fun (x : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x s) => t x)))))
-Case conversion may be inaccurate. Consider using '#align finite.set.finite_bUnion Finite.Set.finite_bunionᵢₓ'. -/
-theorem finite_bunionᵢ {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
+ forall {α : Type.{u2}} {ι : Type.{u1}} (s : Set.{u1} ι) [_inst_1 : Finite.{succ u1} (Set.Elem.{u1} ι s)] (t : ι -> (Set.{u2} α)), (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Finite.{succ u2} (Set.Elem.{u2} α (t i)))) -> (Finite.{succ u2} (Set.Elem.{u2} α (Set.iUnion.{u2, succ u1} α ι (fun (x : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x s) => t x)))))
+Case conversion may be inaccurate. Consider using '#align finite.set.finite_bUnion Finite.Set.finite_biUnionₓ'. -/
+theorem finite_biUnion {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
(H : ∀ i ∈ s, Finite (t i)) : Finite (⋃ x ∈ s, t x) :=
by
rw [bUnion_eq_Union]
haveI : ∀ i : s, Finite (t i) := fun i => H i i.property
infer_instance
-#align finite.set.finite_bUnion Finite.Set.finite_bunionᵢ
+#align finite.set.finite_bUnion Finite.Set.finite_biUnion
-#print Finite.Set.finite_bunionᵢ' /-
-instance finite_bunionᵢ' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α) [∀ i, Finite (t i)] :
+#print Finite.Set.finite_biUnion' /-
+instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α) [∀ i, Finite (t i)] :
Finite (⋃ x ∈ s, t x) :=
- finite_bunionᵢ s t fun i h => inferInstance
-#align finite.set.finite_bUnion' Finite.Set.finite_bunionᵢ'
+ finite_biUnion s t fun i h => inferInstance
+#align finite.set.finite_bUnion' Finite.Set.finite_biUnion'
-/
-#print Finite.Set.finite_bunionᵢ'' /-
+#print Finite.Set.finite_biUnion'' /-
/-- Example: `finite (⋃ (i < n), f i)` where `f : ℕ → set α` and `[∀ i, finite (f i)]`
(when given instances from `data.nat.interval`).
-/
-instance finite_bunionᵢ'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
+instance finite_biUnion'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
[∀ i, Finite (t i)] : Finite (⋃ (x) (h : p x), t x) :=
- @Finite.Set.finite_bunionᵢ' _ _ (setOf p) h t _
-#align finite.set.finite_bUnion'' Finite.Set.finite_bunionᵢ''
+ @Finite.Set.finite_biUnion' _ _ (setOf p) h t _
+#align finite.set.finite_bUnion'' Finite.Set.finite_biUnion''
-/
-#print Finite.Set.finite_interᵢ /-
-instance finite_interᵢ {ι : Sort _} [Nonempty ι] (t : ι → Set α) [∀ i, Finite (t i)] :
+#print Finite.Set.finite_iInter /-
+instance finite_iInter {ι : Sort _} [Nonempty ι] (t : ι → Set α) [∀ i, Finite (t i)] :
Finite (⋂ i, t i) :=
- Finite.Set.subset (t <| Classical.arbitrary ι) (interᵢ_subset _ _)
-#align finite.set.finite_Inter Finite.Set.finite_interᵢ
+ Finite.Set.subset (t <| Classical.arbitrary ι) (iInter_subset _ _)
+#align finite.set.finite_Inter Finite.Set.finite_iInter
-/
#print Finite.Set.finite_insert /-
@@ -1155,63 +1155,63 @@ theorem Finite.of_diff {s t : Set α} (hd : (s \ t).Finite) (ht : t.Finite) : s.
(hd.union ht).Subset <| subset_diff_union _ _
#align set.finite.of_diff Set.Finite.of_diff
-#print Set.finite_unionᵢ /-
-theorem finite_unionᵢ [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite :=
+#print Set.finite_iUnion /-
+theorem finite_iUnion [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite :=
by
haveI := fun i => (H i).Fintype
apply to_finite
-#align set.finite_Union Set.finite_unionᵢ
+#align set.finite_Union Set.finite_iUnion
-/
-#print Set.Finite.unionₛ /-
-theorem Finite.unionₛ {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.Finite t) :
+#print Set.Finite.sUnion /-
+theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.Finite t) :
(⋃₀ s).Finite := by
cases hs
haveI := fun i : s => (H i i.2).to_subtype
apply to_finite
-#align set.finite.sUnion Set.Finite.unionₛ
+#align set.finite.sUnion Set.Finite.sUnion
-/
-/- warning: set.finite.bUnion -> Set.Finite.bunionᵢ is a dubious translation:
+/- warning: set.finite.bUnion -> Set.Finite.biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {s : Set.{u2} ι}, (Set.Finite.{u2} ι s) -> (forall {t : ι -> (Set.{u1} α)}, (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Set.Finite.{u1} α (t i))) -> (Set.Finite.{u1} α (Set.unionᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) => t i)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {s : Set.{u2} ι}, (Set.Finite.{u2} ι s) -> (forall {t : ι -> (Set.{u1} α)}, (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Set.Finite.{u1} α (t i))) -> (Set.Finite.{u1} α (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) => t i)))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {t : ι -> (Set.{u2} α)}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Set.Finite.{u2} α (t i))) -> (Set.Finite.{u2} α (Set.unionᵢ.{u2, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) => t i)))))
-Case conversion may be inaccurate. Consider using '#align set.finite.bUnion Set.Finite.bunionᵢₓ'. -/
-theorem Finite.bunionᵢ {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
+ forall {α : Type.{u2}} {ι : Type.{u1}} {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {t : ι -> (Set.{u2} α)}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Set.Finite.{u2} α (t i))) -> (Set.Finite.{u2} α (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) => t i)))))
+Case conversion may be inaccurate. Consider using '#align set.finite.bUnion Set.Finite.biUnionₓ'. -/
+theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
(ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
classical
cases hs
haveI := fintype_bUnion s t fun i hi => (ht i hi).Fintype
apply to_finite
-#align set.finite.bUnion Set.Finite.bunionᵢ
+#align set.finite.bUnion Set.Finite.biUnion
-/- warning: set.finite.bUnion' -> Set.Finite.bunionᵢ' is a dubious translation:
+/- warning: set.finite.bUnion' -> Set.Finite.biUnion' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {s : Set.{u2} ι}, (Set.Finite.{u2} ι s) -> (forall {t : forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Set.{u1} α)}, (forall (i : ι) (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s), Set.Finite.{u1} α (t i H)) -> (Set.Finite.{u1} α (Set.unionᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) => t i H)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {s : Set.{u2} ι}, (Set.Finite.{u2} ι s) -> (forall {t : forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) -> (Set.{u1} α)}, (forall (i : ι) (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s), Set.Finite.{u1} α (t i H)) -> (Set.Finite.{u1} α (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i s) => t i H)))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {t : forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Set.{u2} α)}, (forall (i : ι) (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s), Set.Finite.{u2} α (t i H)) -> (Set.Finite.{u2} α (Set.unionᵢ.{u2, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) => t i H)))))
-Case conversion may be inaccurate. Consider using '#align set.finite.bUnion' Set.Finite.bunionᵢ'ₓ'. -/
+ forall {α : Type.{u2}} {ι : Type.{u1}} {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {t : forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) -> (Set.{u2} α)}, (forall (i : ι) (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s), Set.Finite.{u2} α (t i H)) -> (Set.Finite.{u2} α (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i s) => t i H)))))
+Case conversion may be inaccurate. Consider using '#align set.finite.bUnion' Set.Finite.biUnion'ₓ'. -/
/-- Dependent version of `finite.bUnion`. -/
-theorem Finite.bunionᵢ' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
+theorem Finite.biUnion' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
(ht : ∀ i ∈ s, (t i ‹_›).Finite) : (⋃ i ∈ s, t i ‹_›).Finite :=
by
cases hs
rw [bUnion_eq_Union]
apply finite_Union fun i : s => ht i.1 i.2
-#align set.finite.bUnion' Set.Finite.bunionᵢ'
+#align set.finite.bUnion' Set.Finite.biUnion'
-#print Set.Finite.interₛ /-
-theorem Finite.interₛ {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
+#print Set.Finite.sInter /-
+theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
(⋂₀ s).Finite :=
- hf.Subset (interₛ_subset_of_mem ht)
-#align set.finite.sInter Set.Finite.interₛ
+ hf.Subset (sInter_subset_of_mem ht)
+#align set.finite.sInter Set.Finite.sInter
-/
#print Set.Finite.bind /-
theorem Finite.bind {α β} {s : Set α} {f : α → Set β} (h : s.Finite) (hf : ∀ a ∈ s, (f a).Finite) :
(s >>= f).Finite :=
- h.bunionᵢ hf
+ h.biUnion hf
#align set.finite.bind Set.Finite.bind
-/
@@ -1622,13 +1622,13 @@ theorem forall_finite_image_eval_iff {δ : Type _} [Finite δ] {κ : δ → Type
⟨fun h => (Finite.pi h).Subset <| subset_pi_eval_image _ _, fun h d => h.image _⟩
#align set.forall_finite_image_eval_iff Set.forall_finite_image_eval_iff
-/- warning: set.finite_subset_Union -> Set.finite_subset_unionᵢ is a dubious translation:
+/- warning: set.finite_subset_Union -> Set.finite_subset_iUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall {ι : Type.{u2}} {t : ι -> (Set.{u1} α)}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.unionᵢ.{u1, succ u2} α ι (fun (i : ι) => t i))) -> (Exists.{succ u2} (Set.{u2} ι) (fun (I : Set.{u2} ι) => And (Set.Finite.{u2} ι I) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.unionᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I) => t i)))))))
+ forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall {ι : Type.{u2}} {t : ι -> (Set.{u1} α)}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => t i))) -> (Exists.{succ u2} (Set.{u2} ι) (fun (I : Set.{u2} ι) => And (Set.Finite.{u2} ι I) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I) => t i)))))))
but is expected to have type
- forall {α : Type.{u2}} {s : Set.{u2} α}, (Set.Finite.{u2} α s) -> (forall {ι : Type.{u1}} {t : ι -> (Set.{u2} α)}, (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (Set.unionᵢ.{u2, succ u1} α ι (fun (i : ι) => t i))) -> (Exists.{succ u1} (Set.{u1} ι) (fun (I : Set.{u1} ι) => And (Set.Finite.{u1} ι I) (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (Set.unionᵢ.{u2, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I) => t i)))))))
-Case conversion may be inaccurate. Consider using '#align set.finite_subset_Union Set.finite_subset_unionᵢₓ'. -/
-theorem finite_subset_unionᵢ {s : Set α} (hs : s.Finite) {ι} {t : ι → Set α} (h : s ⊆ ⋃ i, t i) :
+ forall {α : Type.{u2}} {s : Set.{u2} α}, (Set.Finite.{u2} α s) -> (forall {ι : Type.{u1}} {t : ι -> (Set.{u2} α)}, (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => t i))) -> (Exists.{succ u1} (Set.{u1} ι) (fun (I : Set.{u1} ι) => And (Set.Finite.{u1} ι I) (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I) => t i)))))))
+Case conversion may be inaccurate. Consider using '#align set.finite_subset_Union Set.finite_subset_iUnionₓ'. -/
+theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set α} (h : s ⊆ ⋃ i, t i) :
∃ I : Set ι, I.Finite ∧ s ⊆ ⋃ i ∈ I, t i :=
by
cases hs
@@ -1636,20 +1636,20 @@ theorem finite_subset_unionᵢ {s : Set α} (hs : s.Finite) {ι} {t : ι → Set
refine' ⟨range f, finite_range f, fun x hx => _⟩
rw [bUnion_range, mem_Union]
exact ⟨⟨x, hx⟩, hf _⟩
-#align set.finite_subset_Union Set.finite_subset_unionᵢ
+#align set.finite_subset_Union Set.finite_subset_iUnion
-/- warning: set.eq_finite_Union_of_finite_subset_Union -> Set.eq_finite_unionᵢ_of_finite_subset_unionᵢ is a dubious translation:
+/- warning: set.eq_finite_Union_of_finite_subset_Union -> Set.eq_finite_iUnion_of_finite_subset_iUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {s : ι -> (Set.{u1} α)} {t : Set.{u1} α}, (Set.Finite.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) t (Set.unionᵢ.{u1, succ u2} α ι (fun (i : ι) => s i))) -> (Exists.{succ u2} (Set.{u2} ι) (fun (I : Set.{u2} ι) => And (Set.Finite.{u2} ι I) (Exists.{max (succ u2) (succ u1)} ((coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) -> (Set.{u1} α)) (fun (σ : (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) -> (Set.{u1} α)) => And (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))), Set.Finite.{u1} α (σ i)) (And (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (σ i) (s ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))))))) i))) (Eq.{succ u1} (Set.{u1} α) t (Set.unionᵢ.{u1, succ u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) (fun (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) => σ i))))))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {s : ι -> (Set.{u1} α)} {t : Set.{u1} α}, (Set.Finite.{u1} α t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) t (Set.iUnion.{u1, succ u2} α ι (fun (i : ι) => s i))) -> (Exists.{succ u2} (Set.{u2} ι) (fun (I : Set.{u2} ι) => And (Set.Finite.{u2} ι I) (Exists.{max (succ u2) (succ u1)} ((coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) -> (Set.{u1} α)) (fun (σ : (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) -> (Set.{u1} α)) => And (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))), Set.Finite.{u1} α (σ i)) (And (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (σ i) (s ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))))))) i))) (Eq.{succ u1} (Set.{u1} α) t (Set.iUnion.{u1, succ u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) (fun (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (setOf.{u2} ι (fun (i : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i I))) => σ i))))))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} {s : ι -> (Set.{u2} α)} {t : Set.{u2} α}, (Set.Finite.{u2} α t) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) t (Set.unionᵢ.{u2, succ u1} α ι (fun (i : ι) => s i))) -> (Exists.{succ u1} (Set.{u1} ι) (fun (I : Set.{u1} ι) => And (Set.Finite.{u1} ι I) (Exists.{max (succ u2) (succ u1)} ((Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) -> (Set.{u2} α)) (fun (σ : (Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) -> (Set.{u2} α)) => And (forall (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))), Set.Finite.{u2} α (σ i)) (And (forall (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))), HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (σ i) (s (Subtype.val.{succ u1} ι (fun (x : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) i))) (Eq.{succ u2} (Set.{u2} α) t (Set.unionᵢ.{u2, succ u1} α (Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) (fun (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) => σ i))))))))
-Case conversion may be inaccurate. Consider using '#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_unionᵢ_of_finite_subset_unionᵢₓ'. -/
-theorem eq_finite_unionᵢ_of_finite_subset_unionᵢ {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
+ forall {α : Type.{u2}} {ι : Type.{u1}} {s : ι -> (Set.{u2} α)} {t : Set.{u2} α}, (Set.Finite.{u2} α t) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) t (Set.iUnion.{u2, succ u1} α ι (fun (i : ι) => s i))) -> (Exists.{succ u1} (Set.{u1} ι) (fun (I : Set.{u1} ι) => And (Set.Finite.{u1} ι I) (Exists.{max (succ u2) (succ u1)} ((Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) -> (Set.{u2} α)) (fun (σ : (Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) -> (Set.{u2} α)) => And (forall (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))), Set.Finite.{u2} α (σ i)) (And (forall (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))), HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (σ i) (s (Subtype.val.{succ u1} ι (fun (x : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) i))) (Eq.{succ u2} (Set.{u2} α) t (Set.iUnion.{u2, succ u1} α (Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) (fun (i : Set.Elem.{u1} ι (setOf.{u1} ι (fun (i : ι) => Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i I))) => σ i))))))))
+Case conversion may be inaccurate. Consider using '#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_iUnion_of_finite_subset_iUnionₓ'. -/
+theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
(h : t ⊆ ⋃ i, s i) :
∃ I : Set ι,
I.Finite ∧
∃ σ : { i | i ∈ I } → Set α, (∀ i, (σ i).Finite) ∧ (∀ i, σ i ⊆ s i) ∧ t = ⋃ i, σ i :=
- let ⟨I, Ifin, hI⟩ := finite_subset_unionᵢ tfin h
+ let ⟨I, Ifin, hI⟩ := finite_subset_iUnion tfin h
⟨I, Ifin, fun x => s x ∩ t, fun i => tfin.Subset (inter_subset_right _ _), fun i =>
inter_subset_left _ _, by
ext x
@@ -1660,7 +1660,7 @@ theorem eq_finite_unionᵢ_of_finite_subset_unionᵢ {ι} {s : ι → Set α} {t
use i, hi, H, x_in
· rintro ⟨i, hi, H⟩
exact H⟩
-#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_unionᵢ_of_finite_subset_unionᵢ
+#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_iUnion_of_finite_subset_iUnion
#print Set.Finite.induction_on /-
@[elab_as_elim]
@@ -2168,188 +2168,188 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
#align set.exists_upper_bound_image Set.exists_upper_bound_image
-/
-/- warning: set.finite.supr_binfi_of_monotone -> Set.Finite.supᵢ_binfᵢ_of_monotone is a dubious translation:
+/- warning: set.finite.supr_binfi_of_monotone -> Set.Finite.iSup_biInf_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13041 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13043 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13041 x._@.Mathlib.Data.Set.Finite._hyg.13043)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotoneₓ'. -/
-theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13041 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13043 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13041 x._@.Mathlib.Data.Set.Finite._hyg.13043)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotoneₓ'. -/
+theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
by
revert hf
refine' hs.induction_on _ _
· intro hf
- simp [supᵢ_const]
+ simp [iSup_const]
· intro a s has hs ihs hf
rw [ball_insert_iff] at hf
- simp only [infᵢ_insert, ← ihs hf.2]
- exact supᵢ_inf_of_monotone hf.1 fun j₁ j₂ hj => infᵢ₂_mono fun i hi => hf.2 i hi hj
-#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotone
+ simp only [iInf_insert, ← ihs hf.2]
+ exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
+#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
-/- warning: set.finite.supr_binfi_of_antitone -> Set.Finite.supᵢ_binfᵢ_of_antitone is a dubious translation:
+/- warning: set.finite.supr_binfi_of_antitone -> Set.Finite.iSup_biInf_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iInf.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13263 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13265 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13263 x._@.Mathlib.Data.Set.Finite._hyg.13265))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitoneₓ'. -/
-theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13263 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13265 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13263 x._@.Mathlib.Data.Set.Finite._hyg.13265))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iInf.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitoneₓ'. -/
+theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
- @Finite.supᵢ_binfᵢ_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
-#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitone
+ @Finite.iSup_biInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
+#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitone
-/- warning: set.finite.infi_bsupr_of_monotone -> Set.Finite.infᵢ_bsupᵢ_of_monotone is a dubious translation:
+/- warning: set.finite.infi_bsupr_of_monotone -> Set.Finite.iInf_biSup_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13443 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13445 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13443 x._@.Mathlib.Data.Set.Finite._hyg.13445))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotoneₓ'. -/
-theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13443 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13445 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13443 x._@.Mathlib.Data.Set.Finite._hyg.13445))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotoneₓ'. -/
+theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
- hs.supᵢ_binfᵢ_of_antitone fun i hi => (hf i hi).dual_right
-#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotone
+ hs.iSup_biInf_of_antitone fun i hi => (hf i hi).dual_right
+#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotone
-/- warning: set.finite.infi_bsupr_of_antitone -> Set.Finite.infᵢ_bsupᵢ_of_antitone is a dubious translation:
+/- warning: set.finite.infi_bsupr_of_antitone -> Set.Finite.iInf_biSup_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => iSup.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13615 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13617 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13615 x._@.Mathlib.Data.Set.Finite._hyg.13617)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
-Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitoneₓ'. -/
-theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13615 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13617 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13615 x._@.Mathlib.Data.Set.Finite._hyg.13617)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => iSup.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitoneₓ'. -/
+theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
- hs.supᵢ_binfᵢ_of_monotone fun i hi => (hf i hi).dual_right
-#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitone
+ hs.iSup_biInf_of_monotone fun i hi => (hf i hi).dual_right
+#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitone
-/- warning: supr_infi_of_monotone -> Set.supᵢ_infᵢ_of_monotone is a dubious translation:
+/- warning: supr_infi_of_monotone -> Set.iSup_iInf_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13787 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13789 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13787 x._@.Mathlib.Data.Set.Finite._hyg.13789)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotoneₓ'. -/
-theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13787 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13789 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13787 x._@.Mathlib.Data.Set.Finite._hyg.13789)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.iSup_iInf_of_monotoneₓ'. -/
+theorem Set.iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j := by
- simpa only [infᵢ_univ] using finite_univ.supr_binfi_of_monotone fun i hi => hf i
-#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotone
+ simpa only [iInf_univ] using finite_univ.supr_binfi_of_monotone fun i hi => hf i
+#align supr_infi_of_monotone Set.iSup_iInf_of_monotone
-/- warning: supr_infi_of_antitone -> Set.supᵢ_infᵢ_of_antitone is a dubious translation:
+/- warning: supr_infi_of_antitone -> Set.iSup_iInf_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iInf.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iSup.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13924 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13926 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13924 x._@.Mathlib.Data.Set.Finite._hyg.13926))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitoneₓ'. -/
-theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13924 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13926 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13924 x._@.Mathlib.Data.Set.Finite._hyg.13926))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iInf.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iSup.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.iSup_iInf_of_antitoneₓ'. -/
+theorem Set.iSup_iInf_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j :=
- @Set.supᵢ_infᵢ_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
-#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitone
+ @Set.iSup_iInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
+#align supr_infi_of_antitone Set.iSup_iInf_of_antitone
-/- warning: infi_supr_of_monotone -> Set.infᵢ_supᵢ_of_monotone is a dubious translation:
+/- warning: infi_supr_of_monotone -> Set.iInf_iSup_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14062 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14064 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14062 x._@.Mathlib.Data.Set.Finite._hyg.14064))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotoneₓ'. -/
-theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14062 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14064 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14062 x._@.Mathlib.Data.Set.Finite._hyg.14064))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.iInf_iSup_of_monotoneₓ'. -/
+theorem Set.iInf_iSup_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
- Set.supᵢ_infᵢ_of_antitone fun i => (hf i).dual_right
-#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotone
+ Set.iSup_iInf_of_antitone fun i => (hf i).dual_right
+#align infi_supr_of_monotone Set.iInf_iSup_of_monotone
-/- warning: infi_supr_of_antitone -> Set.infᵢ_supᵢ_of_antitone is a dubious translation:
+/- warning: infi_supr_of_antitone -> Set.iInf_iSup_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (iSup.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => iInf.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14194 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14196 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14194 x._@.Mathlib.Data.Set.Finite._hyg.14196)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
-Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitoneₓ'. -/
-theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14194 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14196 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14194 x._@.Mathlib.Data.Set.Finite._hyg.14196)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (iSup.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => iInf.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.iInf_iSup_of_antitoneₓ'. -/
+theorem Set.iInf_iSup_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
- Set.supᵢ_infᵢ_of_monotone fun i => (hf i).dual_right
-#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitone
+ Set.iSup_iInf_of_monotone fun i => (hf i).dual_right
+#align infi_supr_of_antitone Set.iInf_iSup_of_antitone
-/- warning: set.Union_Inter_of_monotone -> Set.unionᵢ_interᵢ_of_monotone is a dubious translation:
+/- warning: set.Union_Inter_of_monotone -> Set.iUnion_iInter_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14323 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14325 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14323 x._@.Mathlib.Data.Set.Finite._hyg.14325)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotoneₓ'. -/
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14323 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14325 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14323 x._@.Mathlib.Data.Set.Finite._hyg.14325)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotoneₓ'. -/
/-- An increasing union distributes over finite intersection. -/
-theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
+theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
(⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
- Set.supᵢ_infᵢ_of_monotone hs
-#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotone
+ Set.iSup_iInf_of_monotone hs
+#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotone
-/- warning: set.Union_Inter_of_antitone -> Set.unionᵢ_interᵢ_of_antitone is a dubious translation:
+/- warning: set.Union_Inter_of_antitone -> Set.iUnion_iInter_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => Set.iInter.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iInter.{u3, succ u1} α ι (fun (i : ι) => Set.iUnion.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14445 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14447 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14445 x._@.Mathlib.Data.Set.Finite._hyg.14447))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitoneₓ'. -/
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14445 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14447 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14445 x._@.Mathlib.Data.Set.Finite._hyg.14447))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitoneₓ'. -/
/-- A decreasing union distributes over finite intersection. -/
-theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
+theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
(⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
- Set.supᵢ_infᵢ_of_antitone hs
-#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitone
+ Set.iSup_iInf_of_antitone hs
+#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitone
-/- warning: set.Inter_Union_of_monotone -> Set.interᵢ_unionᵢ_of_monotone is a dubious translation:
+/- warning: set.Inter_Union_of_monotone -> Set.iInter_iUnion_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14567 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14569 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14567 x._@.Mathlib.Data.Set.Finite._hyg.14569))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotoneₓ'. -/
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14567 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14569 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14567 x._@.Mathlib.Data.Set.Finite._hyg.14569))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotoneₓ'. -/
/-- An increasing intersection distributes over finite union. -/
-theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
+theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
(⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
- Set.infᵢ_supᵢ_of_monotone hs
-#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotone
+ Set.iInf_iSup_of_monotone hs
+#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotone
-/- warning: set.Inter_Union_of_antitone -> Set.interᵢ_unionᵢ_of_antitone is a dubious translation:
+/- warning: set.Inter_Union_of_antitone -> Set.iInter_iUnion_of_antitone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u3, succ u1} α ι (fun (i : ι) => Set.iInter.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14686 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14688 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14686 x._@.Mathlib.Data.Set.Finite._hyg.14688)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitoneₓ'. -/
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14686 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14688 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14686 x._@.Mathlib.Data.Set.Finite._hyg.14688)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitoneₓ'. -/
/-- A decreasing intersection distributes over finite union. -/
-theorem interᵢ_unionᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
+theorem iInter_iUnion_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
(⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
- Set.infᵢ_supᵢ_of_antitone hs
-#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitone
+ Set.iInf_iSup_of_antitone hs
+#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitone
-/- warning: set.Union_pi_of_monotone -> Set.unionᵢ_pi_of_monotone is a dubious translation:
+/- warning: set.Union_pi_of_monotone -> Set.iUnion_pi_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] {α : ι -> Type.{u3}} {I : Set.{u1} ι} {s : forall (i : ι), ι' -> (Set.{u3} (α i))}, (Set.Finite.{u1} ι I) -> (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i I) -> (Monotone.{u2, u3} ι' (Set.{u3} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (LinearOrder.toLattice.{u2} ι' _inst_1)))) (PartialOrder.toPreorder.{u3} (Set.{u3} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} (α i)) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} (α i)) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} (α i)) (Set.completeBooleanAlgebra.{u3} (α i)))))))) (s i))) -> (Eq.{succ (max u1 u3)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.unionᵢ.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u1, u3} ι (fun (i : ι) => α i) I (fun (i : ι) => s i j))) (Set.pi.{u1, u3} ι (fun (i : ι) => α i) I (fun (i : ι) => Set.unionᵢ.{u3, succ u2} (α i) ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] {α : ι -> Type.{u3}} {I : Set.{u1} ι} {s : forall (i : ι), ι' -> (Set.{u3} (α i))}, (Set.Finite.{u1} ι I) -> (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i I) -> (Monotone.{u2, u3} ι' (Set.{u3} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (LinearOrder.toLattice.{u2} ι' _inst_1)))) (PartialOrder.toPreorder.{u3} (Set.{u3} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} (α i)) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} (α i)) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} (α i)) (Set.completeBooleanAlgebra.{u3} (α i)))))))) (s i))) -> (Eq.{succ (max u1 u3)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.iUnion.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u1, u3} ι (fun (i : ι) => α i) I (fun (i : ι) => s i j))) (Set.pi.{u1, u3} ι (fun (i : ι) => α i) I (fun (i : ι) => Set.iUnion.{u3, succ u2} (α i) ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] {α : ι -> Type.{u1}} {I : Set.{u3} ι} {s : forall (i : ι), ι' -> (Set.{u1} (α i))}, (Set.Finite.{u3} ι I) -> (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i I) -> (Monotone.{u2, u1} ι' (Set.{u1} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (DistribLattice.toLattice.{u2} ι' (instDistribLattice.{u2} ι' _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (α i)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (α i)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (α i)) (Set.instCompleteBooleanAlgebraSet.{u1} (α i)))))))) (s i))) -> (Eq.{max (succ u3) (succ u1)} (Set.{max u3 u1} (forall (i : ι), α i)) (Set.unionᵢ.{max u3 u1, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u3, u1} ι (fun (i : ι) => α i) I (fun (i : ι) => s i j))) (Set.pi.{u3, u1} ι (fun (i : ι) => α i) I (fun (i : ι) => Set.unionᵢ.{u1, succ u2} (α i) ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_pi_of_monotone Set.unionᵢ_pi_of_monotoneₓ'. -/
-theorem unionᵢ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] {α : ι -> Type.{u1}} {I : Set.{u3} ι} {s : forall (i : ι), ι' -> (Set.{u1} (α i))}, (Set.Finite.{u3} ι I) -> (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i I) -> (Monotone.{u2, u1} ι' (Set.{u1} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (DistribLattice.toLattice.{u2} ι' (instDistribLattice.{u2} ι' _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (α i)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (α i)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (α i)) (Set.instCompleteBooleanAlgebraSet.{u1} (α i)))))))) (s i))) -> (Eq.{max (succ u3) (succ u1)} (Set.{max u3 u1} (forall (i : ι), α i)) (Set.iUnion.{max u3 u1, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u3, u1} ι (fun (i : ι) => α i) I (fun (i : ι) => s i j))) (Set.pi.{u3, u1} ι (fun (i : ι) => α i) I (fun (i : ι) => Set.iUnion.{u1, succ u2} (α i) ι' (fun (j : ι') => s i j))))
+Case conversion may be inaccurate. Consider using '#align set.Union_pi_of_monotone Set.iUnion_pi_of_monotoneₓ'. -/
+theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
{I : Set ι} {s : ∀ i, ι' → Set (α i)} (hI : I.Finite) (hs : ∀ i ∈ I, Monotone (s i)) :
(⋃ j : ι', I.pi fun i => s i j) = I.pi fun i => ⋃ j, s i j :=
by
simp only [pi_def, bInter_eq_Inter, preimage_Union]
haveI := hI.fintype
exact Union_Inter_of_monotone fun i j₁ j₂ h => preimage_mono <| hs i i.2 h
-#align set.Union_pi_of_monotone Set.unionᵢ_pi_of_monotone
+#align set.Union_pi_of_monotone Set.iUnion_pi_of_monotone
-/- warning: set.Union_univ_pi_of_monotone -> Set.unionᵢ_univ_pi_of_monotone is a dubious translation:
+/- warning: set.Union_univ_pi_of_monotone -> Set.iUnion_univ_pi_of_monotone is a dubious translation:
lean 3 declaration is
- forall {ι : Type.{u1}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : Finite.{succ u1} ι] {α : ι -> Type.{u3}} {s : forall (i : ι), ι' -> (Set.{u3} (α i))}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (LinearOrder.toLattice.{u2} ι' _inst_1)))) (PartialOrder.toPreorder.{u3} (Set.{u3} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} (α i)) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} (α i)) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} (α i)) (Set.completeBooleanAlgebra.{u3} (α i)))))))) (s i)) -> (Eq.{succ (max u1 u3)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.unionᵢ.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u1, u3} ι (fun (i : ι) => α i) (Set.univ.{u1} ι) (fun (i : ι) => s i j))) (Set.pi.{u1, u3} ι (fun (i : ι) => α i) (Set.univ.{u1} ι) (fun (i : ι) => Set.unionᵢ.{u3, succ u2} (α i) ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u1}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : Finite.{succ u1} ι] {α : ι -> Type.{u3}} {s : forall (i : ι), ι' -> (Set.{u3} (α i))}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (LinearOrder.toLattice.{u2} ι' _inst_1)))) (PartialOrder.toPreorder.{u3} (Set.{u3} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} (α i)) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} (α i)) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} (α i)) (Set.completeBooleanAlgebra.{u3} (α i)))))))) (s i)) -> (Eq.{succ (max u1 u3)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.iUnion.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u1, u3} ι (fun (i : ι) => α i) (Set.univ.{u1} ι) (fun (i : ι) => s i j))) (Set.pi.{u1, u3} ι (fun (i : ι) => α i) (Set.univ.{u1} ι) (fun (i : ι) => Set.iUnion.{u3, succ u2} (α i) ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : Finite.{succ u3} ι] {α : ι -> Type.{u1}} {s : forall (i : ι), ι' -> (Set.{u1} (α i))}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (DistribLattice.toLattice.{u2} ι' (instDistribLattice.{u2} ι' _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (α i)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (α i)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (α i)) (Set.instCompleteBooleanAlgebraSet.{u1} (α i)))))))) (s i)) -> (Eq.{max (succ u3) (succ u1)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.unionᵢ.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u3, u1} ι (fun (i : ι) => α i) (Set.univ.{u3} ι) (fun (i : ι) => s i j))) (Set.pi.{u3, u1} ι (fun (i : ι) => α i) (Set.univ.{u3} ι) (fun (i : ι) => Set.unionᵢ.{u1, succ u2} (α i) ι' (fun (j : ι') => s i j))))
-Case conversion may be inaccurate. Consider using '#align set.Union_univ_pi_of_monotone Set.unionᵢ_univ_pi_of_monotoneₓ'. -/
-theorem unionᵢ_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : LinearOrder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : Finite.{succ u3} ι] {α : ι -> Type.{u1}} {s : forall (i : ι), ι' -> (Set.{u1} (α i))}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} (α i)) (PartialOrder.toPreorder.{u2} ι' (SemilatticeInf.toPartialOrder.{u2} ι' (Lattice.toSemilatticeInf.{u2} ι' (DistribLattice.toLattice.{u2} ι' (instDistribLattice.{u2} ι' _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} (α i)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (α i)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (α i)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (α i)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (α i)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (α i)) (Set.instCompleteBooleanAlgebraSet.{u1} (α i)))))))) (s i)) -> (Eq.{max (succ u3) (succ u1)} (Set.{max u1 u3} (forall (i : ι), α i)) (Set.iUnion.{max u1 u3, succ u2} (forall (i : ι), α i) ι' (fun (j : ι') => Set.pi.{u3, u1} ι (fun (i : ι) => α i) (Set.univ.{u3} ι) (fun (i : ι) => s i j))) (Set.pi.{u3, u1} ι (fun (i : ι) => α i) (Set.univ.{u3} ι) (fun (i : ι) => Set.iUnion.{u1, succ u2} (α i) ι' (fun (j : ι') => s i j))))
+Case conversion may be inaccurate. Consider using '#align set.Union_univ_pi_of_monotone Set.iUnion_univ_pi_of_monotoneₓ'. -/
+theorem iUnion_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
{α : ι → Type _} {s : ∀ i, ι' → Set (α i)} (hs : ∀ i, Monotone (s i)) :
(⋃ j : ι', pi univ fun i => s i j) = pi univ fun i => ⋃ j, s i j :=
- unionᵢ_pi_of_monotone finite_univ fun i _ => hs i
-#align set.Union_univ_pi_of_monotone Set.unionᵢ_univ_pi_of_monotone
+ iUnion_pi_of_monotone finite_univ fun i _ => hs i
+#align set.Union_univ_pi_of_monotone Set.iUnion_univ_pi_of_monotone
#print Set.finite_range_findGreatest /-
theorem finite_range_findGreatest {P : α → ℕ → Prop} [∀ x, DecidablePred (P x)] {b : ℕ} :
@@ -2396,13 +2396,13 @@ protected theorem Finite.bddAbove (hs : s.Finite) : BddAbove s :=
#align set.finite.bdd_above Set.Finite.bddAbove
-/
-#print Set.Finite.bddAbove_bunionᵢ /-
+#print Set.Finite.bddAbove_biUnion /-
/-- A finite union of sets which are all bounded above is still bounded above.-/
-theorem Finite.bddAbove_bunionᵢ {I : Set β} {S : β → Set α} (H : I.Finite) :
+theorem Finite.bddAbove_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddAbove (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddAbove (S i) :=
Finite.induction_on H (by simp only [bUnion_empty, bddAbove_empty, ball_empty_iff])
fun a s ha _ hs => by simp only [bUnion_insert, ball_insert_iff, bddAbove_union, hs]
-#align set.finite.bdd_above_bUnion Set.Finite.bddAbove_bunionᵢ
+#align set.finite.bdd_above_bUnion Set.Finite.bddAbove_biUnion
-/
#print Set.infinite_of_not_bddAbove /-
@@ -2424,12 +2424,12 @@ protected theorem Finite.bddBelow (hs : s.Finite) : BddBelow s :=
#align set.finite.bdd_below Set.Finite.bddBelow
-/
-#print Set.Finite.bddBelow_bunionᵢ /-
+#print Set.Finite.bddBelow_biUnion /-
/-- A finite union of sets which are all bounded below is still bounded below.-/
-theorem Finite.bddBelow_bunionᵢ {I : Set β} {S : β → Set α} (H : I.Finite) :
+theorem Finite.bddBelow_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddBelow (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddBelow (S i) :=
- @Finite.bddAbove_bunionᵢ αᵒᵈ _ _ _ _ _ H
-#align set.finite.bdd_below_bUnion Set.Finite.bddBelow_bunionᵢ
+ @Finite.bddAbove_biUnion αᵒᵈ _ _ _ _ _ H
+#align set.finite.bdd_below_bUnion Set.Finite.bddBelow_biUnion
-/
#print Set.infinite_of_not_bddBelow /-
@@ -2486,24 +2486,24 @@ theorem Set.finite_of_forall_not_lt_lt {s : Set α}
#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
-/
-/- warning: set.finite_diff_Union_Ioo -> Set.finite_diff_unionᵢ_Ioo is a dubious translation:
+/- warning: set.finite_diff_Union_Ioo -> Set.finite_diff_iUnion_Ioo is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => Set.unionᵢ.{u1, succ u1} α α (fun (y : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y))))))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => Set.iUnion.{u1, succ u1} α α (fun (y : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) x y))))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) => Set.unionᵢ.{u1, succ u1} α α (fun (y : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y))))))
-Case conversion may be inaccurate. Consider using '#align set.finite_diff_Union_Ioo Set.finite_diff_unionᵢ_Iooₓ'. -/
-theorem Set.finite_diff_unionᵢ_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) => Set.iUnion.{u1, succ u1} α α (fun (y : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) x y))))))
+Case conversion may be inaccurate. Consider using '#align set.finite_diff_Union_Ioo Set.finite_diff_iUnion_Iooₓ'. -/
+theorem Set.finite_diff_iUnion_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
Set.finite_of_forall_not_lt_lt fun x hx y hy z hz hxy hyz =>
- hy.2 <| mem_unionᵢ₂_of_mem hx.1 <| mem_unionᵢ₂_of_mem hz.1 ⟨hxy, hyz⟩
-#align set.finite_diff_Union_Ioo Set.finite_diff_unionᵢ_Ioo
+ hy.2 <| mem_iUnion₂_of_mem hx.1 <| mem_iUnion₂_of_mem hz.1 ⟨hxy, hyz⟩
+#align set.finite_diff_Union_Ioo Set.finite_diff_iUnion_Ioo
-/- warning: set.finite_diff_Union_Ioo' -> Set.finite_diff_unionᵢ_Ioo' is a dubious translation:
+/- warning: set.finite_diff_Union_Ioo' -> Set.finite_diff_iUnion_Ioo' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s (Set.unionᵢ.{u1, succ u1} α (Prod.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)) (fun (x : Prod.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) (Prod.fst.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) (Prod.snd.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) x)))))
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s (Set.iUnion.{u1, succ u1} α (Prod.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)) (fun (x : Prod.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (LinearOrder.toLattice.{u1} α _inst_1)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) (Prod.fst.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) (Prod.snd.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) x)))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s (Set.unionᵢ.{u1, succ u1} α (Prod.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s)) (fun (x : Prod.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s)) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Prod.fst.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s) x)) (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Prod.snd.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s) x)))))
-Case conversion may be inaccurate. Consider using '#align set.finite_diff_Union_Ioo' Set.finite_diff_unionᵢ_Ioo'ₓ'. -/
-theorem Set.finite_diff_unionᵢ_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
- simpa only [Union, supᵢ_prod, supᵢ_subtype] using s.finite_diff_Union_Ioo
-#align set.finite_diff_Union_Ioo' Set.finite_diff_unionᵢ_Ioo'
+ forall {α : Type.{u1}} [_inst_1 : LinearOrder.{u1} α] (s : Set.{u1} α), Set.Finite.{u1} α (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) s (Set.iUnion.{u1, succ u1} α (Prod.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s)) (fun (x : Prod.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s)) => Set.Ioo.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α (instDistribLattice.{u1} α _inst_1))))) (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Prod.fst.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s) x)) (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Prod.snd.{u1, u1} (Set.Elem.{u1} α s) (Set.Elem.{u1} α s) x)))))
+Case conversion may be inaccurate. Consider using '#align set.finite_diff_Union_Ioo' Set.finite_diff_iUnion_Ioo'ₓ'. -/
+theorem Set.finite_diff_iUnion_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
+ simpa only [Union, iSup_prod, iSup_subtype] using s.finite_diff_Union_Ioo
+#align set.finite_diff_Union_Ioo' Set.finite_diff_iUnion_Ioo'
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -2172,7 +2172,7 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13043 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13045 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13043 x._@.Mathlib.Data.Set.Finite._hyg.13045)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13041 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13043 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13041 x._@.Mathlib.Data.Set.Finite._hyg.13043)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2192,7 +2192,7 @@ theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13265 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13267 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13265 x._@.Mathlib.Data.Set.Finite._hyg.13267))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13263 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13265 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13263 x._@.Mathlib.Data.Set.Finite._hyg.13265))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2204,7 +2204,7 @@ theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13445 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13447 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13445 x._@.Mathlib.Data.Set.Finite._hyg.13447))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13443 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13445 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13443 x._@.Mathlib.Data.Set.Finite._hyg.13445))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2216,7 +2216,7 @@ theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13617 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13619 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13617 x._@.Mathlib.Data.Set.Finite._hyg.13619)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13615 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13617 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13615 x._@.Mathlib.Data.Set.Finite._hyg.13617)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2228,7 +2228,7 @@ theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13789 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13791 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13789 x._@.Mathlib.Data.Set.Finite._hyg.13791)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13787 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13789 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13787 x._@.Mathlib.Data.Set.Finite._hyg.13789)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2240,7 +2240,7 @@ theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13926 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13928 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13926 x._@.Mathlib.Data.Set.Finite._hyg.13928))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13924 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13926 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13924 x._@.Mathlib.Data.Set.Finite._hyg.13926))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2252,7 +2252,7 @@ theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14064 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14066 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14064 x._@.Mathlib.Data.Set.Finite._hyg.14066))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14062 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14064 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14062 x._@.Mathlib.Data.Set.Finite._hyg.14064))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2264,7 +2264,7 @@ theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14196 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14198 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14196 x._@.Mathlib.Data.Set.Finite._hyg.14198)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14194 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14196 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14194 x._@.Mathlib.Data.Set.Finite._hyg.14196)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2276,7 +2276,7 @@ theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14325 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14327 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14325 x._@.Mathlib.Data.Set.Finite._hyg.14327)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14323 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14325 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14323 x._@.Mathlib.Data.Set.Finite._hyg.14325)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotoneₓ'. -/
/-- An increasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
@@ -2289,7 +2289,7 @@ theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14447 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14449 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14447 x._@.Mathlib.Data.Set.Finite._hyg.14449))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14445 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14447 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14445 x._@.Mathlib.Data.Set.Finite._hyg.14447))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitoneₓ'. -/
/-- A decreasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2302,7 +2302,7 @@ theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14569 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14571 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14569 x._@.Mathlib.Data.Set.Finite._hyg.14571))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14567 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14569 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14567 x._@.Mathlib.Data.Set.Finite._hyg.14569))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotoneₓ'. -/
/-- An increasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2315,7 +2315,7 @@ theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14688 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14690 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14688 x._@.Mathlib.Data.Set.Finite._hyg.14690)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14686 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14688 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14686 x._@.Mathlib.Data.Set.Finite._hyg.14688)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitoneₓ'. -/
/-- A decreasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/fa78268d4d77cb2b2fbc89f0527e2e7807763780
@@ -2055,6 +2055,12 @@ section Preorder
variable [Preorder α] [Nonempty α] {s : Set α}
+/- warning: set.infinite_of_forall_exists_gt -> Set.infinite_of_forall_exists_gt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) a b))) -> (Set.Infinite.{u1} α s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) (LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) a b))) -> (Set.Infinite.{u1} α s)
+Case conversion may be inaccurate. Consider using '#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gtₓ'. -/
theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinite :=
by
inhabit α
@@ -2064,6 +2070,12 @@ theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinit
exact (h _).choose_spec.choose_spec
#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gt
+/- warning: set.infinite_of_forall_exists_lt -> Set.infinite_of_forall_exists_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) b s) => LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) b a))) -> (Set.Infinite.{u1} α s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : Nonempty.{succ u1} α] {s : Set.{u1} α}, (forall (a : α), Exists.{succ u1} α (fun (b : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) b s) (LT.lt.{u1} α (Preorder.toLT.{u1} α _inst_1) b a))) -> (Set.Infinite.{u1} α s)
+Case conversion may be inaccurate. Consider using '#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_ltₓ'. -/
theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinite :=
@infinite_of_forall_exists_gt αᵒᵈ _ _ _ h
#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_lt
@@ -2160,7 +2172,7 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12523 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12525 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12523 x._@.Mathlib.Data.Set.Finite._hyg.12525)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13043 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13045 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13043 x._@.Mathlib.Data.Set.Finite._hyg.13045)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2180,7 +2192,7 @@ theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12745 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12747 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12745 x._@.Mathlib.Data.Set.Finite._hyg.12747))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13265 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13267 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13265 x._@.Mathlib.Data.Set.Finite._hyg.13267))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2192,7 +2204,7 @@ theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12925 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12927 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12925 x._@.Mathlib.Data.Set.Finite._hyg.12927))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13445 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13447 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13445 x._@.Mathlib.Data.Set.Finite._hyg.13447))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2204,7 +2216,7 @@ theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13097 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13099 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13097 x._@.Mathlib.Data.Set.Finite._hyg.13099)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13617 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13619 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13617 x._@.Mathlib.Data.Set.Finite._hyg.13619)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2216,7 +2228,7 @@ theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13269 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13271 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13269 x._@.Mathlib.Data.Set.Finite._hyg.13271)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13789 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13791 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13789 x._@.Mathlib.Data.Set.Finite._hyg.13791)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2228,7 +2240,7 @@ theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13406 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13408 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13406 x._@.Mathlib.Data.Set.Finite._hyg.13408))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13926 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13928 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13926 x._@.Mathlib.Data.Set.Finite._hyg.13928))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2240,7 +2252,7 @@ theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13544 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13546 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13544 x._@.Mathlib.Data.Set.Finite._hyg.13546))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14064 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14066 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14064 x._@.Mathlib.Data.Set.Finite._hyg.14066))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2252,7 +2264,7 @@ theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13676 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13678 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13676 x._@.Mathlib.Data.Set.Finite._hyg.13678)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14196 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14198 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14196 x._@.Mathlib.Data.Set.Finite._hyg.14198)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2264,7 +2276,7 @@ theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13805 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13807 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13805 x._@.Mathlib.Data.Set.Finite._hyg.13807)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14325 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14327 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14325 x._@.Mathlib.Data.Set.Finite._hyg.14327)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotoneₓ'. -/
/-- An increasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
@@ -2277,7 +2289,7 @@ theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13927 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13929 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13927 x._@.Mathlib.Data.Set.Finite._hyg.13929))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14447 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14449 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14447 x._@.Mathlib.Data.Set.Finite._hyg.14449))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitoneₓ'. -/
/-- A decreasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2290,7 +2302,7 @@ theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14049 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14051 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14049 x._@.Mathlib.Data.Set.Finite._hyg.14051))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14569 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14571 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14569 x._@.Mathlib.Data.Set.Finite._hyg.14571))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotoneₓ'. -/
/-- An increasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2303,7 +2315,7 @@ theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14168 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14170 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14168 x._@.Mathlib.Data.Set.Finite._hyg.14170)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14688 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14690 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14688 x._@.Mathlib.Data.Set.Finite._hyg.14690)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitoneₓ'. -/
/-- A decreasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
+! leanprover-community/mathlib commit 52fa514ec337dd970d71d8de8d0fd68b455a1e54
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -2022,17 +2022,6 @@ theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α →
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-/
-/- warning: set.infinite.exists_nat_lt -> Set.Infinite.exists_nat_lt is a dubious translation:
-lean 3 declaration is
- forall {s : Set.{0} Nat}, (Set.Infinite.{0} Nat s) -> (forall (n : Nat), Exists.{1} Nat (fun (m : Nat) => Exists.{0} (Membership.Mem.{0, 0} Nat (Set.{0} Nat) (Set.hasMem.{0} Nat) m s) (fun (H : Membership.Mem.{0, 0} Nat (Set.{0} Nat) (Set.hasMem.{0} Nat) m s) => LT.lt.{0} Nat Nat.hasLt n m)))
-but is expected to have type
- forall {s : Set.{0} Nat}, (Set.Infinite.{0} Nat s) -> (forall (n : Nat), Exists.{1} Nat (fun (m : Nat) => And (Membership.mem.{0, 0} Nat (Set.{0} Nat) (Set.instMembershipSet.{0} Nat) m s) (LT.lt.{0} Nat instLTNat n m)))
-Case conversion may be inaccurate. Consider using '#align set.infinite.exists_nat_lt Set.Infinite.exists_nat_ltₓ'. -/
-theorem Infinite.exists_nat_lt {s : Set ℕ} (hs : s.Infinite) (n : ℕ) : ∃ m ∈ s, n < m :=
- let ⟨m, hm⟩ := (hs.diffₓ <| Set.finite_le_nat n).Nonempty
- ⟨m, by simpa using hm⟩
-#align set.infinite.exists_nat_lt Set.Infinite.exists_nat_lt
-
/- warning: set.infinite.exists_not_mem_finset -> Set.Infinite.exists_not_mem_finset is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Infinite.{u1} α s) -> (forall (f : Finset.{u1} α), Exists.{succ u1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) => Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a f))))
@@ -2062,6 +2051,25 @@ theorem not_injOn_infinite_finite_image {f : α → β} {s : Set α} (h_inf : s.
/-! ### Order properties -/
+section Preorder
+
+variable [Preorder α] [Nonempty α] {s : Set α}
+
+theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinite :=
+ by
+ inhabit α
+ set f : ℕ → α := fun n => Nat.recOn n (h default).some fun n a => (h a).some
+ have hf : ∀ n, f n ∈ s := by rintro (_ | _) <;> exact (h _).choose_spec.some
+ refine' infinite_of_injective_forall_mem (strictMono_nat_of_lt_succ fun n => _).Injective hf
+ exact (h _).choose_spec.choose_spec
+#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gt
+
+theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinite :=
+ @infinite_of_forall_exists_gt αᵒᵈ _ _ _ h
+#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_lt
+
+end Preorder
+
#print Set.finite_isTop /-
theorem finite_isTop (α : Type _) [PartialOrder α] : { x : α | IsTop x }.Finite :=
(subsingleton_isTop α).Finite
mathlib commit https://github.com/leanprover-community/mathlib/commit/172bf2812857f5e56938cc148b7a539f52f84ca9
@@ -180,9 +180,11 @@ protected theorem finite_or_infinite (s : Set α) : s.Finite ∨ s.Infinite :=
#align set.finite_or_infinite Set.finite_or_infinite
-/
+#print Set.infinite_or_finite /-
protected theorem infinite_or_finite (s : Set α) : s.Infinite ∨ s.Finite :=
em' _
#align set.infinite_or_finite Set.infinite_or_finite
+-/
/-! ### Basic properties of `set.finite.to_finset` -/
@@ -1345,26 +1347,35 @@ protected theorem Finite.prod (hs : s.Finite) (ht : t.Finite) : (s ×ˢ t : Set
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Set.Finite.of_prod_left /-
theorem Finite.of_prod_left (h : (s ×ˢ t : Set (α × β)).Finite) : t.Nonempty → s.Finite :=
fun ⟨b, hb⟩ => (h.image Prod.fst).Subset fun a ha => ⟨(a, b), ⟨ha, hb⟩, rfl⟩
#align set.finite.of_prod_left Set.Finite.of_prod_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Set.Finite.of_prod_right /-
theorem Finite.of_prod_right (h : (s ×ˢ t : Set (α × β)).Finite) : s.Nonempty → t.Finite :=
fun ⟨a, ha⟩ => (h.image Prod.snd).Subset fun b hb => ⟨(a, b), ⟨ha, hb⟩, rfl⟩
#align set.finite.of_prod_right Set.Finite.of_prod_right
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Set.Infinite.prod_left /-
protected theorem Infinite.prod_left (hs : s.Infinite) (ht : t.Nonempty) : (s ×ˢ t).Infinite :=
fun h => hs <| h.of_prod_left ht
#align set.infinite.prod_left Set.Infinite.prod_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Set.Infinite.prod_right /-
protected theorem Infinite.prod_right (ht : t.Infinite) (hs : s.Nonempty) : (s ×ˢ t).Infinite :=
fun h => ht <| h.of_prod_right hs
#align set.infinite.prod_right Set.Infinite.prod_right
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Set.infinite_prod /-
protected theorem infinite_prod :
(s ×ˢ t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
by
@@ -1376,11 +1387,14 @@ protected theorem infinite_prod :
· exact h.1.prodLeft h.2
· exact h.1.prodRight h.2
#align set.infinite_prod Set.infinite_prod
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Set.finite_prod /-
theorem finite_prod : (s ×ˢ t).Finite ↔ (s.Finite ∨ t = ∅) ∧ (t.Finite ∨ s = ∅) := by
simp only [← not_infinite, Set.infinite_prod, not_or, not_and_or, not_nonempty_iff_eq_empty]
#align set.finite_prod Set.finite_prod
+-/
#print Set.Finite.offDiag /-
protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by
@@ -1390,18 +1404,14 @@ protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by
#align set.finite.off_diag Set.Finite.offDiag
-/
-/- warning: set.finite.image2 -> Set.Finite.image2 is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {s : Set.{u1} α} {t : Set.{u2} β} (f : α -> β -> γ), (Set.Finite.{u1} α s) -> (Set.Finite.{u2} β t) -> (Set.Finite.{u3} γ (Set.image2.{u1, u2, u3} α β γ f s t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} (s : α -> β -> γ) {t : Set.{u1} α} {f : Set.{u2} β}, (Set.Finite.{u1} α t) -> (Set.Finite.{u2} β f) -> (Set.Finite.{u3} γ (Set.image2.{u1, u2, u3} α β γ s t f))
-Case conversion may be inaccurate. Consider using '#align set.finite.image2 Set.Finite.image2ₓ'. -/
+#print Set.Finite.image2 /-
protected theorem Finite.image2 (f : α → β → γ) (hs : s.Finite) (ht : t.Finite) :
(image2 f s t).Finite := by
cases hs
cases ht
apply to_finite
#align set.finite.image2 Set.Finite.image2
+-/
end Prod
@@ -1923,9 +1933,11 @@ theorem infinite_union {s t : Set α} : (s ∪ t).Infinite ↔ s.Infinite ∨ t.
simp only [Set.Infinite, finite_union, not_and_or]
#align set.infinite_union Set.infinite_union
+#print Set.Infinite.of_image /-
theorem Infinite.of_image (f : α → β) {s : Set α} (hs : (f '' s).Infinite) : s.Infinite :=
mt (Finite.image f) hs
#align set.infinite.of_image Set.Infinite.of_image
+-/
#print Set.infinite_image_iff /-
theorem infinite_image_iff {s : Set α} {f : α → β} (hi : InjOn f s) :
@@ -1943,16 +1955,21 @@ section Image2
variable {f : α → β → γ} {s : Set α} {t : Set β} {a : α} {b : β}
+#print Set.Infinite.image2_left /-
protected theorem Infinite.image2_left (hs : s.Infinite) (hb : b ∈ t)
(hf : InjOn (fun a => f a b) s) : (image2 f s t).Infinite :=
(hs.image hf).mono <| image_subset_image2_left hb
#align set.infinite.image2_left Set.Infinite.image2_left
+-/
+#print Set.Infinite.image2_right /-
protected theorem Infinite.image2_right (ht : t.Infinite) (ha : a ∈ s) (hf : InjOn (f a) t) :
(image2 f s t).Infinite :=
(ht.image hf).mono <| image_subset_image2_right ha
#align set.infinite.image2_right Set.Infinite.image2_right
+-/
+#print Set.infinite_image2 /-
theorem infinite_image2 (hfs : ∀ b ∈ t, InjOn (fun a => f a b) s) (hft : ∀ a ∈ s, InjOn (f a) t) :
(image2 f s t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
by
@@ -1963,6 +1980,7 @@ theorem infinite_image2 (hfs : ∀ b ∈ t, InjOn (fun a => f a b) s) (hft : ∀
· exact hs.image2_left hb (hfs _ hb)
· exact ht.image2_right ha (hft _ ha)
#align set.infinite_image2 Set.infinite_image2
+-/
end Image2
@@ -2134,7 +2152,7 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.11758 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11760 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11758 x._@.Mathlib.Data.Set.Finite._hyg.11760)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12523 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12525 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12523 x._@.Mathlib.Data.Set.Finite._hyg.12525)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2154,7 +2172,7 @@ theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.11980 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11982 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11980 x._@.Mathlib.Data.Set.Finite._hyg.11982))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12745 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12747 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12745 x._@.Mathlib.Data.Set.Finite._hyg.12747))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2166,7 +2184,7 @@ theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12160 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12162 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12160 x._@.Mathlib.Data.Set.Finite._hyg.12162))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12925 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12927 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12925 x._@.Mathlib.Data.Set.Finite._hyg.12927))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2178,7 +2196,7 @@ theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12332 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12334 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12332 x._@.Mathlib.Data.Set.Finite._hyg.12334)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13097 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13099 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.13097 x._@.Mathlib.Data.Set.Finite._hyg.13099)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2190,7 +2208,7 @@ theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12504 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12506 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12504 x._@.Mathlib.Data.Set.Finite._hyg.12506)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13269 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13271 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13269 x._@.Mathlib.Data.Set.Finite._hyg.13271)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2202,7 +2220,7 @@ theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12641 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12643 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12641 x._@.Mathlib.Data.Set.Finite._hyg.12643))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13406 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13408 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13406 x._@.Mathlib.Data.Set.Finite._hyg.13408))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2214,7 +2232,7 @@ theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12779 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12781 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12779 x._@.Mathlib.Data.Set.Finite._hyg.12781))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13544 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13546 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13544 x._@.Mathlib.Data.Set.Finite._hyg.13546))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2226,7 +2244,7 @@ theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12911 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12913 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12911 x._@.Mathlib.Data.Set.Finite._hyg.12913)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13676 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13678 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13676 x._@.Mathlib.Data.Set.Finite._hyg.13678)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2238,7 +2256,7 @@ theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13040 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13042 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13040 x._@.Mathlib.Data.Set.Finite._hyg.13042)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13805 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13807 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13805 x._@.Mathlib.Data.Set.Finite._hyg.13807)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotoneₓ'. -/
/-- An increasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
@@ -2251,7 +2269,7 @@ theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13162 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13164 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13162 x._@.Mathlib.Data.Set.Finite._hyg.13164))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13927 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13929 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13927 x._@.Mathlib.Data.Set.Finite._hyg.13929))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitoneₓ'. -/
/-- A decreasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2264,7 +2282,7 @@ theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13284 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13286 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13284 x._@.Mathlib.Data.Set.Finite._hyg.13286))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.14049 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14051 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14049 x._@.Mathlib.Data.Set.Finite._hyg.14051))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotoneₓ'. -/
/-- An increasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2277,7 +2295,7 @@ theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13403 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13405 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13403 x._@.Mathlib.Data.Set.Finite._hyg.13405)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.14168 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.14170 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.14168 x._@.Mathlib.Data.Set.Finite._hyg.14170)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitoneₓ'. -/
/-- A decreasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
+! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -168,6 +168,11 @@ theorem not_infinite {s : Set α} : ¬s.Infinite ↔ s.Finite :=
#align set.not_infinite Set.not_infinite
-/
+alias not_infinite ↔ _ Finite.not_infinite
+#align set.finite.not_infinite Set.Finite.not_infinite
+
+attribute [simp] Finite.not_infinite
+
#print Set.finite_or_infinite /-
/-- See also `finite_or_infinite`, `fintype_or_infinite`. -/
protected theorem finite_or_infinite (s : Set α) : s.Finite ∨ s.Infinite :=
@@ -175,6 +180,10 @@ protected theorem finite_or_infinite (s : Set α) : s.Finite ∨ s.Infinite :=
#align set.finite_or_infinite Set.finite_or_infinite
-/
+protected theorem infinite_or_finite (s : Set α) : s.Infinite ∨ s.Finite :=
+ em' _
+#align set.infinite_or_finite Set.infinite_or_finite
+
/-! ### Basic properties of `set.finite.to_finset` -/
@@ -1211,6 +1220,14 @@ theorem finite_empty : (∅ : Set α).Finite :=
#align set.finite_empty Set.finite_empty
-/
+#print Set.Infinite.nonempty /-
+protected theorem Infinite.nonempty {s : Set α} (h : s.Infinite) : s.Nonempty :=
+ nonempty_iff_ne_empty.2 <| by
+ rintro rfl
+ exact h finite_empty
+#align set.infinite.nonempty Set.Infinite.nonempty
+-/
+
#print Set.finite_singleton /-
@[simp]
theorem finite_singleton (a : α) : ({a} : Set α).Finite :=
@@ -1313,32 +1330,80 @@ theorem finite_le_nat (n : ℕ) : Set.Finite { i | i ≤ n } :=
#align set.finite_le_nat Set.finite_le_nat
-/
+section Prod
+
+variable {s : Set α} {t : Set β}
+
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
#print Set.Finite.prod /-
-theorem Finite.prod {s : Set α} {t : Set β} (hs : s.Finite) (ht : t.Finite) :
- (s ×ˢ t : Set (α × β)).Finite := by
+protected theorem Finite.prod (hs : s.Finite) (ht : t.Finite) : (s ×ˢ t : Set (α × β)).Finite :=
+ by
cases hs
cases ht
apply to_finite
#align set.finite.prod Set.Finite.prod
-/
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem Finite.of_prod_left (h : (s ×ˢ t : Set (α × β)).Finite) : t.Nonempty → s.Finite :=
+ fun ⟨b, hb⟩ => (h.image Prod.fst).Subset fun a ha => ⟨(a, b), ⟨ha, hb⟩, rfl⟩
+#align set.finite.of_prod_left Set.Finite.of_prod_left
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem Finite.of_prod_right (h : (s ×ˢ t : Set (α × β)).Finite) : s.Nonempty → t.Finite :=
+ fun ⟨a, ha⟩ => (h.image Prod.snd).Subset fun b hb => ⟨(a, b), ⟨ha, hb⟩, rfl⟩
+#align set.finite.of_prod_right Set.Finite.of_prod_right
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+protected theorem Infinite.prod_left (hs : s.Infinite) (ht : t.Nonempty) : (s ×ˢ t).Infinite :=
+ fun h => hs <| h.of_prod_left ht
+#align set.infinite.prod_left Set.Infinite.prod_left
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+protected theorem Infinite.prod_right (ht : t.Infinite) (hs : s.Nonempty) : (s ×ˢ t).Infinite :=
+ fun h => ht <| h.of_prod_right hs
+#align set.infinite.prod_right Set.Infinite.prod_right
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+protected theorem infinite_prod :
+ (s ×ˢ t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
+ by
+ refine' ⟨fun h => _, _⟩
+ · simp_rw [Set.Infinite, and_comm' ¬_, ← not_imp]
+ by_contra'
+ exact h ((this.1 h.nonempty.snd).Prod <| this.2 h.nonempty.fst)
+ · rintro (h | h)
+ · exact h.1.prodLeft h.2
+ · exact h.1.prodRight h.2
+#align set.infinite_prod Set.infinite_prod
+
+/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+theorem finite_prod : (s ×ˢ t).Finite ↔ (s.Finite ∨ t = ∅) ∧ (t.Finite ∨ s = ∅) := by
+ simp only [← not_infinite, Set.infinite_prod, not_or, not_and_or, not_nonempty_iff_eq_empty]
+#align set.finite_prod Set.finite_prod
+
#print Set.Finite.offDiag /-
-theorem Finite.offDiag {s : Set α} (hs : s.Finite) : s.offDiag.Finite := by
+protected theorem Finite.offDiag (hs : s.Finite) : s.offDiag.Finite := by
classical
cases hs
apply Set.toFinite
#align set.finite.off_diag Set.Finite.offDiag
-/
-#print Set.Finite.image2 /-
-theorem Finite.image2 (f : α → β → γ) {s : Set α} {t : Set β} (hs : s.Finite) (ht : t.Finite) :
+/- warning: set.finite.image2 -> Set.Finite.image2 is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {s : Set.{u1} α} {t : Set.{u2} β} (f : α -> β -> γ), (Set.Finite.{u1} α s) -> (Set.Finite.{u2} β t) -> (Set.Finite.{u3} γ (Set.image2.{u1, u2, u3} α β γ f s t))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} (s : α -> β -> γ) {t : Set.{u1} α} {f : Set.{u2} β}, (Set.Finite.{u1} α t) -> (Set.Finite.{u2} β f) -> (Set.Finite.{u3} γ (Set.image2.{u1, u2, u3} α β γ s t f))
+Case conversion may be inaccurate. Consider using '#align set.finite.image2 Set.Finite.image2ₓ'. -/
+protected theorem Finite.image2 (f : α → β → γ) (hs : s.Finite) (ht : t.Finite) :
(image2 f s t).Finite := by
cases hs
cases ht
apply to_finite
#align set.finite.image2 Set.Finite.image2
--/
+
+end Prod
#print Set.Finite.seq /-
theorem Finite.seq {f : Set (α → β)} {s : Set α} (hf : f.Finite) (hs : s.Finite) :
@@ -1811,13 +1876,6 @@ theorem Infinite.exists_subset_card_eq {s : Set α} (hs : s.Infinite) (n : ℕ)
#align set.infinite.exists_subset_card_eq Set.Infinite.exists_subset_card_eq
-/
-#print Set.Infinite.nonempty /-
-theorem Infinite.nonempty {s : Set α} (h : s.Infinite) : s.Nonempty :=
- let a := Infinite.natEmbedding s h 37
- ⟨a.1, a.2⟩
-#align set.infinite.nonempty Set.Infinite.nonempty
--/
-
/- warning: set.infinite_of_finite_compl -> Set.infinite_of_finite_compl is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Infinite.{succ u1} α] {s : Set.{u1} α}, (Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s)) -> (Set.Infinite.{u1} α s)
@@ -1865,11 +1923,9 @@ theorem infinite_union {s t : Set α} : (s ∪ t).Infinite ↔ s.Infinite ∨ t.
simp only [Set.Infinite, finite_union, not_and_or]
#align set.infinite_union Set.infinite_union
-#print Set.infinite_of_infinite_image /-
-theorem infinite_of_infinite_image (f : α → β) {s : Set α} (hs : (f '' s).Infinite) : s.Infinite :=
+theorem Infinite.of_image (f : α → β) {s : Set α} (hs : (f '' s).Infinite) : s.Infinite :=
mt (Finite.image f) hs
-#align set.infinite_of_infinite_image Set.infinite_of_infinite_image
--/
+#align set.infinite.of_image Set.Infinite.of_image
#print Set.infinite_image_iff /-
theorem infinite_image_iff {s : Set α} {f : α → β} (hi : InjOn f s) :
@@ -1878,6 +1934,38 @@ theorem infinite_image_iff {s : Set α} {f : α → β} (hi : InjOn f s) :
#align set.infinite_image_iff Set.infinite_image_iff
-/
+alias infinite_image_iff ↔ _ infinite.image
+#align set.infinite.image Set.Infinite.image
+
+attribute [protected] infinite.image
+
+section Image2
+
+variable {f : α → β → γ} {s : Set α} {t : Set β} {a : α} {b : β}
+
+protected theorem Infinite.image2_left (hs : s.Infinite) (hb : b ∈ t)
+ (hf : InjOn (fun a => f a b) s) : (image2 f s t).Infinite :=
+ (hs.image hf).mono <| image_subset_image2_left hb
+#align set.infinite.image2_left Set.Infinite.image2_left
+
+protected theorem Infinite.image2_right (ht : t.Infinite) (ha : a ∈ s) (hf : InjOn (f a) t) :
+ (image2 f s t).Infinite :=
+ (ht.image hf).mono <| image_subset_image2_right ha
+#align set.infinite.image2_right Set.Infinite.image2_right
+
+theorem infinite_image2 (hfs : ∀ b ∈ t, InjOn (fun a => f a b) s) (hft : ∀ a ∈ s, InjOn (f a) t) :
+ (image2 f s t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
+ by
+ refine' ⟨fun h => Set.infinite_prod.1 _, _⟩
+ · rw [← image_uncurry_prod] at h
+ exact h.of_image _
+ · rintro (⟨hs, b, hb⟩ | ⟨ht, a, ha⟩)
+ · exact hs.image2_left hb (hfs _ hb)
+ · exact ht.image2_right ha (hft _ ha)
+#align set.infinite_image2 Set.infinite_image2
+
+end Image2
+
#print Set.infinite_of_injOn_mapsTo /-
theorem infinite_of_injOn_mapsTo {s : Set α} {t : Set β} {f : α → β} (hi : InjOn f s)
(hm : MapsTo f s t) (hs : s.Infinite) : t.Infinite :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 327c3c0d9232d80e250dc8f65e7835b82b266ea5
+! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -381,7 +381,6 @@ protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅
-/
#print Set.Finite.toFinset_univ /-
--- Note: Not `simp` because `set.finite.to_finset_set_of` already proves it
@[simp]
protected theorem toFinset_univ [Fintype α] (h : (Set.univ : Set α).Finite) :
h.toFinset = Finset.univ := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -2047,7 +2047,7 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.11736 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11738 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11736 x._@.Mathlib.Data.Set.Finite._hyg.11738)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.11758 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11760 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11758 x._@.Mathlib.Data.Set.Finite._hyg.11760)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2067,7 +2067,7 @@ theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.11958 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11960 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11958 x._@.Mathlib.Data.Set.Finite._hyg.11960))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.11980 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11982 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11980 x._@.Mathlib.Data.Set.Finite._hyg.11982))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2079,7 +2079,7 @@ theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12138 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12140 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12138 x._@.Mathlib.Data.Set.Finite._hyg.12140))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12160 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12162 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12160 x._@.Mathlib.Data.Set.Finite._hyg.12162))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2091,7 +2091,7 @@ theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12310 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12312 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12310 x._@.Mathlib.Data.Set.Finite._hyg.12312)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12332 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12334 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12332 x._@.Mathlib.Data.Set.Finite._hyg.12334)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2103,7 +2103,7 @@ theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12482 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12484 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12482 x._@.Mathlib.Data.Set.Finite._hyg.12484)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12504 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12506 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12504 x._@.Mathlib.Data.Set.Finite._hyg.12506)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2115,7 +2115,7 @@ theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12619 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12621 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12619 x._@.Mathlib.Data.Set.Finite._hyg.12621))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12641 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12643 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12641 x._@.Mathlib.Data.Set.Finite._hyg.12643))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2127,7 +2127,7 @@ theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12757 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12759 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12757 x._@.Mathlib.Data.Set.Finite._hyg.12759))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12779 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12781 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12779 x._@.Mathlib.Data.Set.Finite._hyg.12781))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2139,7 +2139,7 @@ theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12889 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12891 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12889 x._@.Mathlib.Data.Set.Finite._hyg.12891)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12911 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12913 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12911 x._@.Mathlib.Data.Set.Finite._hyg.12913)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2151,7 +2151,7 @@ theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13018 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13020 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13018 x._@.Mathlib.Data.Set.Finite._hyg.13020)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13040 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13042 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13040 x._@.Mathlib.Data.Set.Finite._hyg.13042)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotoneₓ'. -/
/-- An increasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
@@ -2164,7 +2164,7 @@ theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13140 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13142 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13140 x._@.Mathlib.Data.Set.Finite._hyg.13142))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13162 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13164 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13162 x._@.Mathlib.Data.Set.Finite._hyg.13164))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitoneₓ'. -/
/-- A decreasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2177,7 +2177,7 @@ theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13262 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13264 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13262 x._@.Mathlib.Data.Set.Finite._hyg.13264))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13284 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13286 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13284 x._@.Mathlib.Data.Set.Finite._hyg.13286))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotoneₓ'. -/
/-- An increasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2190,7 +2190,7 @@ theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13381 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13383 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13381 x._@.Mathlib.Data.Set.Finite._hyg.13383)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13403 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13405 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13403 x._@.Mathlib.Data.Set.Finite._hyg.13405)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitoneₓ'. -/
/-- A decreasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -2047,7 +2047,7 @@ theorem exists_upper_bound_image [hα : Nonempty α] [LinearOrder β] (s : Set
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.11732 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11734 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11732 x._@.Mathlib.Data.Set.Finite._hyg.11734)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.11736 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11738 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11736 x._@.Mathlib.Data.Set.Finite._hyg.11738)] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2067,7 +2067,7 @@ theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Frame.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => infᵢ.{u3, 0} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.11954 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11956 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11954 x._@.Mathlib.Data.Set.Finite._hyg.11956))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.11958 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.11960 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.11958 x._@.Mathlib.Data.Set.Finite._hyg.11960))] [_inst_4 : Order.Frame.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => infᵢ.{u1, 0} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitoneₓ'. -/
theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2079,7 +2079,7 @@ theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1)))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Monotone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12134 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12136 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12134 x._@.Mathlib.Data.Set.Finite._hyg.12136))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12138 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12140 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12138 x._@.Mathlib.Data.Set.Finite._hyg.12140))] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Monotone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2091,7 +2091,7 @@ theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1))] [_inst_4 : Order.Coframe.{u3} α] {s : Set.{u1} ι}, (Set.Finite.{u1} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) -> (Antitone.{u2, u3} ι' α _inst_1 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4)))) (f i))) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => f i j)))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι (fun (i : ι) => supᵢ.{u3, 0} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) (Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) (fun (H : Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) i s) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_4))) ι' (fun (j : ι') => f i j))))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12306 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12308 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12306 x._@.Mathlib.Data.Set.Finite._hyg.12308)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Preorder.{u2} ι'] [_inst_2 : Nonempty.{succ u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12310 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12312 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_1) x._@.Mathlib.Data.Set.Finite._hyg.12310 x._@.Mathlib.Data.Set.Finite._hyg.12312)] [_inst_4 : Order.Coframe.{u1} α] {s : Set.{u3} ι}, (Set.Finite.{u3} ι s) -> (forall {f : ι -> ι' -> α}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) -> (Antitone.{u2, u1} ι' α _inst_1 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)))) (f i))) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => f i j)))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι (fun (i : ι) => supᵢ.{u1, 0} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i s) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_4)) ι' (fun (j : ι') => f i j))))))
Case conversion may be inaccurate. Consider using '#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitoneₓ'. -/
theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
@@ -2103,7 +2103,7 @@ theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [N
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12478 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12480 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12478 x._@.Mathlib.Data.Set.Finite._hyg.12480)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12482 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12484 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12482 x._@.Mathlib.Data.Set.Finite._hyg.12484)] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2115,7 +2115,7 @@ theorem Set.supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Frame.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (infᵢ.{u3, succ u1} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => supᵢ.{u3, succ u2} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Frame.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12615 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12617 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12615 x._@.Mathlib.Data.Set.Finite._hyg.12617))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12619 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12621 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12619 x._@.Mathlib.Data.Set.Finite._hyg.12621))] [_inst_5 : Order.Frame.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (infᵢ.{u1, succ u3} α (CompleteLattice.toInfSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => supᵢ.{u1, succ u2} α (CompleteLattice.toSupSet.{u1} α (Order.Frame.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitoneₓ'. -/
theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2127,7 +2127,7 @@ theorem Set.supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12753 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12755 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12753 x._@.Mathlib.Data.Set.Finite._hyg.12755))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.12757 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12759 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12757 x._@.Mathlib.Data.Set.Finite._hyg.12759))] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Monotone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -2139,7 +2139,7 @@ theorem Set.infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_5 : Order.Coframe.{u3} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u3} ι' α _inst_2 (PartialOrder.toPreorder.{u3} α (CompleteSemilatticeInf.toPartialOrder.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5)))) (f i)) -> (Eq.{succ u3} α (infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => f i j))) (supᵢ.{u3, succ u1} α (CompleteSemilatticeSup.toHasSup.{u3} α (CompleteLattice.toCompleteSemilatticeSup.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι (fun (i : ι) => infᵢ.{u3, succ u2} α (CompleteSemilatticeInf.toHasInf.{u3} α (CompleteLattice.toCompleteSemilatticeInf.{u3} α (Order.Coframe.toCompleteLattice.{u3} α _inst_5))) ι' (fun (j : ι') => f i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12885 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12887 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12885 x._@.Mathlib.Data.Set.Finite._hyg.12887)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : Nonempty.{succ u2} ι'] [_inst_4 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.12889 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.12891 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.12889 x._@.Mathlib.Data.Set.Finite._hyg.12891)] [_inst_5 : Order.Coframe.{u1} α] {f : ι -> ι' -> α}, (forall (i : ι), Antitone.{u2, u1} ι' α _inst_2 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)))) (f i)) -> (Eq.{succ u1} α (infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => f i j))) (supᵢ.{u1, succ u3} α (CompleteLattice.toSupSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι (fun (i : ι) => infᵢ.{u1, succ u2} α (CompleteLattice.toInfSet.{u1} α (Order.Coframe.toCompleteLattice.{u1} α _inst_5)) ι' (fun (j : ι') => f i j))))
Case conversion may be inaccurate. Consider using '#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitoneₓ'. -/
theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
@@ -2151,7 +2151,7 @@ theorem Set.infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13014 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13016 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13014 x._@.Mathlib.Data.Set.Finite._hyg.13016)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13018 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13020 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13018 x._@.Mathlib.Data.Set.Finite._hyg.13020)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotoneₓ'. -/
/-- An increasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
@@ -2164,7 +2164,7 @@ theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.unionᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13136 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13138 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13136 x._@.Mathlib.Data.Set.Finite._hyg.13138))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13140 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13142 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13140 x._@.Mathlib.Data.Set.Finite._hyg.13142))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitoneₓ'. -/
/-- A decreasing union distributes over finite intersection. -/
theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2177,7 +2177,7 @@ theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2)))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Monotone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13258 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13260 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13258 x._@.Mathlib.Data.Set.Finite._hyg.13260))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (Function.swap.{succ u2, succ u2, 1} ι' ι' (fun (ᾰ : ι') (ᾰ : ι') => Prop) (fun (x._@.Mathlib.Data.Set.Finite._hyg.13262 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13264 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13262 x._@.Mathlib.Data.Set.Finite._hyg.13264))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Monotone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotoneₓ'. -/
/-- An increasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
@@ -2190,7 +2190,7 @@ theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder
lean 3 declaration is
forall {ι : Type.{u1}} {ι' : Type.{u2}} {α : Type.{u3}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2))] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u3} α)}, (forall (i : ι), Antitone.{u2, u3} ι' (Set.{u3} α) _inst_2 (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.completeBooleanAlgebra.{u3} α))))))) (s i)) -> (Eq.{succ u3} (Set.{u3} α) (Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u3, succ u1} α ι (fun (i : ι) => Set.interᵢ.{u3, succ u2} α ι' (fun (j : ι') => s i j))))
but is expected to have type
- forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13377 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13379 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13377 x._@.Mathlib.Data.Set.Finite._hyg.13379)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
+ forall {ι : Type.{u3}} {ι' : Type.{u2}} {α : Type.{u1}} [_inst_1 : Finite.{succ u3} ι] [_inst_2 : Preorder.{u2} ι'] [_inst_3 : IsDirected.{u2} ι' (fun (x._@.Mathlib.Data.Set.Finite._hyg.13381 : ι') (x._@.Mathlib.Data.Set.Finite._hyg.13383 : ι') => LE.le.{u2} ι' (Preorder.toLE.{u2} ι' _inst_2) x._@.Mathlib.Data.Set.Finite._hyg.13381 x._@.Mathlib.Data.Set.Finite._hyg.13383)] [_inst_4 : Nonempty.{succ u2} ι'] {s : ι -> ι' -> (Set.{u1} α)}, (forall (i : ι), Antitone.{u2, u1} ι' (Set.{u1} α) _inst_2 (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (s i)) -> (Eq.{succ u1} (Set.{u1} α) (Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => s i j))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, succ u2} α ι' (fun (j : ι') => s i j))))
Case conversion may be inaccurate. Consider using '#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitoneₓ'. -/
/-- A decreasing intersection distributes over finite union. -/
theorem interᵢ_unionᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -363,7 +363,7 @@ protected theorem toFinset_symmDiff [DecidableEq α] (hs : s.Finite) (ht : t.Fin
lean 3 declaration is
forall {α : Type.{u1}} {s : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} α] (hs : Set.Finite.{u1} α s) (h : Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) h) (HasCompl.compl.{u1} (Finset.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} α) (Finset.booleanAlgebra.{u1} α _inst_2 (fun (a : α) (b : α) => _inst_1 a b))) (Set.Finite.toFinset.{u1} α s hs))
but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} α] (hs : Set.Finite.{u1} α s) (h : Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) h) (HasCompl.compl.{u1} (Finset.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} α) (Finset.instBooleanAlgebraFinset.{u1} α _inst_2 (fun (a : α) (b : α) => _inst_1 a b))) (Set.Finite.toFinset.{u1} α s hs))
+ forall {α : Type.{u1}} {s : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Fintype.{u1} α] (hs : Set.Finite.{u1} α s) (h : Set.Finite.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) h) (HasCompl.compl.{u1} (Finset.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} α) (Finset.booleanAlgebra.{u1} α _inst_2 (fun (a : α) (b : α) => _inst_1 a b))) (Set.Finite.toFinset.{u1} α s hs))
Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_compl Set.Finite.toFinset_complₓ'. -/
protected theorem toFinset_compl [DecidableEq α] [Fintype α] (hs : s.Finite) (h : sᶜ.Finite) :
h.toFinset = hs.toFinsetᶜ := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -956,11 +956,11 @@ instance finite_image (s : Set α) (f : α → β) [Finite s] : Finite (f '' s)
#align finite.set.finite_image Finite.Set.finite_image
-/
-/- ./././Mathport/Syntax/Translate/Expr.lean:370:4: unsupported set replacement {(f x) | x : α} -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:366:4: unsupported set replacement {(f x) | x : α} -/
#print Finite.Set.finite_replacement /-
instance finite_replacement [Finite α] (f : α → β) :
Finite
- "./././Mathport/Syntax/Translate/Expr.lean:370:4: unsupported set replacement {(f x) | x : α}" :=
+ "./././Mathport/Syntax/Translate/Expr.lean:366:4: unsupported set replacement {(f x) | x : α}" :=
Finite.Set.finite_range f
#align finite.set.finite_replacement Finite.Set.finite_replacement
-/
@@ -1697,8 +1697,8 @@ theorem card_image_of_inj_on {s : Set α} [Fintype s] {f : α → β} [Fintype (
calc
Fintype.card (f '' s) = (s.to_finset.image f).card := Fintype.card_of_finset' _ (by simp)
_ = s.to_finset.card :=
- Finset.card_image_of_injOn fun x hx y hy hxy =>
- H x (mem_to_finset.1 hx) y (mem_to_finset.1 hy) hxy
+ (Finset.card_image_of_injOn fun x hx y hy hxy =>
+ H x (mem_to_finset.1 hx) y (mem_to_finset.1 hy) hxy)
_ = Fintype.card s := (Fintype.card_of_finset' _ fun a => mem_to_finset).symm
#align set.card_image_of_inj_on Set.card_image_of_inj_on
@@ -2352,7 +2352,7 @@ theorem Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y z «expr ∈ » s) -/
#print Set.finite_of_forall_not_lt_lt /-
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
theorem Set.finite_of_forall_not_lt_lt {s : Set α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -350,7 +350,7 @@ protected theorem toFinset_diff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
lean 3 declaration is
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s t) h) (symmDiff.{u1} (Finset.{u1} α) (SemilatticeSup.toHasSup.{u1} (Finset.{u1} α) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)))) (Finset.hasSdiff.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t) h) (symmDiff.{u1} (Finset.{u1} α) (SemilatticeSup.toHasSup.{u1} (Finset.{u1} α) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
+ forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α} [_inst_1 : DecidableEq.{succ u1} α] (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u1} α t) (h : Set.Finite.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t)), Eq.{succ u1} (Finset.{u1} α) (Set.Finite.toFinset.{u1} α (symmDiff.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (Set.instSDiffSet.{u1} α) s t) h) (symmDiff.{u1} (Finset.{u1} α) (SemilatticeSup.toSup.{u1} (Finset.{u1} α) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u1} α t ht))
Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_symm_diff Set.Finite.toFinset_symmDiffₓ'. -/
protected theorem toFinset_symmDiff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∆ t).Finite) : h.toFinset = hs.toFinset ∆ ht.toFinset :=
@@ -1054,9 +1054,9 @@ theorem Finite.finite_of_compl {s : Set α} (hs : s.Finite) (hsc : sᶜ.Finite)
/- warning: set.finite.sup -> Set.Finite.sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (HasSup.sup.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) s t))
+ forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (Sup.sup.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) s t))
but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (HasSup.sup.{u1} (Set.{u1} α) (SemilatticeSup.toHasSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) s t))
+ forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α t) -> (Set.Finite.{u1} α (Sup.sup.{u1} (Set.{u1} α) (SemilatticeSup.toSup.{u1} (Set.{u1} α) (Lattice.toSemilatticeSup.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) s t))
Case conversion may be inaccurate. Consider using '#align set.finite.sup Set.Finite.supₓ'. -/
theorem Finite.sup {s t : Set α} : s.Finite → t.Finite → (s ⊔ t).Finite :=
Finite.union
@@ -1096,9 +1096,9 @@ theorem Finite.inter_of_right {s : Set α} (hs : s.Finite) (t : Set α) : (t ∩
/- warning: set.finite.inf_of_left -> Set.Finite.inf_of_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (HasInf.inf.{u1} (Set.{u1} α) (SemilatticeInf.toHasInf.{u1} (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) s t))
+ forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (SemilatticeInf.toHasInf.{u1} (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) s t))
but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (HasInf.inf.{u1} (Set.{u1} α) (Lattice.toHasInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t))
+ forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (Lattice.toInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t))
Case conversion may be inaccurate. Consider using '#align set.finite.inf_of_left Set.Finite.inf_of_leftₓ'. -/
theorem Finite.inf_of_left {s : Set α} (h : s.Finite) (t : Set α) : (s ⊓ t).Finite :=
h.inter_of_left t
@@ -1106,9 +1106,9 @@ theorem Finite.inf_of_left {s : Set α} (h : s.Finite) (t : Set α) : (s ⊓ t).
/- warning: set.finite.inf_of_right -> Set.Finite.inf_of_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (HasInf.inf.{u1} (Set.{u1} α) (SemilatticeInf.toHasInf.{u1} (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) t s))
+ forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (SemilatticeInf.toHasInf.{u1} (Set.{u1} α) (Lattice.toSemilatticeInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) t s))
but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (HasInf.inf.{u1} (Set.{u1} α) (Lattice.toHasInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) t s))
+ forall {α : Type.{u1}} {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (forall (t : Set.{u1} α), Set.Finite.{u1} α (Inf.inf.{u1} (Set.{u1} α) (Lattice.toInf.{u1} (Set.{u1} α) (CompleteLattice.toLattice.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) t s))
Case conversion may be inaccurate. Consider using '#align set.finite.inf_of_right Set.Finite.inf_of_rightₓ'. -/
theorem Finite.inf_of_right {s : Set α} (h : s.Finite) (t : Set α) : (t ⊓ s).Finite :=
h.inter_of_right t
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Directed.exists_mem_subset_of_finset_subset_biUnion
using induction
tactic.Set.fintype
.Set α = α → Prop
defeq.@@ -1758,17 +1758,13 @@ lemma Set.finite_diff_iUnion_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.
lemma Directed.exists_mem_subset_of_finset_subset_biUnion {α ι : Type*} [Nonempty ι]
{f : ι → Set α} (h : Directed (· ⊆ ·) f) {s : Finset α} (hs : (s : Set α) ⊆ ⋃ i, f i) :
∃ i, (s : Set α) ⊆ f i := by
- classical
- revert hs
- refine s.induction_on ?_ ?_
- · simp
- intro b t _hbt htc hbtc
- obtain ⟨i : ι, hti : (t : Set α) ⊆ f i⟩ := htc (Set.Subset.trans (t.subset_insert b) hbtc)
- obtain ⟨j, hbj⟩ : ∃ j, b ∈ f j := by simpa [Set.mem_iUnion₂] using hbtc (t.mem_insert_self b)
- rcases h j i with ⟨k, hk, hk'⟩
- use k
- rw [Finset.coe_insert, Set.insert_subset_iff]
- exact ⟨hk hbj, _root_.trans hti hk'⟩
+ induction s using Finset.cons_induction with
+ | empty => simp
+ | cons hbt iht =>
+ simp only [Finset.coe_cons, Set.insert_subset_iff, Set.mem_iUnion] at hs ⊢
+ rcases hs.imp_right iht with ⟨⟨i, hi⟩, j, hj⟩
+ rcases h i j with ⟨k, hik, hjk⟩
+ exact ⟨k, hik hi, hj.trans hjk⟩
#align directed.exists_mem_subset_of_finset_subset_bUnion Directed.exists_mem_subset_of_finset_subset_biUnion
theorem DirectedOn.exists_mem_subset_of_finset_subset_biUnion {α ι : Type*} {f : ι → Set α}
bex
and ball
from lemma names (#11615)
Follow-up to #10816.
Remaining places containing such lemmas are
Option.bex_ne_none
and Option.ball_ne_none
: defined in Lean coreNat.decidableBallLT
and Nat.decidableBallLE
: defined in Lean corebef_def
is still used in a number of places and could be renamedBAll.imp_{left,right}
, BEx.imp_{left,right}
, BEx.intro
and BEx.elim
I only audited the first ~150 lemmas mentioning "ball"; too many lemmas named after Metric.ball/openBall/closedBall.
Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -1531,7 +1531,7 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type*} [Preorder ι'] [Nonemp
(hf : ∀ i ∈ s, Monotone (f i)) : ⨆ j, ⨅ i ∈ s, f i j = ⨅ i ∈ s, ⨆ j, f i j := by
induction' s, hs using Set.Finite.dinduction_on with a s _ _ ihs hf
· simp [iSup_const]
- · rw [ball_insert_iff] at hf
+ · rw [forall_mem_insert] at hf
simp only [iInf_insert, ← ihs hf.2]
exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
@@ -1675,8 +1675,8 @@ protected theorem Finite.bddAbove (hs : s.Finite) : BddAbove s :=
/-- A finite union of sets which are all bounded above is still bounded above. -/
theorem Finite.bddAbove_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddAbove (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddAbove (S i) :=
- Finite.induction_on H (by simp only [biUnion_empty, bddAbove_empty, ball_empty_iff])
- fun _ _ hs => by simp only [biUnion_insert, ball_insert_iff, bddAbove_union, hs]
+ Finite.induction_on H (by simp only [biUnion_empty, bddAbove_empty, forall_mem_empty])
+ fun _ _ hs => by simp only [biUnion_insert, forall_mem_insert, bddAbove_union, hs]
#align set.finite.bdd_above_bUnion Set.Finite.bddAbove_biUnion
theorem infinite_of_not_bddAbove : ¬BddAbove s → s.Infinite :=
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -1667,12 +1667,12 @@ section
variable [Preorder α] [IsDirected α (· ≤ ·)] [Nonempty α] {s : Set α}
-/-- A finite set is bounded above.-/
+/-- A finite set is bounded above. -/
protected theorem Finite.bddAbove (hs : s.Finite) : BddAbove s :=
Finite.induction_on hs bddAbove_empty fun _ _ h => h.insert _
#align set.finite.bdd_above Set.Finite.bddAbove
-/-- A finite union of sets which are all bounded above is still bounded above.-/
+/-- A finite union of sets which are all bounded above is still bounded above. -/
theorem Finite.bddAbove_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddAbove (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddAbove (S i) :=
Finite.induction_on H (by simp only [biUnion_empty, bddAbove_empty, ball_empty_iff])
@@ -1689,12 +1689,12 @@ section
variable [Preorder α] [IsDirected α (· ≥ ·)] [Nonempty α] {s : Set α}
-/-- A finite set is bounded below.-/
+/-- A finite set is bounded below. -/
protected theorem Finite.bddBelow (hs : s.Finite) : BddBelow s :=
@Finite.bddAbove αᵒᵈ _ _ _ _ hs
#align set.finite.bdd_below Set.Finite.bddBelow
-/-- A finite union of sets which are all bounded below is still bounded below.-/
+/-- A finite union of sets which are all bounded below is still bounded below. -/
theorem Finite.bddBelow_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddBelow (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddBelow (S i) :=
@Finite.bddAbove_biUnion αᵒᵈ _ _ _ _ _ _ H
Move Finset.biUnion
and Finset.disjiUnion
to a new file so that Data.Finset.Basic
doesn't depend on that much order theory.
@@ -4,8 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
-/
import Mathlib.Data.Finset.Basic
-import Mathlib.Data.Set.Functor
import Mathlib.Data.Finite.Basic
+import Mathlib.Data.Set.Functor
+import Mathlib.Data.Set.Lattice
#align_import data.set.finite from "leanprover-community/mathlib"@"65a1391a0106c9204fe45bc73a039f056558cb83"
@@ -1753,3 +1754,27 @@ lemma Set.finite_diff_iUnion_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Io
lemma Set.finite_diff_iUnion_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
simpa only [iUnion, iSup_prod, iSup_subtype] using s.finite_diff_iUnion_Ioo
#align set.finite_diff_Union_Ioo' Set.finite_diff_iUnion_Ioo'
+
+lemma Directed.exists_mem_subset_of_finset_subset_biUnion {α ι : Type*} [Nonempty ι]
+ {f : ι → Set α} (h : Directed (· ⊆ ·) f) {s : Finset α} (hs : (s : Set α) ⊆ ⋃ i, f i) :
+ ∃ i, (s : Set α) ⊆ f i := by
+ classical
+ revert hs
+ refine s.induction_on ?_ ?_
+ · simp
+ intro b t _hbt htc hbtc
+ obtain ⟨i : ι, hti : (t : Set α) ⊆ f i⟩ := htc (Set.Subset.trans (t.subset_insert b) hbtc)
+ obtain ⟨j, hbj⟩ : ∃ j, b ∈ f j := by simpa [Set.mem_iUnion₂] using hbtc (t.mem_insert_self b)
+ rcases h j i with ⟨k, hk, hk'⟩
+ use k
+ rw [Finset.coe_insert, Set.insert_subset_iff]
+ exact ⟨hk hbj, _root_.trans hti hk'⟩
+#align directed.exists_mem_subset_of_finset_subset_bUnion Directed.exists_mem_subset_of_finset_subset_biUnion
+
+theorem DirectedOn.exists_mem_subset_of_finset_subset_biUnion {α ι : Type*} {f : ι → Set α}
+ {c : Set ι} (hn : c.Nonempty) (hc : DirectedOn (fun i j => f i ⊆ f j) c) {s : Finset α}
+ (hs : (s : Set α) ⊆ ⋃ i ∈ c, f i) : ∃ i ∈ c, (s : Set α) ⊆ f i := by
+ rw [Set.biUnion_eq_iUnion] at hs
+ haveI := hn.coe_sort
+ simpa using (directed_comp.2 hc.directed_val).exists_mem_subset_of_finset_subset_biUnion hs
+#align directed_on.exists_mem_subset_of_finset_subset_bUnion DirectedOn.exists_mem_subset_of_finset_subset_biUnion
@@ -302,8 +302,8 @@ protected theorem toFinset_image [DecidableEq β] (f : α → β) (hs : s.Finite
simp
#align set.finite.to_finset_image Set.Finite.toFinset_image
--- Porting note: now `simp` can prove it but it needs the `fintypeRange` instance from the next
--- section
+-- Porting note (#10618): now `simp` can prove it but it needs the `fintypeRange` instance
+-- from the next section
protected theorem toFinset_range [DecidableEq α] [Fintype β] (f : β → α) (h : (range f).Finite) :
h.toFinset = Finset.univ.image f := by
ext
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -589,7 +589,7 @@ Some set instances do not appear here since they are consequences of others, for
namespace Finite.Set
-open Classical
+open scoped Classical
example {s : Set α} [Finite α] : Finite s :=
inferInstance
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -475,7 +475,7 @@ def fintypeOfFintypeImage (s : Set α) {f : α → β} {g} (I : IsPartialInv f g
#align set.fintype_of_fintype_image Set.fintypeOfFintypeImage
instance fintypeRange [DecidableEq α] (f : ι → α) [Fintype (PLift ι)] : Fintype (range f) :=
- Fintype.ofFinset (Finset.univ.image <| f ∘ PLift.down) <| by simp [Equiv.plift.exists_congr_left]
+ Fintype.ofFinset (Finset.univ.image <| f ∘ PLift.down) <| by simp
#align set.fintype_range Set.fintypeRange
instance fintypeMap {α β} [DecidableEq β] :
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -100,7 +100,7 @@ protected noncomputable def Finite.toFinset {s : Set α} (h : s.Finite) : Finset
theorem Finite.toFinset_eq_toFinset {s : Set α} [Fintype s] (h : s.Finite) :
h.toFinset = s.toFinset := by
- -- porting note: was `rw [Finite.toFinset]; congr`
+ -- Porting note: was `rw [Finite.toFinset]; congr`
-- in Lean 4, a goal is left after `congr`
have : h.fintype = ‹_› := Subsingleton.elim _ _
rw [Finite.toFinset, this]
@@ -229,13 +229,13 @@ alias ⟨_, toFinset_strictMono⟩ := Finite.toFinset_ssubset_toFinset
-- Porting note: attribute [protected] doesn't work
-- attribute [protected] toFinset_mono toFinset_strictMono
--- porting note: `simp` can simplify LHS but then it simplifies something
+-- Porting note: `simp` can simplify LHS but then it simplifies something
-- in the generated `Fintype {x | p x}` instance and fails to apply `Set.toFinset_setOf`
@[simp high]
protected theorem toFinset_setOf [Fintype α] (p : α → Prop) [DecidablePred p]
(h : { x | p x }.Finite) : h.toFinset = Finset.univ.filter p := by
ext
- -- porting note: `simp` doesn't use the `simp` lemma `Set.toFinset_setOf` without the `_`
+ -- Porting note: `simp` doesn't use the `simp` lemma `Set.toFinset_setOf` without the `_`
simp [Set.toFinset_setOf _]
#align set.finite.to_finset_set_of Set.Finite.toFinset_setOf
@@ -302,7 +302,7 @@ protected theorem toFinset_image [DecidableEq β] (f : α → β) (hs : s.Finite
simp
#align set.finite.to_finset_image Set.Finite.toFinset_image
--- porting note: now `simp` can prove it but it needs the `fintypeRange` instance from the next
+-- Porting note: now `simp` can prove it but it needs the `fintypeRange` instance from the next
-- section
protected theorem toFinset_range [DecidableEq α] [Fintype β] (f : β → α) (h : (range f).Finite) :
h.toFinset = Finset.univ.image f := by
@@ -1085,7 +1085,7 @@ theorem univ_finite_iff_nonempty_fintype : (univ : Set α).Finite ↔ Nonempty (
⟨fun h => ⟨fintypeOfFiniteUniv h⟩, fun ⟨_i⟩ => finite_univ⟩
#align set.univ_finite_iff_nonempty_fintype Set.univ_finite_iff_nonempty_fintype
--- porting note: moved `@[simp]` to `Set.toFinset_singleton` because `simp` can now simplify LHS
+-- Porting note: moved `@[simp]` to `Set.toFinset_singleton` because `simp` can now simplify LHS
theorem Finite.toFinset_singleton {a : α} (ha : ({a} : Set α).Finite := finite_singleton _) :
ha.toFinset = {a} :=
Set.toFinite_toFinset _
@@ -1329,7 +1329,7 @@ theorem infinite_coe_iff {s : Set α} : Infinite s ↔ s.Infinite :=
not_finite_iff_infinite.symm.trans finite_coe_iff.not
#align set.infinite_coe_iff Set.infinite_coe_iff
--- porting note: something weird happened here
+-- Porting note: something weird happened here
alias ⟨_, Infinite.to_subtype⟩ := infinite_coe_iff
#align set.infinite.to_subtype Set.Infinite.to_subtype
simp can prove
porting notes (#10930)
Classify by adding issue number (#10618) to porting notes claiming anything semantically equivalent to
simp
can prove this"simp
can simplify this`"@[simp]
, now can be proved by simp
"@[simp]
, but simp
can prove it"simp
"simp
can already prove this"simp
already proves this"simp
can prove these"@@ -547,7 +547,7 @@ theorem finite_toSet (s : Finset α) : (s : Set α).Finite :=
Set.toFinite _
#align finset.finite_to_set Finset.finite_toSet
--- porting note: was @[simp], now `simp` can prove it
+-- Porting note (#10618): was @[simp], now `simp` can prove it
theorem finite_toSet_toFinset (s : Finset α) : s.finite_toSet.toFinset = s := by
rw [toFinite_toFinset, toFinset_coe]
#align finset.finite_to_set_to_finset Finset.finite_toSet_toFinset
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -1163,7 +1163,7 @@ theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : S
constructor
· intro x_in
rcases mem_iUnion.mp (hI x_in) with ⟨i, _, ⟨hi, rfl⟩, H⟩
- refine' ⟨⟨i, hi⟩, ⟨H, x_in⟩⟩
+ exact ⟨⟨i, hi⟩, ⟨H, x_in⟩⟩
· rintro ⟨i, -, H⟩
exact H⟩
#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_iUnion_of_finite_subset_iUnion
@@ -26,9 +26,7 @@ about finite sets and gives ways to manipulate `Set.Finite` expressions.
## Implementation
-A finite set is defined to be a set whose coercion to a type has a `Fintype` instance.
-Since `Set.Finite` is `Prop`-valued, this is the mere fact that the `Fintype` instance
-exists.
+A finite set is defined to be a set whose coercion to a type has a `Finite` instance.
There are two components to finiteness constructions. The first is `Fintype` instances for each
construction. This gives a way to actually compute a `Finset` that represents the set, and these
@@ -51,15 +49,9 @@ variable {α : Type u} {β : Type v} {ι : Sort w} {γ : Type x}
namespace Set
-/-- A set is finite if there is a `Finset` with the same elements.
-This is represented as there being a `Fintype` instance for the set
-coerced to a type.
-
-Note: this is a custom inductive type rather than `Nonempty (Fintype s)`
-so that it won't be frozen as a local instance. -/
-protected
-inductive Finite (s : Set α) : Prop
- | intro : Fintype s → s.Finite
+/-- A set is finite if the corresponding `Subtype` is finite,
+i.e., if there exists a natural `n : ℕ` and an equivalence `s ≃ Fin n`. -/
+protected def Finite (s : Set α) : Prop := Finite s
#align set.finite Set.Finite
-- The `protected` attribute does not take effect within the same namespace block.
@@ -68,31 +60,28 @@ end Set
namespace Set
theorem finite_def {s : Set α} : s.Finite ↔ Nonempty (Fintype s) :=
- ⟨fun ⟨h⟩ => ⟨h⟩, fun ⟨h⟩ => ⟨h⟩⟩
+ finite_iff_nonempty_fintype s
#align set.finite_def Set.finite_def
protected alias ⟨Finite.nonempty_fintype, _⟩ := finite_def
#align set.finite.nonempty_fintype Set.Finite.nonempty_fintype
-theorem finite_coe_iff {s : Set α} : Finite s ↔ s.Finite := by
- rw [finite_iff_nonempty_fintype, finite_def]
+theorem finite_coe_iff {s : Set α} : Finite s ↔ s.Finite := .rfl
#align set.finite_coe_iff Set.finite_coe_iff
/-- Constructor for `Set.Finite` using a `Finite` instance. -/
-theorem toFinite (s : Set α) [Finite s] : s.Finite :=
- finite_coe_iff.mp ‹_›
+theorem toFinite (s : Set α) [Finite s] : s.Finite := ‹_›
#align set.to_finite Set.toFinite
/-- Construct a `Finite` instance for a `Set` from a `Finset` with the same elements. -/
protected theorem Finite.ofFinset {p : Set α} (s : Finset α) (H : ∀ x, x ∈ s ↔ x ∈ p) : p.Finite :=
- ⟨Fintype.ofFinset s H⟩
+ have := Fintype.ofFinset s H; p.toFinite
#align set.finite.of_finset Set.Finite.ofFinset
/-- Projection of `Set.Finite` to its `Finite` instance.
This is intended to be used with dot notation.
See also `Set.Finite.Fintype` and `Set.Finite.nonempty_fintype`. -/
-protected theorem Finite.to_subtype {s : Set α} (h : s.Finite) : Finite s :=
- finite_coe_iff.mpr h
+protected theorem Finite.to_subtype {s : Set α} (h : s.Finite) : Finite s := h
#align set.finite.to_subtype Set.Finite.to_subtype
/-- A finite set coerced to a type is a `Fintype`.
@@ -124,12 +113,12 @@ theorem toFinite_toFinset (s : Set α) [Fintype s] : s.toFinite.toFinset = s.toF
theorem Finite.exists_finset {s : Set α} (h : s.Finite) :
∃ s' : Finset α, ∀ a : α, a ∈ s' ↔ a ∈ s := by
- cases h
+ cases h.nonempty_fintype
exact ⟨s.toFinset, fun _ => mem_toFinset⟩
#align set.finite.exists_finset Set.Finite.exists_finset
theorem Finite.exists_finset_coe {s : Set α} (h : s.Finite) : ∃ s' : Finset α, ↑s' = s := by
- cases h
+ cases h.nonempty_fintype
exact ⟨s.toFinset, s.coe_toFinset⟩
#align set.finite.exists_finset_coe Set.Finite.exists_finset_coe
@@ -735,16 +724,19 @@ theorem finite_univ [Finite α] : (@univ α).Finite :=
Set.toFinite _
#align set.finite_univ Set.finite_univ
-theorem finite_univ_iff : (@univ α).Finite ↔ Finite α :=
- finite_coe_iff.symm.trans (Equiv.Set.univ α).finite_iff
+theorem finite_univ_iff : (@univ α).Finite ↔ Finite α := (Equiv.Set.univ α).finite_iff
#align set.finite_univ_iff Set.finite_univ_iff
alias ⟨_root_.Finite.of_finite_univ, _⟩ := finite_univ_iff
#align finite.of_finite_univ Finite.of_finite_univ
+theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) : t.Finite := by
+ have := hs.to_subtype
+ exact Finite.Set.subset _ ht
+#align set.finite.subset Set.Finite.subset
+
theorem Finite.union {s t : Set α} (hs : s.Finite) (ht : t.Finite) : (s ∪ t).Finite := by
- cases hs
- cases ht
+ rw [Set.Finite] at hs ht
apply toFinite
#align set.finite.union Set.Finite.union
@@ -757,19 +749,16 @@ theorem Finite.sup {s t : Set α} : s.Finite → t.Finite → (s ⊔ t).Finite :
Finite.union
#align set.finite.sup Set.Finite.sup
-theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : { a ∈ s | p a }.Finite := by
- cases hs
- apply toFinite
+theorem Finite.sep {s : Set α} (hs : s.Finite) (p : α → Prop) : { a ∈ s | p a }.Finite :=
+ hs.subset <| sep_subset _ _
#align set.finite.sep Set.Finite.sep
-theorem Finite.inter_of_left {s : Set α} (hs : s.Finite) (t : Set α) : (s ∩ t).Finite := by
- cases hs
- apply toFinite
+theorem Finite.inter_of_left {s : Set α} (hs : s.Finite) (t : Set α) : (s ∩ t).Finite :=
+ hs.subset <| inter_subset_left _ _
#align set.finite.inter_of_left Set.Finite.inter_of_left
-theorem Finite.inter_of_right {s : Set α} (hs : s.Finite) (t : Set α) : (t ∩ s).Finite := by
- cases hs
- apply toFinite
+theorem Finite.inter_of_right {s : Set α} (hs : s.Finite) (t : Set α) : (t ∩ s).Finite :=
+ hs.subset <| inter_subset_right _ _
#align set.finite.inter_of_right Set.Finite.inter_of_right
theorem Finite.inf_of_left {s : Set α} (h : s.Finite) (t : Set α) : (s ⊓ t).Finite :=
@@ -780,53 +769,41 @@ theorem Finite.inf_of_right {s : Set α} (h : s.Finite) (t : Set α) : (t ⊓ s)
h.inter_of_right t
#align set.finite.inf_of_right Set.Finite.inf_of_right
-theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) : t.Finite := by
- cases hs
- haveI := Finite.Set.subset _ ht
- apply toFinite
-#align set.finite.subset Set.Finite.subset
-
protected lemma Infinite.mono {s t : Set α} (h : s ⊆ t) : s.Infinite → t.Infinite :=
mt fun ht ↦ ht.subset h
#align set.infinite.mono Set.Infinite.mono
-theorem Finite.diff {s : Set α} (hs : s.Finite) (t : Set α) : (s \ t).Finite := by
- cases hs
- apply toFinite
+theorem Finite.diff {s : Set α} (hs : s.Finite) (t : Set α) : (s \ t).Finite :=
+ hs.subset <| diff_subset _ _
#align set.finite.diff Set.Finite.diff
theorem Finite.of_diff {s t : Set α} (hd : (s \ t).Finite) (ht : t.Finite) : s.Finite :=
(hd.union ht).subset <| subset_diff_union _ _
#align set.finite.of_diff Set.Finite.of_diff
-theorem finite_iUnion [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite := by
- haveI := fun i => (H i).fintype
- apply toFinite
+theorem finite_iUnion [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite :=
+ haveI := fun i => (H i).to_subtype
+ toFinite _
#align set.finite_Union Set.finite_iUnion
-theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.Finite t) :
- (⋃₀ s).Finite := by
- cases hs
- haveI := fun i : s => (H i i.2).to_subtype
- apply toFinite
-#align set.finite.sUnion Set.Finite.sUnion
-
-theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
- (ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
- classical
- cases hs
- haveI := fintypeBiUnion s t fun i hi => (ht i hi).fintype
- apply toFinite
-#align set.finite.bUnion Set.Finite.biUnion
-
/-- Dependent version of `Finite.biUnion`. -/
theorem Finite.biUnion' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
(ht : ∀ i (hi : i ∈ s), (t i hi).Finite) : (⋃ i ∈ s, t i ‹_›).Finite := by
- cases hs
+ have := hs.to_subtype
rw [biUnion_eq_iUnion]
apply finite_iUnion fun i : s => ht i.1 i.2
#align set.finite.bUnion' Set.Finite.biUnion'
+theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
+ (ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite :=
+ hs.biUnion' ht
+#align set.finite.bUnion Set.Finite.biUnion
+
+theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.Finite t) :
+ (⋃₀ s).Finite := by
+ simpa only [sUnion_eq_biUnion] using hs.biUnion H
+#align set.finite.sUnion Set.Finite.sUnion
+
theorem Finite.sInter {α : Type*} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
(⋂₀ s).Finite :=
hf.subset (sInter_subset_of_mem ht)
@@ -875,13 +852,12 @@ theorem finite_pure (a : α) : (pure a : Set α).Finite :=
#align set.finite_pure Set.finite_pure
@[simp]
-protected theorem Finite.insert (a : α) {s : Set α} (hs : s.Finite) : (insert a s).Finite := by
- cases hs
- apply toFinite
+protected theorem Finite.insert (a : α) {s : Set α} (hs : s.Finite) : (insert a s).Finite :=
+ (finite_singleton a).union hs
#align set.finite.insert Set.Finite.insert
theorem Finite.image {s : Set α} (f : α → β) (hs : s.Finite) : (f '' s).Finite := by
- cases hs
+ have := hs.to_subtype
apply toFinite
#align set.finite.image Set.Finite.image
@@ -894,8 +870,8 @@ lemma Finite.of_surjOn {s : Set α} {t : Set β} (f : α → β) (hf : SurjOn f
theorem Finite.dependent_image {s : Set α} (hs : s.Finite) (F : ∀ i ∈ s, β) :
{y : β | ∃ x hx, F x hx = y}.Finite := by
- cases hs
- simpa [range, eq_comm] using finite_range fun x : s => F x x.2
+ have := hs.to_subtype
+ simpa [range] using finite_range fun x : s => F x x.2
#align set.finite.dependent_image Set.Finite.dependent_image
theorem Finite.map {α β} {s : Set α} : ∀ f : α → β, s.Finite → (f <$> s).Finite :=
@@ -903,11 +879,9 @@ theorem Finite.map {α β} {s : Set α} : ∀ f : α → β, s.Finite → (f <$>
#align set.finite.map Set.Finite.map
theorem Finite.of_finite_image {s : Set α} {f : α → β} (h : (f '' s).Finite) (hi : Set.InjOn f s) :
- s.Finite := by
- cases h
- exact
- ⟨Fintype.ofInjective (fun a => (⟨f a.1, mem_image_of_mem f a.2⟩ : f '' s)) fun a b eq =>
- Subtype.eq <| hi a.2 b.2 <| Subtype.ext_iff_val.1 eq⟩
+ s.Finite :=
+ have := h.to_subtype
+ .of_injective _ hi.bijOn_image.bijective.injective
#align set.finite.of_finite_image Set.Finite.of_finite_image
section preimage
@@ -967,8 +941,8 @@ section Prod
variable {s : Set α} {t : Set β}
protected theorem Finite.prod (hs : s.Finite) (ht : t.Finite) : (s ×ˢ t : Set (α × β)).Finite := by
- cases hs
- cases ht
+ have := hs.to_subtype
+ have := ht.to_subtype
apply toFinite
#align set.finite.prod Set.Finite.prod
@@ -1003,27 +977,22 @@ theorem finite_prod : (s ×ˢ t).Finite ↔ (s.Finite ∨ t = ∅) ∧ (t.Finite
simp only [← not_infinite, Set.infinite_prod, not_or, not_and_or, not_nonempty_iff_eq_empty]
#align set.finite_prod Set.finite_prod
-protected theorem Finite.offDiag {s : Set α} (hs : s.Finite) : s.offDiag.Finite := by
- classical
- cases hs
- apply Set.toFinite
+protected theorem Finite.offDiag {s : Set α} (hs : s.Finite) : s.offDiag.Finite :=
+ (hs.prod hs).subset s.offDiag_subset_prod
#align set.finite.off_diag Set.Finite.offDiag
protected theorem Finite.image2 (f : α → β → γ) (hs : s.Finite) (ht : t.Finite) :
(image2 f s t).Finite := by
- cases hs
- cases ht
+ have := hs.to_subtype
+ have := ht.to_subtype
apply toFinite
#align set.finite.image2 Set.Finite.image2
end Prod
theorem Finite.seq {f : Set (α → β)} {s : Set α} (hf : f.Finite) (hs : s.Finite) :
- (f.seq s).Finite := by
- classical
- cases hf
- cases hs
- apply toFinite
+ (f.seq s).Finite :=
+ hf.image2 _ hs
#align set.finite.seq Set.Finite.seq
theorem Finite.seq' {α β : Type u} {f : Set (α → β)} {s : Set α} (hf : f.Finite) (hs : s.Finite) :
@@ -1052,10 +1021,11 @@ theorem exists_finite_iff_finset {p : Set α → Prop} :
#align set.exists_finite_iff_finset Set.exists_finite_iff_finset
/-- There are finitely many subsets of a given finite set -/
-theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : { b | b ⊆ a }.Finite :=
- ⟨Fintype.ofFinset ((Finset.powerset h.toFinset).map Finset.coeEmb.1) fun s => by
- simpa [← @exists_finite_iff_finset α fun t => t ⊆ a ∧ t = s, Finite.subset_toFinset, ←
- and_assoc, Finset.coeEmb] using h.subset⟩
+theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : { b | b ⊆ a }.Finite := by
+ convert ((Finset.powerset h.toFinset).map Finset.coeEmb.1).finite_toSet
+ ext s
+ simpa [← @exists_finite_iff_finset α fun t => t ⊆ a ∧ t = s, Finite.subset_toFinset,
+ ← and_assoc, Finset.coeEmb] using h.subset
#align set.finite.finite_subsets Set.Finite.finite_subsets
section Pi
@@ -1097,7 +1067,6 @@ end SetFiniteConstructors
/-! ### Properties -/
-
instance Finite.inhabited : Inhabited { s : Set α // s.Finite } :=
⟨⟨∅, finite_empty⟩⟩
#align set.finite.inhabited Set.Finite.inhabited
@@ -1174,7 +1143,7 @@ theorem forall_finite_image_eval_iff {δ : Type*} [Finite δ] {κ : δ → Type*
theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set α} (h : s ⊆ ⋃ i, t i) :
∃ I : Set ι, I.Finite ∧ s ⊆ ⋃ i ∈ I, t i := by
- cases hs
+ have := hs.to_subtype
choose f hf using show ∀ x : s, ∃ i, x.1 ∈ t i by simpa [subset_def] using h
refine' ⟨range f, finite_range f, fun x hx => _⟩
rw [biUnion_range, mem_iUnion]
@@ -1275,8 +1275,8 @@ theorem empty_card : Fintype.card (∅ : Set α) = 0 :=
rfl
#align set.empty_card Set.empty_card
-theorem empty_card' {h : Fintype.{u} (∅ : Set α)} : @Fintype.card (∅ : Set α) h = 0 :=
- by simp
+theorem empty_card' {h : Fintype.{u} (∅ : Set α)} : @Fintype.card (∅ : Set α) h = 0 := by
+ simp
#align set.empty_card' Set.empty_card'
theorem card_fintypeInsertOfNotMem {a : α} (s : Set α) [Fintype s] (h : a ∉ s) :
Set
(#9123)
This PR adds another induction principle for Set
where you prove that a property C
holds of Set.univ
by proving the inductive step C S → ∃ a ∉ S, C (insert a S)
(the key being exists the use of exists rather than forall).
Co-authored-by: Thomas Browning <tb65536@users.noreply.github.com>
@@ -1228,6 +1228,23 @@ theorem Finite.dinduction_on {C : ∀ s : Set α, s.Finite → Prop} (s : Set α
this h
#align set.finite.dinduction_on Set.Finite.dinduction_on
+/-- Induction up to a finite set `S`. -/
+theorem Finite.induction_to {C : Set α → Prop} {S : Set α} (h : S.Finite)
+ (S0 : Set α) (hS0 : S0 ⊆ S) (H0 : C S0) (H1 : ∀ s ⊂ S, C s → ∃ a ∈ S \ s, C (insert a s)) :
+ C S := by
+ have : Finite S := Finite.to_subtype h
+ have : Finite {T : Set α // T ⊆ S} := Finite.of_equiv (Set S) (Equiv.Set.powerset S).symm
+ rw [← Subtype.coe_mk (p := (· ⊆ S)) _ le_rfl]
+ rw [← Subtype.coe_mk (p := (· ⊆ S)) _ hS0] at H0
+ refine Finite.to_wellFoundedGT.wf.induction_bot' (fun s hs hs' ↦ ?_) H0
+ obtain ⟨a, ⟨ha1, ha2⟩, ha'⟩ := H1 s (ssubset_of_ne_of_subset hs s.2) hs'
+ exact ⟨⟨insert a s.1, insert_subset ha1 s.2⟩, Set.ssubset_insert ha2, ha'⟩
+
+/-- Induction up to `univ`. -/
+theorem Finite.induction_to_univ [Finite α] {C : Set α → Prop} (S0 : Set α)
+ (H0 : C S0) (H1 : ∀ S ≠ univ, C S → ∃ a ∉ S, C (insert a S)) : C univ :=
+ finite_univ.induction_to S0 (subset_univ S0) H0 (by simpa [ssubset_univ_iff])
+
section
attribute [local instance] Nat.fintypeIio
Those notations are not scoped whereas the file is very low in the import hierarchy.
@@ -274,6 +274,7 @@ protected theorem toFinset_diff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
simp
#align set.finite.to_finset_diff Set.Finite.toFinset_diff
+open scoped symmDiff in
protected theorem toFinset_symmDiff [DecidableEq α] (hs : s.Finite) (ht : t.Finite)
(h : (s ∆ t).Finite) : h.toFinset = hs.toFinset ∆ ht.toFinset := by
ext
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -859,7 +859,7 @@ theorem finite_empty : (∅ : Set α).Finite :=
#align set.finite_empty Set.finite_empty
protected theorem Infinite.nonempty {s : Set α} (h : s.Infinite) : s.Nonempty :=
- nonempty_iff_ne_empty.2 $ by
+ nonempty_iff_ne_empty.2 <| by
rintro rfl
exact h finite_empty
#align set.infinite.nonempty Set.Infinite.nonempty
@@ -926,10 +926,10 @@ theorem Finite.preimage (I : Set.InjOn f (f ⁻¹' s)) (h : s.Finite) : (f ⁻¹
#align set.finite.preimage Set.Finite.preimage
protected lemma Infinite.preimage (hs : s.Infinite) (hf : s ⊆ range f) : (f ⁻¹' s).Infinite :=
- fun h ↦ hs $ finite_of_finite_preimage h hf
+ fun h ↦ hs <| finite_of_finite_preimage h hf
lemma Infinite.preimage' (hs : (s ∩ range f).Infinite) : (f ⁻¹' s).Infinite :=
- (hs.preimage $ inter_subset_right _ _).mono $ preimage_mono $ inter_subset_left _ _
+ (hs.preimage <| inter_subset_right _ _).mono <| preimage_mono <| inter_subset_left _ _
theorem Finite.preimage_embedding {s : Set β} (f : α ↪ β) (h : s.Finite) : (f ⁻¹' s).Finite :=
h.preimage fun _ _ _ _ h' => f.injective h'
@@ -992,7 +992,7 @@ protected theorem infinite_prod :
refine' ⟨fun h => _, _⟩
· simp_rw [Set.Infinite, @and_comm ¬_, ← not_imp]
by_contra!
- exact h ((this.1 h.nonempty.snd).prod $ this.2 h.nonempty.fst)
+ exact h ((this.1 h.nonempty.snd).prod <| this.2 h.nonempty.fst)
· rintro (h | h)
· exact h.1.prod_left h.2
· exact h.1.prod_right h.2
@@ -1347,7 +1347,7 @@ alias ⟨_, Infinite.to_subtype⟩ := infinite_coe_iff
#align set.infinite.to_subtype Set.Infinite.to_subtype
lemma Infinite.exists_not_mem_finite (hs : s.Infinite) (ht : t.Finite) : ∃ a, a ∈ s ∧ a ∉ t := by
- by_contra! h; exact hs $ ht.subset h
+ by_contra! h; exact hs <| ht.subset h
lemma Infinite.exists_not_mem_finset (hs : s.Infinite) (t : Finset α) : ∃ a ∈ s, a ∉ t :=
hs.exists_not_mem_finite t.finite_toSet
@@ -1755,7 +1755,7 @@ lemma Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z →
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
lemma Set.finite_of_forall_not_lt_lt (h : ∀ x ∈ s, ∀ y ∈ s, ∀ z ∈ s, x < y → y < z → False) :
Set.Finite s :=
- @Set.toFinite _ s <| Finite.of_forall_not_lt_lt $ by simpa only [SetCoe.forall'] using h
+ @Set.toFinite _ s <| Finite.of_forall_not_lt_lt <| by simpa only [SetCoe.forall'] using h
#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
lemma Set.finite_diff_iUnion_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
@@ -71,7 +71,7 @@ theorem finite_def {s : Set α} : s.Finite ↔ Nonempty (Fintype s) :=
⟨fun ⟨h⟩ => ⟨h⟩, fun ⟨h⟩ => ⟨h⟩⟩
#align set.finite_def Set.finite_def
-alias ⟨Finite.nonempty_fintype, _⟩ := finite_def
+protected alias ⟨Finite.nonempty_fintype, _⟩ := finite_def
#align set.finite.nonempty_fintype Set.Finite.nonempty_fintype
theorem finite_coe_iff {s : Set α} : Finite s ↔ s.Finite := by
@@ -1057,16 +1057,25 @@ theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : { b |
and_assoc, Finset.coeEmb] using h.subset⟩
#align set.finite.finite_subsets Set.Finite.finite_subsets
+section Pi
+variable {ι : Type*} [Finite ι] {κ : ι → Type*} {t : ∀ i, Set (κ i)}
+
/-- Finite product of finite sets is finite -/
-theorem Finite.pi {δ : Type*} [Finite δ] {κ : δ → Type*} {t : ∀ d, Set (κ d)}
- (ht : ∀ d, (t d).Finite) : (pi univ t).Finite := by
- cases _root_.nonempty_fintype δ
+theorem Finite.pi (ht : ∀ i, (t i).Finite) : (pi univ t).Finite := by
+ cases nonempty_fintype ι
lift t to ∀ d, Finset (κ d) using ht
classical
rw [← Fintype.coe_piFinset]
apply Finset.finite_toSet
#align set.finite.pi Set.Finite.pi
+/-- Finite product of finite sets is finite. Note this is a variant of `Set.Finite.pi` without the
+extra `i ∈ univ` binder. -/
+lemma Finite.pi' (ht : ∀ i, (t i).Finite) : {f : ∀ i, κ i | ∀ i, f i ∈ t i}.Finite := by
+ simpa [Set.pi] using Finite.pi ht
+
+end Pi
+
/-- A finite union of finsets is finite. -/
theorem union_finset_finite_of_range_finite (f : α → Finset β) (h : (range f).Finite) :
(⋃ a, (f a : Set β)).Finite := by
@@ -192,7 +192,7 @@ theorem coeSort_toFinset : ↥hs.toFinset = ↥s := by
/-- The identity map, bundled as an equivalence between the subtypes of `s : Set α` and of
`h.toFinset : Finset α`, where `h` is a proof of finiteness of `s`. -/
@[simps!] def subtypeEquivToFinset : {x // x ∈ s} ≃ {x // x ∈ hs.toFinset} :=
- (Equiv.refl α).subtypeEquiv <| fun _ ↦ hs.mem_toFinset.symm
+ (Equiv.refl α).subtypeEquiv fun _ ↦ hs.mem_toFinset.symm
variable {hs}
Lemmas around this were a mess, throth in terms of names, statement and location. This PR standardises everything to be in Algebra.BigOperators.Basic
and changes the lemmas to take in InjOn
and SurjOn
assumptions where possible (and where impossible make sure the hypotheses are taken in the correct order) and moves the equality of functions hypothesis last.
Also add a few lemmas that help fix downstream uses by golfing.
From LeanAPAP and LeanCamCombi
@@ -892,7 +892,7 @@ lemma Finite.of_surjOn {s : Set α} {t : Set β} (f : α → β) (hf : SurjOn f
t.Finite := (hs.image _).subset hf
theorem Finite.dependent_image {s : Set α} (hs : s.Finite) (F : ∀ i ∈ s, β) :
- { y : β | ∃ (x : _) (hx : x ∈ s), y = F x hx }.Finite := by
+ {y : β | ∃ x hx, F x hx = y}.Finite := by
cases hs
simpa [range, eq_comm] using finite_range fun x : s => F x x.2
#align set.finite.dependent_image Set.Finite.dependent_image
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
@@ -1290,10 +1290,10 @@ theorem card_lt_card {s t : Set α} [Fintype s] [Fintype t] (h : s ⊂ t) :
fun hst => (ssubset_iff_subset_ne.1 h).2 (eq_of_inclusion_surjective hst)
#align set.card_lt_card Set.card_lt_card
-theorem card_le_of_subset {s t : Set α} [Fintype s] [Fintype t] (hsub : s ⊆ t) :
+theorem card_le_card {s t : Set α} [Fintype s] [Fintype t] (hsub : s ⊆ t) :
Fintype.card s ≤ Fintype.card t :=
Fintype.card_le_of_injective (Set.inclusion hsub) (Set.inclusion_injective hsub)
-#align set.card_le_of_subset Set.card_le_of_subset
+#align set.card_le_card Set.card_le_card
theorem eq_of_subset_of_card_le {s t : Set α} [Fintype s] [Fintype t] (hsub : s ⊆ t)
(hcard : Fintype.card t ≤ Fintype.card s) : s = t :=
Set.maps_image_to
→ Set.mapsTo_image_iff
;Set.maps_univ_to
→ Set.mapsTo_univ_iff
;Set.maps_range_to
→ Set.mapsTo_range_iff
.In all cases, use implicit arguments instead of explicit arguments.
In the last case, also generalize from Type*
to Sort*
and replace the RHS with its simp
-normal form.
Old lemmas stay there but are now deprecated.
@@ -1497,7 +1497,7 @@ theorem Infinite.exists_lt_map_eq_of_mapsTo [LinearOrder α] {s : Set α} {t : S
theorem Finite.exists_lt_map_eq_of_forall_mem [LinearOrder α] [Infinite α] {t : Set β} {f : α → β}
(hf : ∀ a, f a ∈ t) (ht : t.Finite) : ∃ a b, a < b ∧ f a = f b := by
- rw [← maps_univ_to] at hf
+ rw [← mapsTo_univ_iff] at hf
obtain ⟨a, -, b, -, h⟩ := infinite_univ.exists_lt_map_eq_of_mapsTo hf ht
exact ⟨a, b, h⟩
#align set.finite.exists_lt_map_eq_of_forall_mem Set.Finite.exists_lt_map_eq_of_forall_mem
cases'
(#9171)
I literally went through and regex'd some uses of cases'
, replacing them with rcases
; this is meant to be a low effort PR as I hope that tools can do this in the future.
rcases
is an easier replacement than cases
, though with better tools we could in future do a second pass converting simple rcases
added here (and existing ones) to cases
.
@@ -1634,7 +1634,7 @@ theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α)
induction s, h using Set.Finite.dinduction_on with
| H0 => exact absurd hs not_nonempty_empty
| @H1 a s his _ ih =>
- cases' s.eq_empty_or_nonempty with h h
+ rcases s.eq_empty_or_nonempty with h | h
· use a
simp [h]
rcases ih h with ⟨b, hb, ih⟩
@@ -785,6 +785,10 @@ theorem Finite.subset {s : Set α} (hs : s.Finite) {t : Set α} (ht : t ⊆ s) :
apply toFinite
#align set.finite.subset Set.Finite.subset
+protected lemma Infinite.mono {s t : Set α} (h : s ⊆ t) : s.Infinite → t.Infinite :=
+ mt fun ht ↦ ht.subset h
+#align set.infinite.mono Set.Infinite.mono
+
theorem Finite.diff {s : Set α} (hs : s.Finite) (t : Set α) : (s \ t).Finite := by
cases hs
apply toFinite
@@ -905,26 +909,34 @@ theorem Finite.of_finite_image {s : Set α} {f : α → β} (h : (f '' s).Finite
Subtype.eq <| hi a.2 b.2 <| Subtype.ext_iff_val.1 eq⟩
#align set.finite.of_finite_image Set.Finite.of_finite_image
-theorem finite_of_finite_preimage {f : α → β} {s : Set β} (h : (f ⁻¹' s).Finite)
- (hs : s ⊆ range f) : s.Finite := by
+section preimage
+variable {f : α → β} {s : Set β}
+
+theorem finite_of_finite_preimage (h : (f ⁻¹' s).Finite) (hs : s ⊆ range f) : s.Finite := by
rw [← image_preimage_eq_of_subset hs]
exact Finite.image f h
#align set.finite_of_finite_preimage Set.finite_of_finite_preimage
-theorem Finite.of_preimage {f : α → β} {s : Set β} (h : (f ⁻¹' s).Finite) (hf : Surjective f) :
- s.Finite :=
+theorem Finite.of_preimage (h : (f ⁻¹' s).Finite) (hf : Surjective f) : s.Finite :=
hf.image_preimage s ▸ h.image _
#align set.finite.of_preimage Set.Finite.of_preimage
-theorem Finite.preimage {s : Set β} {f : α → β} (I : Set.InjOn f (f ⁻¹' s)) (h : s.Finite) :
- (f ⁻¹' s).Finite :=
+theorem Finite.preimage (I : Set.InjOn f (f ⁻¹' s)) (h : s.Finite) : (f ⁻¹' s).Finite :=
(h.subset (image_preimage_subset f s)).of_finite_image I
#align set.finite.preimage Set.Finite.preimage
+protected lemma Infinite.preimage (hs : s.Infinite) (hf : s ⊆ range f) : (f ⁻¹' s).Infinite :=
+ fun h ↦ hs $ finite_of_finite_preimage h hf
+
+lemma Infinite.preimage' (hs : (s ∩ range f).Infinite) : (f ⁻¹' s).Infinite :=
+ (hs.preimage $ inter_subset_right _ _).mono $ preimage_mono $ inter_subset_left _ _
+
theorem Finite.preimage_embedding {s : Set β} (f : α ↪ β) (h : s.Finite) : (f ⁻¹' s).Finite :=
h.preimage fun _ _ _ _ h' => f.injective h'
#align set.finite.preimage_embedding Set.Finite.preimage_embedding
+end preimage
+
theorem finite_lt_nat (n : ℕ) : Set.Finite { i | i < n } :=
toFinite _
#align set.finite_lt_nat Set.finite_lt_nat
@@ -1360,10 +1372,6 @@ theorem Finite.infinite_compl [Infinite α] {s : Set α} (hs : s.Finite) : sᶜ.
Set.infinite_univ (by simpa using hs.union h)
#align set.finite.infinite_compl Set.Finite.infinite_compl
-protected theorem Infinite.mono {s t : Set α} (h : s ⊆ t) : s.Infinite → t.Infinite :=
- mt fun ht => ht.subset h
-#align set.infinite.mono Set.Infinite.mono
-
theorem Infinite.diff {s t : Set α} (hs : s.Infinite) (ht : t.Finite) : (s \ t).Infinite := fun h =>
hs <| h.of_diff ht
#align set.infinite.diff Set.Infinite.diff
@@ -1412,6 +1420,12 @@ theorem infinite_image2 (hfs : ∀ b ∈ t, InjOn (fun a => f a b) s) (hft : ∀
· exact ht.image2_right ha (hft _ ha)
#align set.infinite_image2 Set.infinite_image2
+lemma finite_image2 (hfs : ∀ b ∈ t, InjOn (f · b) s) (hft : ∀ a ∈ s, InjOn (f a) t) :
+ (image2 f s t).Finite ↔ s.Finite ∧ t.Finite ∨ s = ∅ ∨ t = ∅ := by
+ rw [← not_infinite, infinite_image2 hfs hft]
+ simp [not_or, -not_and, not_and_or, not_nonempty_iff_eq_empty]
+ aesop
+
end Image2
theorem infinite_of_injOn_mapsTo {s : Set α} {t : Set β} {f : α → β} (hi : InjOn f s)
Rationale: this instance creates (empty) data out of nothing, which may conflict with other data. If you have in the context [Fintype i]
and case on whether i
is empty or not, then this gave two non-defeq instances of [Fintype i]
around.
@@ -286,11 +286,6 @@ protected theorem toFinset_compl [DecidableEq α] [Fintype α] (hs : s.Finite) (
simp
#align set.finite.to_finset_compl Set.Finite.toFinset_compl
--- porting note: was `@[simp]`, now `simp` can prove it
-protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅ :=
- toFinite_toFinset _
-#align set.finite.to_finset_empty Set.Finite.toFinset_empty
-
protected theorem toFinset_univ [Fintype α] (h : (Set.univ : Set α).Finite) :
h.toFinset = Finset.univ := by
simp
@@ -301,6 +296,10 @@ protected theorem toFinset_eq_empty {h : s.Finite} : h.toFinset = ∅ ↔ s =
@toFinset_eq_empty _ _ h.fintype
#align set.finite.to_finset_eq_empty Set.Finite.toFinset_eq_empty
+protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅ := by
+ simp
+#align set.finite.to_finset_empty Set.Finite.toFinset_empty
+
@[simp]
protected theorem toFinset_eq_univ [Fintype α] {h : s.Finite} :
h.toFinset = Finset.univ ↔ s = univ :=
@@ -1237,9 +1236,8 @@ theorem empty_card : Fintype.card (∅ : Set α) = 0 :=
rfl
#align set.empty_card Set.empty_card
-@[simp]
theorem empty_card' {h : Fintype.{u} (∅ : Set α)} : @Fintype.card (∅ : Set α) h = 0 :=
- Eq.trans (by congr; exact Subsingleton.elim _ _) empty_card
+ by simp
#align set.empty_card' Set.empty_card'
theorem card_fintypeInsertOfNotMem {a : α} (s : Set α) [Fintype s] (h : a ∉ s) :
A collection of loosely-related lemmas, split out from other work in the hopes of simplifying review.
@@ -934,6 +934,22 @@ theorem finite_le_nat (n : ℕ) : Set.Finite { i | i ≤ n } :=
toFinite _
#align set.finite_le_nat Set.finite_le_nat
+section MapsTo
+
+variable {s : Set α} {f : α → α} (hs : s.Finite) (hm : MapsTo f s s)
+
+theorem Finite.surjOn_iff_bijOn_of_mapsTo : SurjOn f s s ↔ BijOn f s s := by
+ refine ⟨fun h ↦ ⟨hm, ?_, h⟩, BijOn.surjOn⟩
+ have : Finite s := finite_coe_iff.mpr hs
+ exact hm.restrict_inj.mp (Finite.injective_iff_surjective.mpr <| hm.restrict_surjective_iff.mpr h)
+
+theorem Finite.injOn_iff_bijOn_of_mapsTo : InjOn f s ↔ BijOn f s s := by
+ refine ⟨fun h ↦ ⟨hm, h, ?_⟩, BijOn.injOn⟩
+ have : Finite s := finite_coe_iff.mpr hs
+ exact hm.restrict_surjective_iff.mp (Finite.injective_iff_surjective.mp <| hm.restrict_inj.mpr h)
+
+end MapsTo
+
section Prod
variable {s : Set α} {t : Set β}
@@ -964,7 +964,7 @@ protected theorem infinite_prod :
(s ×ˢ t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty := by
refine' ⟨fun h => _, _⟩
· simp_rw [Set.Infinite, @and_comm ¬_, ← not_imp]
- by_contra'
+ by_contra!
exact h ((this.1 h.nonempty.snd).prod $ this.2 h.nonempty.fst)
· rintro (h | h)
· exact h.1.prod_left h.2
@@ -1312,7 +1312,7 @@ alias ⟨_, Infinite.to_subtype⟩ := infinite_coe_iff
#align set.infinite.to_subtype Set.Infinite.to_subtype
lemma Infinite.exists_not_mem_finite (hs : s.Infinite) (ht : t.Finite) : ∃ a, a ∈ s ∧ a ∉ t := by
- by_contra' h; exact hs $ ht.subset h
+ by_contra! h; exact hs $ ht.subset h
lemma Infinite.exists_not_mem_finset (hs : s.Infinite) (t : Finset α) : ∃ a ∈ s, a ∉ t :=
hs.exists_not_mem_finite t.finite_toSet
@@ -1322,7 +1322,7 @@ section Infinite
variable [Infinite α]
lemma Finite.exists_not_mem (hs : s.Finite) : ∃ a, a ∉ s := by
- by_contra' h; exact infinite_univ (hs.subset fun a _ ↦ h _)
+ by_contra! h; exact infinite_univ (hs.subset fun a _ ↦ h _)
lemma _root_.Finset.exists_not_mem (s : Finset α) : ∃ a, a ∉ s := s.finite_toSet.exists_not_mem
@@ -167,28 +167,35 @@ protected theorem infinite_or_finite (s : Set α) : s.Infinite ∨ s.Finite :=
namespace Finite
-variable {s t : Set α} {a : α} {hs : s.Finite} {ht : t.Finite}
+variable {s t : Set α} {a : α} (hs : s.Finite) {ht : t.Finite}
@[simp]
-protected theorem mem_toFinset (h : s.Finite) : a ∈ h.toFinset ↔ a ∈ s :=
- @mem_toFinset _ _ h.fintype _
+protected theorem mem_toFinset : a ∈ hs.toFinset ↔ a ∈ s :=
+ @mem_toFinset _ _ hs.fintype _
#align set.finite.mem_to_finset Set.Finite.mem_toFinset
@[simp]
-protected theorem coe_toFinset (h : s.Finite) : (h.toFinset : Set α) = s :=
- @coe_toFinset _ _ h.fintype
+protected theorem coe_toFinset : (hs.toFinset : Set α) = s :=
+ @coe_toFinset _ _ hs.fintype
#align set.finite.coe_to_finset Set.Finite.coe_toFinset
@[simp]
-protected theorem toFinset_nonempty (h : s.Finite) : h.toFinset.Nonempty ↔ s.Nonempty := by
+protected theorem toFinset_nonempty : hs.toFinset.Nonempty ↔ s.Nonempty := by
rw [← Finset.coe_nonempty, Finite.coe_toFinset]
#align set.finite.to_finset_nonempty Set.Finite.toFinset_nonempty
/-- Note that this is an equality of types not holding definitionally. Use wisely. -/
-theorem coeSort_toFinset (h : s.Finite) : ↥h.toFinset = ↥s := by
- rw [← Finset.coe_sort_coe _, h.coe_toFinset]
+theorem coeSort_toFinset : ↥hs.toFinset = ↥s := by
+ rw [← Finset.coe_sort_coe _, hs.coe_toFinset]
#align set.finite.coe_sort_to_finset Set.Finite.coeSort_toFinset
+/-- The identity map, bundled as an equivalence between the subtypes of `s : Set α` and of
+`h.toFinset : Finset α`, where `h` is a proof of finiteness of `s`. -/
+@[simps!] def subtypeEquivToFinset : {x // x ∈ s} ≃ {x // x ∈ hs.toFinset} :=
+ (Equiv.refl α).subtypeEquiv <| fun _ ↦ hs.mem_toFinset.symm
+
+variable {hs}
+
@[simp]
protected theorem toFinset_inj : hs.toFinset = ht.toFinset ↔ s = t :=
@toFinset_inj _ _ _ hs.fintype ht.fintype
Set.monad
not an instance and add (Subtype.val '' ·)
coercion (#8413)
The monad instance on Set
isn't computationally relevant, and it causes Lean's monad lifting coercion logic to activate. We introduce a coercion instance for the case that's actually used in practice: when s : Set X
and t : Set s
then (t : Set X)
ought to be Subtype.val '' t
. This way we do not see Lean.Internal.coeM
terms.
If the monad is still wanted, it can be activated using a local attribute or by using the SetM.run
function.
@@ -400,6 +400,9 @@ instance fintypeBiUnion' [DecidableEq α] {ι : Type*} (s : Set ι) [Fintype s]
Fintype.ofFinset (s.toFinset.biUnion fun x => (t x).toFinset) <| by simp
#align set.fintype_bUnion' Set.fintypeBiUnion'
+section monad
+attribute [local instance] Set.monad
+
/-- If `s : Set α` is a set with `Fintype` instance and `f : α → Set β` is a function such that
each `f a`, `a ∈ s`, has a `Fintype` structure, then `s >>= f` has a `Fintype` structure. -/
def fintypeBind {α β} [DecidableEq β] (s : Set α) [Fintype s] (f : α → Set β)
@@ -412,6 +415,8 @@ instance fintypeBind' {α β} [DecidableEq β] (s : Set α) [Fintype s] (f : α
Set.fintypeBiUnion' s f
#align set.fintype_bind' Set.fintypeBind'
+end monad
+
instance fintypeEmpty : Fintype (∅ : Set α) :=
Fintype.ofFinset ∅ <| by simp
#align set.fintype_empty Set.fintypeEmpty
@@ -828,11 +833,16 @@ theorem Finite.iUnion {ι : Type*} {s : ι → Set α} {t : Set ι} (ht : t.Fini
contradiction
#align set.finite.Union Set.Finite.iUnion
+section monad
+attribute [local instance] Set.monad
+
theorem Finite.bind {α β} {s : Set α} {f : α → Set β} (h : s.Finite) (hf : ∀ a ∈ s, (f a).Finite) :
(s >>= f).Finite :=
h.biUnion hf
#align set.finite.bind Set.Finite.bind
+end monad
+
@[simp]
theorem finite_empty : (∅ : Set α).Finite :=
toFinite _
@@ -868,6 +868,9 @@ theorem finite_range (f : ι → α) [Finite ι] : (range f).Finite :=
toFinite _
#align set.finite_range Set.finite_range
+lemma Finite.of_surjOn {s : Set α} {t : Set β} (f : α → β) (hf : SurjOn f s t) (hs : s.Finite) :
+ t.Finite := (hs.image _).subset hf
+
theorem Finite.dependent_image {s : Set α} (hs : s.Finite) (F : ∀ i ∈ s, β) :
{ y : β | ∃ (x : _) (hx : x ∈ s), y = F x hx }.Finite := by
cases hs
@@ -1273,6 +1276,8 @@ theorem card_ne_eq [Fintype α] (a : α) [Fintype { x : α | x ≠ a }] :
/-! ### Infinite sets -/
+variable {s t : Set α}
+
theorem infinite_univ_iff : (@univ α).Infinite ↔ Infinite α := by
rw [Set.Infinite, finite_univ_iff, not_finite_iff_infinite]
#align set.infinite_univ_iff Set.infinite_univ_iff
@@ -1289,6 +1294,23 @@ theorem infinite_coe_iff {s : Set α} : Infinite s ↔ s.Infinite :=
alias ⟨_, Infinite.to_subtype⟩ := infinite_coe_iff
#align set.infinite.to_subtype Set.Infinite.to_subtype
+lemma Infinite.exists_not_mem_finite (hs : s.Infinite) (ht : t.Finite) : ∃ a, a ∈ s ∧ a ∉ t := by
+ by_contra' h; exact hs $ ht.subset h
+
+lemma Infinite.exists_not_mem_finset (hs : s.Infinite) (t : Finset α) : ∃ a ∈ s, a ∉ t :=
+ hs.exists_not_mem_finite t.finite_toSet
+#align set.infinite.exists_not_mem_finset Set.Infinite.exists_not_mem_finset
+
+section Infinite
+variable [Infinite α]
+
+lemma Finite.exists_not_mem (hs : s.Finite) : ∃ a, a ∉ s := by
+ by_contra' h; exact infinite_univ (hs.subset fun a _ ↦ h _)
+
+lemma _root_.Finset.exists_not_mem (s : Finset α) : ∃ a, a ∉ s := s.finite_toSet.exists_not_mem
+
+end Infinite
+
/-- Embedding of `ℕ` into an infinite set. -/
noncomputable def Infinite.natEmbedding (s : Set α) (h : s.Infinite) : ℕ ↪ s :=
h.to_subtype.natEmbedding
@@ -1384,12 +1406,6 @@ theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α →
exact (infinite_range_of_injective hi).mono hf
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-theorem Infinite.exists_not_mem_finset {s : Set α} (hs : s.Infinite) (f : Finset α) :
- ∃ a ∈ s, a ∉ f :=
- let ⟨a, has, haf⟩ := (hs.diff (toFinite f)).nonempty
- ⟨a, has, fun h => haf <| Finset.mem_coe.1 h⟩
-#align set.infinite.exists_not_mem_finset Set.Infinite.exists_not_mem_finset
-
theorem not_injOn_infinite_finite_image {f : α → β} {s : Set α} (h_inf : s.Infinite)
(h_fin : (f '' s).Finite) : ¬InjOn f s := by
have : Finite (f '' s) := finite_coe_iff.mpr h_fin
@@ -1651,6 +1667,14 @@ end Set
namespace Finset
+lemma exists_card_eq [Infinite α] : ∀ n : ℕ, ∃ s : Finset α, s.card = n
+ | 0 => ⟨∅, card_empty⟩
+ | n + 1 => by
+ classical
+ obtain ⟨s, rfl⟩ := exists_card_eq n
+ obtain ⟨a, ha⟩ := s.exists_not_mem
+ exact ⟨insert a s, card_insert_of_not_mem ha⟩
+
/-- A finset is bounded above. -/
protected theorem bddAbove [SemilatticeSup α] [Nonempty α] (s : Finset α) : BddAbove (↑s : Set α) :=
s.finite_toSet.bddAbove
attach
and filter
lemmas (#1470)
Match https://github.com/leanprover-community/mathlib/pull/18087
@@ -7,7 +7,7 @@ import Mathlib.Data.Finset.Basic
import Mathlib.Data.Set.Functor
import Mathlib.Data.Finite.Basic
-#align_import data.set.finite from "leanprover-community/mathlib"@"ffde2d8a6e689149e44fd95fa862c23a57f8c780"
+#align_import data.set.finite from "leanprover-community/mathlib"@"65a1391a0106c9204fe45bc73a039f056558cb83"
/-!
# Finite sets
@@ -1208,10 +1208,7 @@ theorem empty_card' {h : Fintype.{u} (∅ : Set α)} : @Fintype.card (∅ : Set
theorem card_fintypeInsertOfNotMem {a : α} (s : Set α) [Fintype s] (h : a ∉ s) :
@Fintype.card _ (fintypeInsertOfNotMem s h) = Fintype.card s + 1 := by
- rw [fintypeInsertOfNotMem, Fintype.card_ofFinset]
- simp only [Finset.card, toFinset, Finset.map_val, Embedding.coe_subtype,
- Multiset.card_cons, Multiset.card_map, add_left_inj]
- rfl
+ simp [fintypeInsertOfNotMem, Fintype.card_ofFinset]
#align set.card_fintype_insert_of_not_mem Set.card_fintypeInsertOfNotMem
@[simp]
Forward-ports https://github.com/leanprover-community/mathlib/pull/18628
@@ -7,7 +7,7 @@ import Mathlib.Data.Finset.Basic
import Mathlib.Data.Set.Functor
import Mathlib.Data.Finite.Basic
-#align_import data.set.finite from "leanprover-community/mathlib"@"7fdd4f3746cb059edfdb5d52cba98f66fce418c0"
+#align_import data.set.finite from "leanprover-community/mathlib"@"ffde2d8a6e689149e44fd95fa862c23a57f8c780"
/-!
# Finite sets
@@ -1610,7 +1610,7 @@ lemma Finite.exists_minimal_wrt' [PartialOrder β] (f : α → β) (s : Set α)
section
-variable [SemilatticeSup α] [Nonempty α] {s : Set α}
+variable [Preorder α] [IsDirected α (· ≤ ·)] [Nonempty α] {s : Set α}
/-- A finite set is bounded above.-/
protected theorem Finite.bddAbove (hs : s.Finite) : BddAbove s :=
@@ -1632,23 +1632,20 @@ end
section
-variable [SemilatticeInf α] [Nonempty α] {s : Set α}
+variable [Preorder α] [IsDirected α (· ≥ ·)] [Nonempty α] {s : Set α}
/-- A finite set is bounded below.-/
protected theorem Finite.bddBelow (hs : s.Finite) : BddBelow s :=
- @Finite.bddAbove αᵒᵈ _ _ _ hs
+ @Finite.bddAbove αᵒᵈ _ _ _ _ hs
#align set.finite.bdd_below Set.Finite.bddBelow
/-- A finite union of sets which are all bounded below is still bounded below.-/
theorem Finite.bddBelow_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddBelow (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddBelow (S i) :=
- @Finite.bddAbove_biUnion αᵒᵈ _ _ _ _ _ H
+ @Finite.bddAbove_biUnion αᵒᵈ _ _ _ _ _ _ H
#align set.finite.bdd_below_bUnion Set.Finite.bddBelow_biUnion
-theorem infinite_of_not_bddBelow : ¬BddBelow s → s.Infinite := by
- contrapose!
- rw [not_infinite]
- exact Finite.bddBelow
+theorem infinite_of_not_bddBelow : ¬BddBelow s → s.Infinite := mt Finite.bddBelow
#align set.infinite_of_not_bdd_below Set.infinite_of_not_bddBelow
end
@@ -1595,7 +1595,7 @@ theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α)
is finite rather than `s` itself. -/
theorem Finite.exists_maximal_wrt' [PartialOrder β] (f : α → β) (s : Set α) (h : (f '' s).Finite)
(hs : s.Nonempty) : (∃ a ∈ s, ∀ (a' : α), a' ∈ s → f a ≤ f a' → f a = f a') := by
- obtain ⟨_, ⟨a, ha,rfl⟩, hmax⟩ := Finite.exists_maximal_wrt id (f '' s) h (hs.image f)
+ obtain ⟨_, ⟨a, ha, rfl⟩, hmax⟩ := Finite.exists_maximal_wrt id (f '' s) h (hs.image f)
exact ⟨a, ha, fun a' ha' hf ↦ hmax _ (mem_image_of_mem f ha') hf⟩
theorem Finite.exists_minimal_wrt [PartialOrder β] (f : α → β) (s : Set α) (h : s.Finite)
@@ -71,7 +71,7 @@ theorem finite_def {s : Set α} : s.Finite ↔ Nonempty (Fintype s) :=
⟨fun ⟨h⟩ => ⟨h⟩, fun ⟨h⟩ => ⟨h⟩⟩
#align set.finite_def Set.finite_def
-alias finite_def ↔ Finite.nonempty_fintype _
+alias ⟨Finite.nonempty_fintype, _⟩ := finite_def
#align set.finite.nonempty_fintype Set.Finite.nonempty_fintype
theorem finite_coe_iff {s : Set α} : Finite s ↔ s.Finite := by
@@ -148,7 +148,7 @@ theorem not_infinite {s : Set α} : ¬s.Infinite ↔ s.Finite :=
not_not
#align set.not_infinite Set.not_infinite
-alias not_infinite ↔ _ Finite.not_infinite
+alias ⟨_, Finite.not_infinite⟩ := not_infinite
#align set.finite.not_infinite Set.Finite.not_infinite
attribute [simp] Finite.not_infinite
@@ -224,10 +224,10 @@ protected theorem toFinset_ssubset_toFinset : hs.toFinset ⊂ ht.toFinset ↔ s
simp only [← Finset.coe_ssubset, Finite.coe_toFinset]
#align set.finite.to_finset_ssubset_to_finset Set.Finite.toFinset_ssubset_toFinset
-alias Finite.toFinset_subset_toFinset ↔ _ toFinset_mono
+alias ⟨_, toFinset_mono⟩ := Finite.toFinset_subset_toFinset
#align set.finite.to_finset_mono Set.Finite.toFinset_mono
-alias Finite.toFinset_ssubset_toFinset ↔ _ toFinset_strictMono
+alias ⟨_, toFinset_strictMono⟩ := Finite.toFinset_ssubset_toFinset
#align set.finite.to_finset_strict_mono Set.Finite.toFinset_strictMono
-- Porting note: attribute [protected] doesn't work
@@ -727,7 +727,7 @@ theorem finite_univ_iff : (@univ α).Finite ↔ Finite α :=
finite_coe_iff.symm.trans (Equiv.Set.univ α).finite_iff
#align set.finite_univ_iff Set.finite_univ_iff
-alias finite_univ_iff ↔ _root_.Finite.of_finite_univ _
+alias ⟨_root_.Finite.of_finite_univ, _⟩ := finite_univ_iff
#align finite.of_finite_univ Finite.of_finite_univ
theorem Finite.union {s t : Set α} (hs : s.Finite) (ht : t.Finite) : (s ∪ t).Finite := by
@@ -1289,7 +1289,7 @@ theorem infinite_coe_iff {s : Set α} : Infinite s ↔ s.Infinite :=
#align set.infinite_coe_iff Set.infinite_coe_iff
-- porting note: something weird happened here
-alias infinite_coe_iff ↔ _ Infinite.to_subtype
+alias ⟨_, Infinite.to_subtype⟩ := infinite_coe_iff
#align set.infinite.to_subtype Set.Infinite.to_subtype
/-- Embedding of `ℕ` into an infinite set. -/
@@ -1332,7 +1332,7 @@ theorem infinite_image_iff {s : Set α} {f : α → β} (hi : InjOn f s) :
not_congr <| finite_image_iff hi
#align set.infinite_image_iff Set.infinite_image_iff
-alias infinite_image_iff ↔ _ Infinite.image
+alias ⟨_, Infinite.image⟩ := infinite_image_iff
#align set.infinite.image Set.Infinite.image
-- Porting note: attribute [protected] doesn't work
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -389,13 +389,13 @@ instance fintypesUnion [DecidableEq α] {s : Set (Set α)} [Fintype s]
/-- A union of sets with `Fintype` structure over a set with `Fintype` structure has a `Fintype`
structure. -/
-def fintypeBiUnion [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
+def fintypeBiUnion [DecidableEq α] {ι : Type*} (s : Set ι) [Fintype s] (t : ι → Set α)
(H : ∀ i ∈ s, Fintype (t i)) : Fintype (⋃ x ∈ s, t x) :=
haveI : ∀ i : toFinset s, Fintype (t i) := fun i => H i (mem_toFinset.1 i.2)
Fintype.ofFinset (s.toFinset.attach.biUnion fun x => (t x).toFinset) fun x => by simp
#align set.fintype_bUnion Set.fintypeBiUnion
-instance fintypeBiUnion' [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
+instance fintypeBiUnion' [DecidableEq α] {ι : Type*} (s : Set ι) [Fintype s] (t : ι → Set α)
[∀ i, Fintype (t i)] : Fintype (⋃ x ∈ s, t x) :=
Fintype.ofFinset (s.toFinset.biUnion fun x => (t x).toFinset) <| by simp
#align set.fintype_bUnion' Set.fintypeBiUnion'
@@ -643,14 +643,14 @@ instance finite_sUnion {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t :
exact @Finite.Set.finite_iUnion _ _ _ _ H
#align finite.set.finite_sUnion Finite.Set.finite_sUnion
-theorem finite_biUnion {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
+theorem finite_biUnion {ι : Type*} (s : Set ι) [Finite s] (t : ι → Set α)
(H : ∀ i ∈ s, Finite (t i)) : Finite (⋃ x ∈ s, t x) := by
rw [biUnion_eq_iUnion]
haveI : ∀ i : s, Finite (t i) := fun i => H i i.property
infer_instance
#align finite.set.finite_bUnion Finite.Set.finite_biUnion
-instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α) [∀ i, Finite (t i)] :
+instance finite_biUnion' {ι : Type*} (s : Set ι) [Finite s] (t : ι → Set α) [∀ i, Finite (t i)] :
Finite (⋃ x ∈ s, t x) :=
finite_biUnion s t fun _ _ => inferInstance
#align finite.set.finite_bUnion' Finite.Set.finite_biUnion'
@@ -658,12 +658,12 @@ instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set
/-- Example: `Finite (⋃ (i < n), f i)` where `f : ℕ → Set α` and `[∀ i, Finite (f i)]`
(when given instances from `Data.Nat.Interval`).
-/
-instance finite_biUnion'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
+instance finite_biUnion'' {ι : Type*} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
[∀ i, Finite (t i)] : Finite (⋃ (x) (_ : p x), t x) :=
@Finite.Set.finite_biUnion' _ _ (setOf p) h t _
#align finite.set.finite_bUnion'' Finite.Set.finite_biUnion''
-instance finite_iInter {ι : Sort _} [Nonempty ι] (t : ι → Set α) [∀ i, Finite (t i)] :
+instance finite_iInter {ι : Sort*} [Nonempty ι] (t : ι → Set α) [∀ i, Finite (t i)] :
Finite (⋂ i, t i) :=
Finite.Set.subset (t <| Classical.arbitrary ι) (iInter_subset _ _)
#align finite.set.finite_Inter Finite.Set.finite_iInter
@@ -811,14 +811,14 @@ theorem Finite.biUnion' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set
apply finite_iUnion fun i : s => ht i.1 i.2
#align set.finite.bUnion' Set.Finite.biUnion'
-theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
+theorem Finite.sInter {α : Type*} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
(⋂₀ s).Finite :=
hf.subset (sInter_subset_of_mem ht)
#align set.finite.sInter Set.Finite.sInter
/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
union `⋃ i, s i` is a finite set. -/
-theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Finite)
+theorem Finite.iUnion {ι : Type*} {s : ι → Set α} {t : Set ι} (ht : t.Finite)
(hs : ∀ i ∈ t, (s i).Finite) (he : ∀ i, i ∉ t → s i = ∅) : (⋃ i, s i).Finite := by
suffices ⋃ i, s i ⊆ ⋃ i ∈ t, s i by exact (ht.biUnion hs).subset this
refine' iUnion_subset fun i x hx => _
@@ -1011,7 +1011,7 @@ theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : { b |
#align set.finite.finite_subsets Set.Finite.finite_subsets
/-- Finite product of finite sets is finite -/
-theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set (κ d)}
+theorem Finite.pi {δ : Type*} [Finite δ] {κ : δ → Type*} {t : ∀ d, Set (κ d)}
(ht : ∀ d, (t d).Finite) : (pi univ t).Finite := by
cases _root_.nonempty_fintype δ
lift t to ∀ d, Finset (κ d) using ht
@@ -1110,7 +1110,7 @@ theorem finite_image_fst_and_snd_iff {s : Set (α × β)} :
fun h => ⟨h.image _, h.image _⟩⟩
#align set.finite_image_fst_and_snd_iff Set.finite_image_fst_and_snd_iff
-theorem forall_finite_image_eval_iff {δ : Type _} [Finite δ] {κ : δ → Type _} {s : Set (∀ d, κ d)} :
+theorem forall_finite_image_eval_iff {δ : Type*} [Finite δ] {κ : δ → Type*} {s : Set (∀ d, κ d)} :
(∀ d, (eval d '' s).Finite) ↔ s.Finite :=
⟨fun h => (Finite.pi h).subset <| subset_pi_eval_image _ _, fun h _ => h.image _⟩
#align set.forall_finite_image_eval_iff Set.forall_finite_image_eval_iff
@@ -1181,7 +1181,7 @@ so `u n` is related to the image of `{0, 1, ..., n-1}` under `u`.
(We use this later to show sequentially compact sets are totally bounded.)
-/
-theorem seq_of_forall_finite_exists {γ : Type _} {P : γ → Set γ → Prop}
+theorem seq_of_forall_finite_exists {γ : Type*} {P : γ → Set γ → Prop}
(h : ∀ t : Set γ, t.Finite → ∃ c, P c t) : ∃ u : ℕ → γ, ∀ n, P (u n) (u '' Iio n) := by
haveI : Nonempty γ := (h ∅ finite_empty).nonempty
choose! c hc using h
@@ -1423,11 +1423,11 @@ theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinit
end Preorder
-theorem finite_isTop (α : Type _) [PartialOrder α] : { x : α | IsTop x }.Finite :=
+theorem finite_isTop (α : Type*) [PartialOrder α] : { x : α | IsTop x }.Finite :=
(subsingleton_isTop α).finite
#align set.finite_is_top Set.finite_isTop
-theorem finite_isBot (α : Type _) [PartialOrder α] : { x : α | IsBot x }.Finite :=
+theorem finite_isBot (α : Type*) [PartialOrder α] : { x : α | IsBot x }.Finite :=
(subsingleton_isBot α).finite
#align set.finite_is_bot Set.finite_isBot
@@ -1471,7 +1471,7 @@ theorem exists_upper_bound_image [Nonempty α] [LinearOrder β] (s : Set α) (f
exists_lower_bound_image (β := βᵒᵈ) s f h
#align set.exists_upper_bound_image Set.exists_upper_bound_image
-theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type*} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : ⨆ j, ⨅ i ∈ s, f i j = ⨅ i ∈ s, ⨆ j, f i j := by
induction' s, hs using Set.Finite.dinduction_on with a s _ _ ihs hf
@@ -1481,77 +1481,77 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
-theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type*} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : ⨆ j, ⨅ i ∈ s, f i j = ⨅ i ∈ s, ⨆ j, f i j :=
@Finite.iSup_biInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitone
-theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type*} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : ⨅ j, ⨆ i ∈ s, f i j = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_antitone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotone
-theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type*} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : ⨅ j, ⨆ i ∈ s, f i j = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitone
-theorem iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iSup_iInf_of_monotone {ι ι' α : Type*} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
⨆ j, ⨅ i, f i j = ⨅ i, ⨆ j, f i j := by
simpa only [iInf_univ] using finite_univ.iSup_biInf_of_monotone fun i _ => hf i
#align supr_infi_of_monotone Set.iSup_iInf_of_monotone
-theorem iSup_iInf_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iSup_iInf_of_antitone {ι ι' α : Type*} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
⨆ j, ⨅ i, f i j = ⨅ i, ⨆ j, f i j :=
@iSup_iInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
#align supr_infi_of_antitone Set.iSup_iInf_of_antitone
-theorem iInf_iSup_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iInf_iSup_of_monotone {ι ι' α : Type*} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
⨅ j, ⨆ i, f i j = ⨆ i, ⨅ j, f i j :=
iSup_iInf_of_antitone (α := αᵒᵈ) fun i => (hf i).dual_right
#align infi_supr_of_monotone Set.iInf_iSup_of_monotone
-theorem iInf_iSup_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iInf_iSup_of_antitone {ι ι' α : Type*} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
⨅ j, ⨆ i, f i j = ⨆ i, ⨅ j, f i j :=
iSup_iInf_of_monotone (α := αᵒᵈ) fun i => (hf i).dual_right
#align infi_supr_of_antitone Set.iInf_iSup_of_antitone
/-- An increasing union distributes over finite intersection. -/
-theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
+theorem iUnion_iInter_of_monotone {ι ι' α : Type*} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
⋃ j : ι', ⋂ i : ι, s i j = ⋂ i : ι, ⋃ j : ι', s i j :=
iSup_iInf_of_monotone hs
#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotone
/-- A decreasing union distributes over finite intersection. -/
-theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
+theorem iUnion_iInter_of_antitone {ι ι' α : Type*} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
⋃ j : ι', ⋂ i : ι, s i j = ⋂ i : ι, ⋃ j : ι', s i j :=
iSup_iInf_of_antitone hs
#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitone
/-- An increasing intersection distributes over finite union. -/
-theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
+theorem iInter_iUnion_of_monotone {ι ι' α : Type*} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
⋂ j : ι', ⋃ i : ι, s i j = ⋃ i : ι, ⋂ j : ι', s i j :=
iInf_iSup_of_monotone hs
#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotone
/-- A decreasing intersection distributes over finite union. -/
-theorem iInter_iUnion_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
+theorem iInter_iUnion_of_antitone {ι ι' α : Type*} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
⋂ j : ι', ⋃ i : ι, s i j = ⋃ i : ι, ⋂ j : ι', s i j :=
iInf_iSup_of_antitone hs
#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitone
-theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
+theorem iUnion_pi_of_monotone {ι ι' : Type*} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type*}
{I : Set ι} {s : ∀ i, ι' → Set (α i)} (hI : I.Finite) (hs : ∀ i ∈ I, Monotone (s i)) :
⋃ j : ι', I.pi (fun i => s i j) = I.pi fun i => ⋃ j, s i j := by
simp only [pi_def, biInter_eq_iInter, preimage_iUnion]
@@ -1560,8 +1560,8 @@ theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι']
exact preimage_mono <| hs i i.2 h
#align set.Union_pi_of_monotone Set.iUnion_pi_of_monotone
-theorem iUnion_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
- {α : ι → Type _} {s : ∀ i, ι' → Set (α i)} (hs : ∀ i, Monotone (s i)) :
+theorem iUnion_univ_pi_of_monotone {ι ι' : Type*} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
+ {α : ι → Type*} {s : ∀ i, ι' → Set (α i)} (hs : ∀ i, Monotone (s i)) :
⋃ j : ι', pi univ (fun i => s i j) = pi univ fun i => ⋃ j, s i j :=
iUnion_pi_of_monotone finite_univ fun i _ => hs i
#align set.Union_univ_pi_of_monotone Set.iUnion_univ_pi_of_monotone
This PR slightly tidies the proof of Set.Finite.exists_maximal_wrt
, and adds a minimality version.
It also adds primed versions of both that alter the finiteness hypothesis to a weaker hypothesis where only the image is finite.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -1571,26 +1571,43 @@ theorem finite_range_findGreatest {P : α → ℕ → Prop} [∀ x, DecidablePre
(finite_le_nat b).subset <| range_subset_iff.2 fun _ => Nat.findGreatest_le _
#align set.finite_range_find_greatest Set.finite_range_findGreatest
-theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α) (h : Set.Finite s) :
- s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a' := by
- refine' h.induction_on _ _
- · exact fun h => absurd h not_nonempty_empty
- intro a s his _ ih _
- cases' s.eq_empty_or_nonempty with h h
- · use a
- simp [h]
- rcases ih h with ⟨b, hb, ih⟩
- by_cases h : f b ≤ f a
- · refine' ⟨a, Set.mem_insert _ _, fun c hc hac => le_antisymm hac _⟩
- rcases Set.mem_insert_iff.1 hc with (rfl | hcs)
- · rfl
- · rwa [← ih c hcs (le_trans h hac)]
- · refine' ⟨b, Set.mem_insert_of_mem _ hb, fun c hc hbc => _⟩
- rcases Set.mem_insert_iff.1 hc with (rfl | hcs)
- · exact (h hbc).elim
- · exact ih c hcs hbc
+theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α) (h : s.Finite)
+ (hs : s.Nonempty) : ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a' := by
+ induction s, h using Set.Finite.dinduction_on with
+ | H0 => exact absurd hs not_nonempty_empty
+ | @H1 a s his _ ih =>
+ cases' s.eq_empty_or_nonempty with h h
+ · use a
+ simp [h]
+ rcases ih h with ⟨b, hb, ih⟩
+ by_cases h : f b ≤ f a
+ · refine' ⟨a, Set.mem_insert _ _, fun c hc hac => le_antisymm hac _⟩
+ rcases Set.mem_insert_iff.1 hc with (rfl | hcs)
+ · rfl
+ · rwa [← ih c hcs (le_trans h hac)]
+ · refine' ⟨b, Set.mem_insert_of_mem _ hb, fun c hc hbc => _⟩
+ rcases Set.mem_insert_iff.1 hc with (rfl | hcs)
+ · exact (h hbc).elim
+ · exact ih c hcs hbc
#align set.finite.exists_maximal_wrt Set.Finite.exists_maximal_wrt
+/-- A version of `Finite.exists_maximal_wrt` with the (weaker) hypothesis that the image of `s`
+ is finite rather than `s` itself. -/
+theorem Finite.exists_maximal_wrt' [PartialOrder β] (f : α → β) (s : Set α) (h : (f '' s).Finite)
+ (hs : s.Nonempty) : (∃ a ∈ s, ∀ (a' : α), a' ∈ s → f a ≤ f a' → f a = f a') := by
+ obtain ⟨_, ⟨a, ha,rfl⟩, hmax⟩ := Finite.exists_maximal_wrt id (f '' s) h (hs.image f)
+ exact ⟨a, ha, fun a' ha' hf ↦ hmax _ (mem_image_of_mem f ha') hf⟩
+
+theorem Finite.exists_minimal_wrt [PartialOrder β] (f : α → β) (s : Set α) (h : s.Finite)
+ (hs : s.Nonempty) : ∃ a ∈ s, ∀ a' ∈ s, f a' ≤ f a → f a = f a' :=
+ Finite.exists_maximal_wrt (β := βᵒᵈ) f s h hs
+
+/-- A version of `Finite.exists_minimal_wrt` with the (weaker) hypothesis that the image of `s`
+ is finite rather than `s` itself. -/
+lemma Finite.exists_minimal_wrt' [PartialOrder β] (f : α → β) (s : Set α) (h : (f '' s).Finite)
+ (hs : s.Nonempty) : (∃ a ∈ s, ∀ (a' : α), a' ∈ s → f a' ≤ f a → f a = f a') :=
+ Set.Finite.exists_maximal_wrt' (β := βᵒᵈ) f s h hs
+
section
variable [SemilatticeSup α] [Nonempty α] {s : Set α}
Set
defeq abuse, golf (#6114)
{x | p x}
instead of fun x ↦ p x
to define a set here and there.Con.ker_apply_eq_preimage
with Con.ker_apply
. The old version used to abuse definitional equality between Set M
and M → Prop
.Submonoid.mk*
lemmas to use ⟨_, _⟩
, not ⟨⟨_, _⟩, _⟩
.@@ -1263,12 +1263,8 @@ theorem card_range_of_injective [Fintype α] {f : α → β} (hf : Injective f)
#align set.card_range_of_injective Set.card_range_of_injective
theorem Finite.card_toFinset {s : Set α} [Fintype s] (h : s.Finite) :
- h.toFinset.card = Fintype.card s := by
- rw [← Finset.card_attach, Finset.attach_eq_univ, ← Fintype.card]
- refine' Fintype.card_congr (Equiv.setCongr _)
- ext x
- show x ∈ h.toFinset ↔ x ∈ s
- simp
+ h.toFinset.card = Fintype.card s :=
+ Eq.symm <| Fintype.card_of_finset' _ fun _ ↦ h.mem_toFinset
#align set.finite.card_to_finset Set.Finite.card_toFinset
theorem card_ne_eq [Fintype α] (a : α) [Fintype { x : α | x ≠ a }] :
protected
to *.insert
theorems (#6142)
Otherwise code like
theorem ContMDiffWithinAt.mythm (h : x ∈ insert y s) : _ = _
interprets insert
as ContMDiffWithinAt.insert
, not Insert.insert
.
@@ -854,8 +854,7 @@ theorem finite_pure (a : α) : (pure a : Set α).Finite :=
#align set.finite_pure Set.finite_pure
@[simp]
-protected -- Porting note: added
-theorem Finite.insert (a : α) {s : Set α} (hs : s.Finite) : (insert a s).Finite := by
+protected theorem Finite.insert (a : α) {s : Set α} (hs : s.Finite) : (insert a s).Finite := by
cases hs
apply toFinite
#align set.finite.insert Set.Finite.insert
@@ -20,7 +20,7 @@ about finite sets and gives ways to manipulate `Set.Finite` expressions.
* `Set.Finite : Set α → Prop`
* `Set.Infinite : Set α → Prop`
-* `Set.to_finite` to prove `Set.Finite` for a `Set` from a `Finite` instance.
+* `Set.toFinite` to prove `Set.Finite` for a `Set` from a `Finite` instance.
* `Set.Finite.toFinset` to noncomputably produce a `Finset` from a `Set.Finite` proof.
(See `Set.toFinset` for a computable version.)
@@ -2,16 +2,13 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
-
-! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 7fdd4f3746cb059edfdb5d52cba98f66fce418c0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Finset.Basic
import Mathlib.Data.Set.Functor
import Mathlib.Data.Finite.Basic
+#align_import data.set.finite from "leanprover-community/mathlib"@"7fdd4f3746cb059edfdb5d52cba98f66fce418c0"
+
/-!
# Finite sets
@@ -1504,7 +1504,7 @@ theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : ⨅ j, ⨆ i ∈ s, f i j = ⨆ i ∈ s, ⨅ j, f i j :=
- hs.iSup_biInf_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
+ hs.iSup_biInf_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitone
theorem iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -1221,7 +1221,7 @@ theorem card_fintypeInsertOfNotMem {a : α} (s : Set α) [Fintype s] (h : a ∉
@[simp]
theorem card_insert {a : α} (s : Set α) [Fintype s] (h : a ∉ s)
{d : Fintype.{u} (insert a s : Set α)} : @Fintype.card _ d = Fintype.card s + 1 := by
- rw [← card_fintypeInsertOfNotMem s h] ; congr; exact Subsingleton.elim _ _
+ rw [← card_fintypeInsertOfNotMem s h]; congr; exact Subsingleton.elim _ _
#align set.card_insert Set.card_insert
theorem card_image_of_inj_on {s : Set α} [Fintype s] {f : α → β} [Fintype (f '' s)]
@@ -823,7 +823,7 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
union `⋃ i, s i` is a finite set. -/
theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Finite)
(hs : ∀ i ∈ t, (s i).Finite) (he : ∀ i, i ∉ t → s i = ∅) : (⋃ i, s i).Finite := by
- suffices (⋃ i, s i) ⊆ ⋃ i ∈ t, s i by exact (ht.biUnion hs).subset this
+ suffices ⋃ i, s i ⊆ ⋃ i ∈ t, s i by exact (ht.biUnion hs).subset this
refine' iUnion_subset fun i x hx => _
by_cases hi : i ∈ t
· exact mem_biUnion hi hx
@@ -1481,7 +1481,7 @@ theorem exists_upper_bound_image [Nonempty α] [LinearOrder β] (s : Set α) (f
theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
- (hf : ∀ i ∈ s, Monotone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j := by
+ (hf : ∀ i ∈ s, Monotone (f i)) : ⨆ j, ⨅ i ∈ s, f i j = ⨅ i ∈ s, ⨆ j, f i j := by
induction' s, hs using Set.Finite.dinduction_on with a s _ _ ihs hf
· simp [iSup_const]
· rw [ball_insert_iff] at hf
@@ -1491,77 +1491,77 @@ theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonem
theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
- (hf : ∀ i ∈ s, Antitone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
+ (hf : ∀ i ∈ s, Antitone (f i)) : ⨆ j, ⨅ i ∈ s, f i j = ⨅ i ∈ s, ⨆ j, f i j :=
@Finite.iSup_biInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitone
theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
- (hf : ∀ i ∈ s, Monotone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
+ (hf : ∀ i ∈ s, Monotone (f i)) : ⨅ j, ⨆ i ∈ s, f i j = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_antitone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotone
theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
- (hf : ∀ i ∈ s, Antitone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
+ (hf : ∀ i ∈ s, Antitone (f i)) : ⨅ j, ⨆ i ∈ s, f i j = ⨆ i ∈ s, ⨅ j, f i j :=
hs.iSup_biInf_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitone
theorem iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
- (⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j := by
+ ⨆ j, ⨅ i, f i j = ⨅ i, ⨆ j, f i j := by
simpa only [iInf_univ] using finite_univ.iSup_biInf_of_monotone fun i _ => hf i
#align supr_infi_of_monotone Set.iSup_iInf_of_monotone
theorem iSup_iInf_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
- (⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j :=
+ ⨆ j, ⨅ i, f i j = ⨅ i, ⨆ j, f i j :=
@iSup_iInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
#align supr_infi_of_antitone Set.iSup_iInf_of_antitone
theorem iInf_iSup_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
- (⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
+ ⨅ j, ⨆ i, f i j = ⨆ i, ⨅ j, f i j :=
iSup_iInf_of_antitone (α := αᵒᵈ) fun i => (hf i).dual_right
#align infi_supr_of_monotone Set.iInf_iSup_of_monotone
theorem iInf_iSup_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
- (⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
+ ⨅ j, ⨆ i, f i j = ⨆ i, ⨅ j, f i j :=
iSup_iInf_of_monotone (α := αᵒᵈ) fun i => (hf i).dual_right
#align infi_supr_of_antitone Set.iInf_iSup_of_antitone
/-- An increasing union distributes over finite intersection. -/
theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
- (⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
+ ⋃ j : ι', ⋂ i : ι, s i j = ⋂ i : ι, ⋃ j : ι', s i j :=
iSup_iInf_of_monotone hs
#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotone
/-- A decreasing union distributes over finite intersection. -/
theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
- (⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
+ ⋃ j : ι', ⋂ i : ι, s i j = ⋂ i : ι, ⋃ j : ι', s i j :=
iSup_iInf_of_antitone hs
#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitone
/-- An increasing intersection distributes over finite union. -/
theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
- (⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
+ ⋂ j : ι', ⋃ i : ι, s i j = ⋃ i : ι, ⋂ j : ι', s i j :=
iInf_iSup_of_monotone hs
#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotone
/-- A decreasing intersection distributes over finite union. -/
theorem iInter_iUnion_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
- (⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
+ ⋂ j : ι', ⋃ i : ι, s i j = ⋃ i : ι, ⋂ j : ι', s i j :=
iInf_iSup_of_antitone hs
#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitone
theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
{I : Set ι} {s : ∀ i, ι' → Set (α i)} (hI : I.Finite) (hs : ∀ i ∈ I, Monotone (s i)) :
- (⋃ j : ι', I.pi fun i => s i j) = I.pi fun i => ⋃ j, s i j := by
+ ⋃ j : ι', I.pi (fun i => s i j) = I.pi fun i => ⋃ j, s i j := by
simp only [pi_def, biInter_eq_iInter, preimage_iUnion]
haveI := hI.fintype.finite
refine' iUnion_iInter_of_monotone (ι' := ι') (fun (i : I) j₁ j₂ h => _)
@@ -1570,7 +1570,7 @@ theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι']
theorem iUnion_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
{α : ι → Type _} {s : ∀ i, ι' → Set (α i)} (hs : ∀ i, Monotone (s i)) :
- (⋃ j : ι', pi univ fun i => s i j) = pi univ fun i => ⋃ j, s i j :=
+ ⋃ j : ι', pi univ (fun i => s i j) = pi univ fun i => ⋃ j, s i j :=
iUnion_pi_of_monotone finite_univ fun i _ => hs i
#align set.Union_univ_pi_of_monotone Set.iUnion_univ_pi_of_monotone
Fix the set tactic to not time out when dealing with slow to elaborate terms and many local hypotheses.
The root cause of this is that the rewrite [blah] at *
tactic causes blah to be elaborated again and again for each local hypothesis, this is possibly a core issue that should be fixed separately, but in set
we have the elaborated term already so we can just use it.
We also add some functionality to simply test / demonstrate failures when elaboration takes too long, namely sleepAtLeastHeartbeats
and a sleep_heartbeats
tactic.
@urkud was facing some slow running set's in https://github.com/leanprover-community/mathlib4/pull/4912, see https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Timeout.20in.20.60set.20.2E.2E.20with.60/near/367958828 that this issue was minimized from and should fix.
Some other linter failures show up due to changes to the set internals so fix these too.
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -1419,7 +1419,7 @@ variable [Preorder α] [Nonempty α] {s : Set α}
theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinite := by
inhabit α
- set f : ℕ → α := fun n => Nat.recOn n (h default).choose fun n a => (h a).choose
+ set f : ℕ → α := fun n => Nat.recOn n (h default).choose fun _ a => (h a).choose
have hf : ∀ n, f n ∈ s := by rintro (_ | _) <;> exact (h _).choose_spec.1
exact infinite_of_injective_forall_mem
(strictMono_nat_of_lt_succ fun n => (h _).choose_spec.2).injective hf
Currently, (for both Set
and Finset
) insert_subset
is an iff
lemma stating that insert a s ⊆ t
if and only if a ∈ t
and s ⊆ t
. For both types, this PR renames this lemma to insert_subset_iff
, and adds an insert_subset
lemma that gives the implication just in the reverse direction : namely theorem insert_subset (ha : a ∈ t) (hs : s ⊆ t) : insert a s ⊆ t
.
This both aligns the naming with union_subset
and union_subset_iff
, and removes the need for the awkward insert_subset.mpr ⟨_,_⟩
idiom. It touches a lot of files (too many to list), but in a trivial way.
@@ -1162,7 +1162,7 @@ theorem Finite.induction_on' {C : Set α → Prop} {S : Set α} (h : S.Finite) (
(H1 : ∀ {a s}, a ∈ S → s ⊆ S → a ∉ s → C s → C (insert a s)) : C S := by
refine' @Set.Finite.induction_on α (fun s => s ⊆ S → C s) S h (fun _ => H0) _ Subset.rfl
intro a s has _ hCs haS
- rw [insert_subset] at haS
+ rw [insert_subset_iff] at haS
exact H1 haS.1 haS.2 has (hCs haS.2)
#align set.finite.induction_on' Set.Finite.induction_on'
cleanupAnnotations
to push_neg (#5082)
Expr
s now have an mdata
field. It seems that this gets in the way of push_neg
, as reported on Zulip.
The above seems to fix the reported errors.
Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@@ -1408,9 +1408,7 @@ theorem not_injOn_infinite_finite_image {f : α → β} {s : Set α} (h_inf : s.
have h := not_injective_infinite_finite
((f '' s).codRestrict (s.restrict f) fun x => ⟨x, x.property, rfl⟩)
contrapose! h
- --porting note: why do we have `contrapose!` if the `push_neg` behaviour doesn't work?
- rw [injective_codRestrict, ← injOn_iff_injective]
- rwa [not_not] at h
+ rwa [injective_codRestrict, ← injOn_iff_injective]
#align set.not_inj_on_infinite_finite_image Set.not_injOn_infinite_finite_image
/-! ### Order properties -/
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 5bb9fffd23f9f65b367f5d451da18cc60bf47335
+! leanprover-community/mathlib commit 7fdd4f3746cb059edfdb5d52cba98f66fce418c0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -112,6 +112,19 @@ protected noncomputable def Finite.toFinset {s : Set α} (h : s.Finite) : Finset
@Set.toFinset _ _ h.fintype
#align set.finite.to_finset Set.Finite.toFinset
+theorem Finite.toFinset_eq_toFinset {s : Set α} [Fintype s] (h : s.Finite) :
+ h.toFinset = s.toFinset := by
+ -- porting note: was `rw [Finite.toFinset]; congr`
+ -- in Lean 4, a goal is left after `congr`
+ have : h.fintype = ‹_› := Subsingleton.elim _ _
+ rw [Finite.toFinset, this]
+#align set.finite.to_finset_eq_to_finset Set.Finite.toFinset_eq_toFinset
+
+@[simp]
+theorem toFinite_toFinset (s : Set α) [Fintype s] : s.toFinite.toFinset = s.toFinset :=
+ s.toFinite.toFinset_eq_toFinset
+#align set.to_finite_to_finset Set.toFinite_toFinset
+
theorem Finite.exists_finset {s : Set α} (h : s.Finite) :
∃ s' : Finset α, ∀ a : α, a ∈ s' ↔ a ∈ s := by
cases h
@@ -223,11 +236,14 @@ alias Finite.toFinset_ssubset_toFinset ↔ _ toFinset_strictMono
-- Porting note: attribute [protected] doesn't work
-- attribute [protected] toFinset_mono toFinset_strictMono
-@[simp]
+-- porting note: `simp` can simplify LHS but then it simplifies something
+-- in the generated `Fintype {x | p x}` instance and fails to apply `Set.toFinset_setOf`
+@[simp high]
protected theorem toFinset_setOf [Fintype α] (p : α → Prop) [DecidablePred p]
(h : { x | p x }.Finite) : h.toFinset = Finset.univ.filter p := by
ext
- simp
+ -- porting note: `simp` doesn't use the `simp` lemma `Set.toFinset_setOf` without the `_`
+ simp [Set.toFinset_setOf _]
#align set.finite.to_finset_set_of Set.Finite.toFinset_setOf
@[simp]
@@ -266,10 +282,9 @@ protected theorem toFinset_compl [DecidableEq α] [Fintype α] (hs : s.Finite) (
simp
#align set.finite.to_finset_compl Set.Finite.toFinset_compl
-@[simp]
-protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅ := by
- ext
- simp
+-- porting note: was `@[simp]`, now `simp` can prove it
+protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅ :=
+ toFinite_toFinset _
#align set.finite.to_finset_empty Set.Finite.toFinset_empty
protected theorem toFinset_univ [Fintype α] (h : (Set.univ : Set α).Finite) :
@@ -294,7 +309,8 @@ protected theorem toFinset_image [DecidableEq β] (f : α → β) (hs : s.Finite
simp
#align set.finite.to_finset_image Set.Finite.toFinset_image
-@[simp]
+-- porting note: now `simp` can prove it but it needs the `fintypeRange` instance from the next
+-- section
protected theorem toFinset_range [DecidableEq α] [Fintype β] (f : β → α) (h : (range f).Finite) :
h.toFinset = Finset.univ.image f := by
ext
@@ -306,8 +322,7 @@ end Finite
/-! ### Fintype instances
Every instance here should have a corresponding `Set.Finite` constructor in the next section.
- -/
-
+-/
section FintypeInstances
@@ -534,10 +549,9 @@ theorem finite_toSet (s : Finset α) : (s : Set α).Finite :=
Set.toFinite _
#align finset.finite_to_set Finset.finite_toSet
-@[simp]
+-- porting note: was @[simp], now `simp` can prove it
theorem finite_toSet_toFinset (s : Finset α) : s.finite_toSet.toFinset = s := by
- ext
- rw [Set.Finite.mem_toFinset, mem_coe]
+ rw [toFinite_toFinset, toFinset_coe]
#align finset.finite_to_set_to_finset Finset.finite_toSet_toFinset
end Finset
@@ -1049,10 +1063,10 @@ theorem univ_finite_iff_nonempty_fintype : (univ : Set α).Finite ↔ Nonempty (
⟨fun h => ⟨fintypeOfFiniteUniv h⟩, fun ⟨_i⟩ => finite_univ⟩
#align set.univ_finite_iff_nonempty_fintype Set.univ_finite_iff_nonempty_fintype
-@[simp]
+-- porting note: moved `@[simp]` to `Set.toFinset_singleton` because `simp` can now simplify LHS
theorem Finite.toFinset_singleton {a : α} (ha : ({a} : Set α).Finite := finite_singleton _) :
ha.toFinset = {a} :=
- Finset.ext <| by simp
+ Set.toFinite_toFinset _
#align set.finite.to_finset_singleton Set.Finite.toFinset_singleton
@[simp]
@@ -859,7 +859,7 @@ theorem finite_range (f : ι → α) [Finite ι] : (range f).Finite :=
#align set.finite_range Set.finite_range
theorem Finite.dependent_image {s : Set α} (hs : s.Finite) (F : ∀ i ∈ s, β) :
- { y : β | ∃ (x : _)(hx : x ∈ s), y = F x hx }.Finite := by
+ { y : β | ∃ (x : _) (hx : x ∈ s), y = F x hx }.Finite := by
cases hs
simpa [range, eq_comm] using finite_range fun x : s => F x x.2
#align set.finite.dependent_image Set.Finite.dependent_image
@@ -1083,7 +1083,7 @@ theorem Finite.fin_embedding {s : Set α} (h : s.Finite) :
#align set.finite.fin_embedding Set.Finite.fin_embedding
theorem Finite.fin_param {s : Set α} (h : s.Finite) :
- ∃ (n : ℕ)(f : Fin n → α), Injective f ∧ range f = s :=
+ ∃ (n : ℕ) (f : Fin n → α), Injective f ∧ range f = s :=
let ⟨n, f, hf⟩ := h.fin_embedding
⟨n, f, f.injective, hf⟩
#align set.finite.fin_param Set.Finite.fin_param
@@ -648,7 +648,7 @@ instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set
(when given instances from `Data.Nat.Interval`).
-/
instance finite_biUnion'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
- [∀ i, Finite (t i)] : Finite (⋃ (x) (_h : p x), t x) :=
+ [∀ i, Finite (t i)] : Finite (⋃ (x) (_ : p x), t x) :=
@Finite.Set.finite_biUnion' _ _ (setOf p) h t _
#align finite.set.finite_bUnion'' Finite.Set.finite_biUnion''
Set.Finite.biUnion
(#4469)
forward-port leanprover-community/mathlib#19098
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 52fa514ec337dd970d71d8de8d0fd68b455a1e54
+! leanprover-community/mathlib commit 5bb9fffd23f9f65b367f5d451da18cc60bf47335
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -519,8 +519,11 @@ end FintypeInstances
end Set
-/-! ### Finset -/
+theorem Equiv.set_finite_iff {s : Set α} {t : Set β} (hst : s ≃ t) : s.Finite ↔ t.Finite := by
+ simp_rw [← Set.finite_coe_iff, hst.finite_iff]
+#align equiv.set_finite_iff Equiv.set_finite_iff
+/-! ### Finset -/
namespace Finset
@@ -802,6 +805,18 @@ theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈
hf.subset (sInter_subset_of_mem ht)
#align set.finite.sInter Set.Finite.sInter
+/-- If sets `s i` are finite for all `i` from a finite set `t` and are empty for `i ∉ t`, then the
+union `⋃ i, s i` is a finite set. -/
+theorem Finite.iUnion {ι : Type _} {s : ι → Set α} {t : Set ι} (ht : t.Finite)
+ (hs : ∀ i ∈ t, (s i).Finite) (he : ∀ i, i ∉ t → s i = ∅) : (⋃ i, s i).Finite := by
+ suffices (⋃ i, s i) ⊆ ⋃ i ∈ t, s i by exact (ht.biUnion hs).subset this
+ refine' iUnion_subset fun i x hx => _
+ by_cases hi : i ∈ t
+ · exact mem_biUnion hi hx
+ · rw [he i hi, mem_empty_iff_false] at hx
+ contradiction
+#align set.finite.Union Set.Finite.iUnion
+
theorem Finite.bind {α β} {s : Set α} {f : α → Set β} (h : s.Finite) (hf : ∀ a ∈ s, (f a).Finite) :
(s >>= f).Finite :=
h.biUnion hf
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>
@@ -486,7 +486,7 @@ def Nat.fintypeIio (n : ℕ) : Fintype (Iio n) :=
instance fintypeProd (s : Set α) (t : Set β) [Fintype s] [Fintype t] :
Fintype (s ×ˢ t : Set (α × β)) :=
- Fintype.ofFinset (s.toFinset ×ᶠ t.toFinset) <| by simp
+ Fintype.ofFinset (s.toFinset ×ˢ t.toFinset) <| by simp
#align set.fintype_prod Set.fintypeProd
instance fintypeOffDiag [DecidableEq α] (s : Set α) [Fintype s] : Fintype s.offDiag :=
@@ -1052,7 +1052,7 @@ theorem Finite.toFinset_insert' [DecidableEq α] {a : α} {s : Set α} (hs : s.F
#align set.finite.to_finset_insert' Set.Finite.toFinset_insert'
theorem Finite.toFinset_prod {s : Set α} {t : Set β} (hs : s.Finite) (ht : t.Finite) :
- hs.toFinset ×ᶠ ht.toFinset = (hs.prod ht).toFinset :=
+ hs.toFinset ×ˢ ht.toFinset = (hs.prod ht).toFinset :=
Finset.ext <| by simp
#align set.finite.to_finset_prod Set.Finite.toFinset_prod
fix-comments.py
on all files.@@ -21,8 +21,8 @@ about finite sets and gives ways to manipulate `Set.Finite` expressions.
## Main definitions
-* `Set.Finite : set α → Prop`
-* `Set.Infinite : set α → Prop`
+* `Set.Finite : Set α → Prop`
+* `Set.Infinite : Set α → Prop`
* `Set.to_finite` to prove `Set.Finite` for a `Set` from a `Finite` instance.
* `Set.Finite.toFinset` to noncomputably produce a `Finset` from a `Set.Finite` proof.
(See `Set.toFinset` for a computable version.)
@@ -143,7 +143,7 @@ alias not_infinite ↔ _ Finite.not_infinite
attribute [simp] Finite.not_infinite
-/-- See also `finite_or_infinite`, `fintype_or_infinite`. -/
+/-- See also `finite_or_infinite`, `fintypeOrInfinite`. -/
protected theorem finite_or_infinite (s : Set α) : s.Finite ∨ s.Infinite :=
em _
#align set.finite_or_infinite Set.finite_or_infinite
@@ -641,7 +641,7 @@ instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set
finite_biUnion s t fun _ _ => inferInstance
#align finite.set.finite_bUnion' Finite.Set.finite_biUnion'
-/-- Example: `Finite (⋃ (i < n), f i)` where `f : ℕ → set α` and `[∀ i, Finite (f i)]`
+/-- Example: `Finite (⋃ (i < n), f i)` where `f : ℕ → Set α` and `[∀ i, Finite (f i)]`
(when given instances from `Data.Nat.Interval`).
-/
instance finite_biUnion'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
@@ -688,7 +688,7 @@ end Finite.Set
namespace Set
-/-! ### Constructors for `set.finite`
+/-! ### Constructors for `Set.Finite`
Every constructor here should have a corresponding `Fintype` instance in the previous section
(or in the `Fintype` module).
@@ -1151,7 +1151,7 @@ section
attribute [local instance] Nat.fintypeIio
/-- If `P` is some relation between terms of `γ` and sets in `γ`, such that every finite set
-`t : set γ` has some `c : γ` related to it, then there is a recursively defined sequence `u` in `γ`
+`t : Set γ` has some `c : γ` related to it, then there is a recursively defined sequence `u` in `γ`
so `u n` is related to the image of `{0, 1, ..., n-1}` under `u`.
(We use this later to show sequentially compact sets are totally bounded.)
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>
@@ -364,40 +364,40 @@ instance fintypeDiffLeft (s t : Set α) [Fintype s] [DecidablePred (· ∈ t)] :
Set.fintypeSep s (· ∈ tᶜ)
#align set.fintype_diff_left Set.fintypeDiffLeft
-instance fintypeUnionᵢ [DecidableEq α] [Fintype (PLift ι)] (f : ι → Set α) [∀ i, Fintype (f i)] :
+instance fintypeiUnion [DecidableEq α] [Fintype (PLift ι)] (f : ι → Set α) [∀ i, Fintype (f i)] :
Fintype (⋃ i, f i) :=
- Fintype.ofFinset (Finset.univ.bunionᵢ fun i : PLift ι => (f i.down).toFinset) <| by simp
-#align set.fintype_Union Set.fintypeUnionᵢ
+ Fintype.ofFinset (Finset.univ.biUnion fun i : PLift ι => (f i.down).toFinset) <| by simp
+#align set.fintype_Union Set.fintypeiUnion
-instance fintypeUnionₛ [DecidableEq α] {s : Set (Set α)} [Fintype s]
+instance fintypesUnion [DecidableEq α] {s : Set (Set α)} [Fintype s]
[H : ∀ t : s, Fintype (t : Set α)] : Fintype (⋃₀ s) := by
- rw [unionₛ_eq_unionᵢ]
- exact @Set.fintypeUnionᵢ _ _ _ _ _ H
-#align set.fintype_sUnion Set.fintypeUnionₛ
+ rw [sUnion_eq_iUnion]
+ exact @Set.fintypeiUnion _ _ _ _ _ H
+#align set.fintype_sUnion Set.fintypesUnion
/-- A union of sets with `Fintype` structure over a set with `Fintype` structure has a `Fintype`
structure. -/
-def fintypeBUnionᵢ [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
+def fintypeBiUnion [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
(H : ∀ i ∈ s, Fintype (t i)) : Fintype (⋃ x ∈ s, t x) :=
haveI : ∀ i : toFinset s, Fintype (t i) := fun i => H i (mem_toFinset.1 i.2)
- Fintype.ofFinset (s.toFinset.attach.bunionᵢ fun x => (t x).toFinset) fun x => by simp
-#align set.fintype_bUnion Set.fintypeBUnionᵢ
+ Fintype.ofFinset (s.toFinset.attach.biUnion fun x => (t x).toFinset) fun x => by simp
+#align set.fintype_bUnion Set.fintypeBiUnion
-instance fintypeBUnionᵢ' [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
+instance fintypeBiUnion' [DecidableEq α] {ι : Type _} (s : Set ι) [Fintype s] (t : ι → Set α)
[∀ i, Fintype (t i)] : Fintype (⋃ x ∈ s, t x) :=
- Fintype.ofFinset (s.toFinset.bunionᵢ fun x => (t x).toFinset) <| by simp
-#align set.fintype_bUnion' Set.fintypeBUnionᵢ'
+ Fintype.ofFinset (s.toFinset.biUnion fun x => (t x).toFinset) <| by simp
+#align set.fintype_bUnion' Set.fintypeBiUnion'
/-- If `s : Set α` is a set with `Fintype` instance and `f : α → Set β` is a function such that
each `f a`, `a ∈ s`, has a `Fintype` structure, then `s >>= f` has a `Fintype` structure. -/
def fintypeBind {α β} [DecidableEq β] (s : Set α) [Fintype s] (f : α → Set β)
(H : ∀ a ∈ s, Fintype (f a)) : Fintype (s >>= f) :=
- Set.fintypeBUnionᵢ s f H
+ Set.fintypeBiUnion s f H
#align set.fintype_bind Set.fintypeBind
instance fintypeBind' {α β} [DecidableEq β] (s : Set α) [Fintype s] (f : α → Set β)
[∀ a, Fintype (f a)] : Fintype (s >>= f) :=
- Set.fintypeBUnionᵢ' s f
+ Set.fintypeBiUnion' s f
#align set.fintype_bind' Set.fintypeBind'
instance fintypeEmpty : Fintype (∅ : Set α) :=
@@ -503,7 +503,7 @@ instance fintypeImage2 [DecidableEq γ] (f : α → β → γ) (s : Set α) (t :
instance fintypeSeq [DecidableEq β] (f : Set (α → β)) (s : Set α) [Fintype f] [Fintype s] :
Fintype (f.seq s) := by
rw [seq_def]
- apply Set.fintypeBUnionᵢ'
+ apply Set.fintypeBiUnion'
#align set.fintype_seq Set.fintypeSeq
instance fintypeSeq' {α β : Type u} [DecidableEq β] (f : Set (α → β)) (s : Set α) [Fintype f]
@@ -618,41 +618,41 @@ instance finite_range (f : ι → α) [Finite ι] : Finite (range f) := by
infer_instance
#align finite.set.finite_range Finite.Set.finite_range
-instance finite_unionᵢ [Finite ι] (f : ι → Set α) [∀ i, Finite (f i)] : Finite (⋃ i, f i) := by
- rw [unionᵢ_eq_range_psigma]
+instance finite_iUnion [Finite ι] (f : ι → Set α) [∀ i, Finite (f i)] : Finite (⋃ i, f i) := by
+ rw [iUnion_eq_range_psigma]
apply Set.finite_range
-#align finite.set.finite_Union Finite.Set.finite_unionᵢ
+#align finite.set.finite_Union Finite.Set.finite_iUnion
-instance finite_unionₛ {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t : Set α)] :
+instance finite_sUnion {s : Set (Set α)} [Finite s] [H : ∀ t : s, Finite (t : Set α)] :
Finite (⋃₀ s) := by
- rw [unionₛ_eq_unionᵢ]
- exact @Finite.Set.finite_unionᵢ _ _ _ _ H
-#align finite.set.finite_sUnion Finite.Set.finite_unionₛ
+ rw [sUnion_eq_iUnion]
+ exact @Finite.Set.finite_iUnion _ _ _ _ H
+#align finite.set.finite_sUnion Finite.Set.finite_sUnion
-theorem finite_bunionᵢ {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
+theorem finite_biUnion {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α)
(H : ∀ i ∈ s, Finite (t i)) : Finite (⋃ x ∈ s, t x) := by
- rw [bunionᵢ_eq_unionᵢ]
+ rw [biUnion_eq_iUnion]
haveI : ∀ i : s, Finite (t i) := fun i => H i i.property
infer_instance
-#align finite.set.finite_bUnion Finite.Set.finite_bunionᵢ
+#align finite.set.finite_bUnion Finite.Set.finite_biUnion
-instance finite_bunionᵢ' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α) [∀ i, Finite (t i)] :
+instance finite_biUnion' {ι : Type _} (s : Set ι) [Finite s] (t : ι → Set α) [∀ i, Finite (t i)] :
Finite (⋃ x ∈ s, t x) :=
- finite_bunionᵢ s t fun _ _ => inferInstance
-#align finite.set.finite_bUnion' Finite.Set.finite_bunionᵢ'
+ finite_biUnion s t fun _ _ => inferInstance
+#align finite.set.finite_bUnion' Finite.Set.finite_biUnion'
/-- Example: `Finite (⋃ (i < n), f i)` where `f : ℕ → set α` and `[∀ i, Finite (f i)]`
(when given instances from `Data.Nat.Interval`).
-/
-instance finite_bunionᵢ'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
+instance finite_biUnion'' {ι : Type _} (p : ι → Prop) [h : Finite { x | p x }] (t : ι → Set α)
[∀ i, Finite (t i)] : Finite (⋃ (x) (_h : p x), t x) :=
- @Finite.Set.finite_bunionᵢ' _ _ (setOf p) h t _
-#align finite.set.finite_bUnion'' Finite.Set.finite_bunionᵢ''
+ @Finite.Set.finite_biUnion' _ _ (setOf p) h t _
+#align finite.set.finite_bUnion'' Finite.Set.finite_biUnion''
-instance finite_interᵢ {ι : Sort _} [Nonempty ι] (t : ι → Set α) [∀ i, Finite (t i)] :
+instance finite_iInter {ι : Sort _} [Nonempty ι] (t : ι → Set α) [∀ i, Finite (t i)] :
Finite (⋂ i, t i) :=
- Finite.Set.subset (t <| Classical.arbitrary ι) (interᵢ_subset _ _)
-#align finite.set.finite_Inter Finite.Set.finite_interᵢ
+ Finite.Set.subset (t <| Classical.arbitrary ι) (iInter_subset _ _)
+#align finite.set.finite_Inter Finite.Set.finite_iInter
instance finite_insert (a : α) (s : Set α) [Finite s] : Finite (insert a s : Set α) :=
Finite.Set.finite_union {a} s
@@ -769,42 +769,42 @@ theorem Finite.of_diff {s t : Set α} (hd : (s \ t).Finite) (ht : t.Finite) : s.
(hd.union ht).subset <| subset_diff_union _ _
#align set.finite.of_diff Set.Finite.of_diff
-theorem finite_unionᵢ [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite := by
+theorem finite_iUnion [Finite ι] {f : ι → Set α} (H : ∀ i, (f i).Finite) : (⋃ i, f i).Finite := by
haveI := fun i => (H i).fintype
apply toFinite
-#align set.finite_Union Set.finite_unionᵢ
+#align set.finite_Union Set.finite_iUnion
-theorem Finite.unionₛ {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.Finite t) :
+theorem Finite.sUnion {s : Set (Set α)} (hs : s.Finite) (H : ∀ t ∈ s, Set.Finite t) :
(⋃₀ s).Finite := by
cases hs
haveI := fun i : s => (H i i.2).to_subtype
apply toFinite
-#align set.finite.sUnion Set.Finite.unionₛ
+#align set.finite.sUnion Set.Finite.sUnion
-theorem Finite.bunionᵢ {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
+theorem Finite.biUnion {ι} {s : Set ι} (hs : s.Finite) {t : ι → Set α}
(ht : ∀ i ∈ s, (t i).Finite) : (⋃ i ∈ s, t i).Finite := by
classical
cases hs
- haveI := fintypeBUnionᵢ s t fun i hi => (ht i hi).fintype
+ haveI := fintypeBiUnion s t fun i hi => (ht i hi).fintype
apply toFinite
-#align set.finite.bUnion Set.Finite.bunionᵢ
+#align set.finite.bUnion Set.Finite.biUnion
-/-- Dependent version of `Finite.bunionᵢ`. -/
-theorem Finite.bunionᵢ' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
+/-- Dependent version of `Finite.biUnion`. -/
+theorem Finite.biUnion' {ι} {s : Set ι} (hs : s.Finite) {t : ∀ i ∈ s, Set α}
(ht : ∀ i (hi : i ∈ s), (t i hi).Finite) : (⋃ i ∈ s, t i ‹_›).Finite := by
cases hs
- rw [bunionᵢ_eq_unionᵢ]
- apply finite_unionᵢ fun i : s => ht i.1 i.2
-#align set.finite.bUnion' Set.Finite.bunionᵢ'
+ rw [biUnion_eq_iUnion]
+ apply finite_iUnion fun i : s => ht i.1 i.2
+#align set.finite.bUnion' Set.Finite.biUnion'
-theorem Finite.interₛ {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
+theorem Finite.sInter {α : Type _} {s : Set (Set α)} {t : Set α} (ht : t ∈ s) (hf : t.Finite) :
(⋂₀ s).Finite :=
- hf.subset (interₛ_subset_of_mem ht)
-#align set.finite.sInter Set.Finite.interₛ
+ hf.subset (sInter_subset_of_mem ht)
+#align set.finite.sInter Set.Finite.sInter
theorem Finite.bind {α β} {s : Set α} {f : α → Set β} (h : s.Finite) (hf : ∀ a ∈ s, (f a).Finite) :
(s >>= f).Finite :=
- h.bunionᵢ hf
+ h.biUnion hf
#align set.finite.bind Set.Finite.bind
@[simp]
@@ -998,8 +998,8 @@ theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set
/-- A finite union of finsets is finite. -/
theorem union_finset_finite_of_range_finite (f : α → Finset β) (h : (range f).Finite) :
(⋃ a, (f a : Set β)).Finite := by
- rw [← bunionᵢ_range]
- exact h.bunionᵢ fun y _ => y.finite_toSet
+ rw [← biUnion_range]
+ exact h.biUnion fun y _ => y.finite_toSet
#align set.union_finset_finite_of_range_finite Set.union_finset_finite_of_range_finite
theorem finite_range_ite {p : α → Prop} [DecidablePred p] {f g : α → β} (hf : (range f).Finite)
@@ -1090,32 +1090,32 @@ theorem forall_finite_image_eval_iff {δ : Type _} [Finite δ] {κ : δ → Type
⟨fun h => (Finite.pi h).subset <| subset_pi_eval_image _ _, fun h _ => h.image _⟩
#align set.forall_finite_image_eval_iff Set.forall_finite_image_eval_iff
-theorem finite_subset_unionᵢ {s : Set α} (hs : s.Finite) {ι} {t : ι → Set α} (h : s ⊆ ⋃ i, t i) :
+theorem finite_subset_iUnion {s : Set α} (hs : s.Finite) {ι} {t : ι → Set α} (h : s ⊆ ⋃ i, t i) :
∃ I : Set ι, I.Finite ∧ s ⊆ ⋃ i ∈ I, t i := by
cases hs
choose f hf using show ∀ x : s, ∃ i, x.1 ∈ t i by simpa [subset_def] using h
refine' ⟨range f, finite_range f, fun x hx => _⟩
- rw [bunionᵢ_range, mem_unionᵢ]
+ rw [biUnion_range, mem_iUnion]
exact ⟨⟨x, hx⟩, hf _⟩
-#align set.finite_subset_Union Set.finite_subset_unionᵢ
+#align set.finite_subset_Union Set.finite_subset_iUnion
-theorem eq_finite_unionᵢ_of_finite_subset_unionᵢ {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
+theorem eq_finite_iUnion_of_finite_subset_iUnion {ι} {s : ι → Set α} {t : Set α} (tfin : t.Finite)
(h : t ⊆ ⋃ i, s i) :
∃ I : Set ι,
I.Finite ∧
∃ σ : { i | i ∈ I } → Set α, (∀ i, (σ i).Finite) ∧ (∀ i, σ i ⊆ s i) ∧ t = ⋃ i, σ i :=
- let ⟨I, Ifin, hI⟩ := finite_subset_unionᵢ tfin h
+ let ⟨I, Ifin, hI⟩ := finite_subset_iUnion tfin h
⟨I, Ifin, fun x => s x ∩ t, fun i => tfin.subset (inter_subset_right _ _), fun i =>
inter_subset_left _ _, by
ext x
- rw [mem_unionᵢ]
+ rw [mem_iUnion]
constructor
· intro x_in
- rcases mem_unionᵢ.mp (hI x_in) with ⟨i, _, ⟨hi, rfl⟩, H⟩
+ rcases mem_iUnion.mp (hI x_in) with ⟨i, _, ⟨hi, rfl⟩, H⟩
refine' ⟨⟨i, hi⟩, ⟨H, x_in⟩⟩
· rintro ⟨i, -, H⟩
exact H⟩
-#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_unionᵢ_of_finite_subset_unionᵢ
+#align set.eq_finite_Union_of_finite_subset_Union Set.eq_finite_iUnion_of_finite_subset_iUnion
@[elab_as_elim]
theorem Finite.induction_on {C : Set α → Prop} {s : Set α} (h : s.Finite) (H0 : C ∅)
@@ -1452,100 +1452,100 @@ theorem exists_upper_bound_image [Nonempty α] [LinearOrder β] (s : Set α) (f
exists_lower_bound_image (β := βᵒᵈ) s f h
#align set.exists_upper_bound_image Set.exists_upper_bound_image
-theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iSup_biInf_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j := by
induction' s, hs using Set.Finite.dinduction_on with a s _ _ ihs hf
- · simp [supᵢ_const]
+ · simp [iSup_const]
· rw [ball_insert_iff] at hf
- simp only [infᵢ_insert, ← ihs hf.2]
- exact supᵢ_inf_of_monotone hf.1 fun j₁ j₂ hj => infᵢ₂_mono fun i hi => hf.2 i hi hj
-#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotone
+ simp only [iInf_insert, ← ihs hf.2]
+ exact iSup_inf_of_monotone hf.1 fun j₁ j₂ hj => iInf₂_mono fun i hi => hf.2 i hi hj
+#align set.finite.supr_binfi_of_monotone Set.Finite.iSup_biInf_of_monotone
-theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iSup_biInf_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
- @Finite.supᵢ_binfᵢ_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
-#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitone
+ @Finite.iSup_biInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
+#align set.finite.supr_binfi_of_antitone Set.Finite.iSup_biInf_of_antitone
-theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iInf_biSup_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
- hs.supᵢ_binfᵢ_of_antitone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
-#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotone
+ hs.iSup_biInf_of_antitone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
+#align set.finite.infi_bsupr_of_monotone Set.Finite.iInf_biSup_of_monotone
-theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.iInf_biSup_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
- hs.supᵢ_binfᵢ_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
-#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitone
+ hs.iSup_biInf_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
+#align set.finite.infi_bsupr_of_antitone Set.Finite.iInf_biSup_of_antitone
-theorem supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iSup_iInf_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j := by
- simpa only [infᵢ_univ] using finite_univ.supᵢ_binfᵢ_of_monotone fun i _ => hf i
-#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotone
+ simpa only [iInf_univ] using finite_univ.iSup_biInf_of_monotone fun i _ => hf i
+#align supr_infi_of_monotone Set.iSup_iInf_of_monotone
-theorem supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iSup_iInf_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j :=
- @supᵢ_infᵢ_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
-#align supr_infi_of_antitone Set.supᵢ_infᵢ_of_antitone
+ @iSup_iInf_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ _ fun i => (hf i).dual_left
+#align supr_infi_of_antitone Set.iSup_iInf_of_antitone
-theorem infᵢ_supᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iInf_iSup_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
- supᵢ_infᵢ_of_antitone (α := αᵒᵈ) fun i => (hf i).dual_right
-#align infi_supr_of_monotone Set.infᵢ_supᵢ_of_monotone
+ iSup_iInf_of_antitone (α := αᵒᵈ) fun i => (hf i).dual_right
+#align infi_supr_of_monotone Set.iInf_iSup_of_monotone
-theorem infᵢ_supᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
+theorem iInf_iSup_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {f : ι → ι' → α} (hf : ∀ i, Antitone (f i)) :
(⨅ j, ⨆ i, f i j) = ⨆ i, ⨅ j, f i j :=
- supᵢ_infᵢ_of_monotone (α := αᵒᵈ) fun i => (hf i).dual_right
-#align infi_supr_of_antitone Set.infᵢ_supᵢ_of_antitone
+ iSup_iInf_of_monotone (α := αᵒᵈ) fun i => (hf i).dual_right
+#align infi_supr_of_antitone Set.iInf_iSup_of_antitone
/-- An increasing union distributes over finite intersection. -/
-theorem unionᵢ_interᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
+theorem iUnion_iInter_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
(⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
- supᵢ_infᵢ_of_monotone hs
-#align set.Union_Inter_of_monotone Set.unionᵢ_interᵢ_of_monotone
+ iSup_iInf_of_monotone hs
+#align set.Union_Inter_of_monotone Set.iUnion_iInter_of_monotone
/-- A decreasing union distributes over finite intersection. -/
-theorem unionᵢ_interᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
+theorem iUnion_iInter_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
(⋃ j : ι', ⋂ i : ι, s i j) = ⋂ i : ι, ⋃ j : ι', s i j :=
- supᵢ_infᵢ_of_antitone hs
-#align set.Union_Inter_of_antitone Set.unionᵢ_interᵢ_of_antitone
+ iSup_iInf_of_antitone hs
+#align set.Union_Inter_of_antitone Set.iUnion_iInter_of_antitone
/-- An increasing intersection distributes over finite union. -/
-theorem interᵢ_unionᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
+theorem iInter_iUnion_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι']
[IsDirected ι' (swap (· ≤ ·))] [Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Monotone (s i)) :
(⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
- infᵢ_supᵢ_of_monotone hs
-#align set.Inter_Union_of_monotone Set.interᵢ_unionᵢ_of_monotone
+ iInf_iSup_of_monotone hs
+#align set.Inter_Union_of_monotone Set.iInter_iUnion_of_monotone
/-- A decreasing intersection distributes over finite union. -/
-theorem interᵢ_unionᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
+theorem iInter_iUnion_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [IsDirected ι' (· ≤ ·)]
[Nonempty ι'] {s : ι → ι' → Set α} (hs : ∀ i, Antitone (s i)) :
(⋂ j : ι', ⋃ i : ι, s i j) = ⋃ i : ι, ⋂ j : ι', s i j :=
- infᵢ_supᵢ_of_antitone hs
-#align set.Inter_Union_of_antitone Set.interᵢ_unionᵢ_of_antitone
+ iInf_iSup_of_antitone hs
+#align set.Inter_Union_of_antitone Set.iInter_iUnion_of_antitone
-theorem unionᵢ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
+theorem iUnion_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] {α : ι → Type _}
{I : Set ι} {s : ∀ i, ι' → Set (α i)} (hI : I.Finite) (hs : ∀ i ∈ I, Monotone (s i)) :
(⋃ j : ι', I.pi fun i => s i j) = I.pi fun i => ⋃ j, s i j := by
- simp only [pi_def, binterᵢ_eq_interᵢ, preimage_unionᵢ]
+ simp only [pi_def, biInter_eq_iInter, preimage_iUnion]
haveI := hI.fintype.finite
- refine' unionᵢ_interᵢ_of_monotone (ι' := ι') (fun (i : I) j₁ j₂ h => _)
+ refine' iUnion_iInter_of_monotone (ι' := ι') (fun (i : I) j₁ j₂ h => _)
exact preimage_mono <| hs i i.2 h
-#align set.Union_pi_of_monotone Set.unionᵢ_pi_of_monotone
+#align set.Union_pi_of_monotone Set.iUnion_pi_of_monotone
-theorem unionᵢ_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
+theorem iUnion_univ_pi_of_monotone {ι ι' : Type _} [LinearOrder ι'] [Nonempty ι'] [Finite ι]
{α : ι → Type _} {s : ∀ i, ι' → Set (α i)} (hs : ∀ i, Monotone (s i)) :
(⋃ j : ι', pi univ fun i => s i j) = pi univ fun i => ⋃ j, s i j :=
- unionᵢ_pi_of_monotone finite_univ fun i _ => hs i
-#align set.Union_univ_pi_of_monotone Set.unionᵢ_univ_pi_of_monotone
+ iUnion_pi_of_monotone finite_univ fun i _ => hs i
+#align set.Union_univ_pi_of_monotone Set.iUnion_univ_pi_of_monotone
theorem finite_range_findGreatest {P : α → ℕ → Prop} [∀ x, DecidablePred (P x)] {b : ℕ} :
(range fun x => Nat.findGreatest (P x) b).Finite :=
@@ -1582,11 +1582,11 @@ protected theorem Finite.bddAbove (hs : s.Finite) : BddAbove s :=
#align set.finite.bdd_above Set.Finite.bddAbove
/-- A finite union of sets which are all bounded above is still bounded above.-/
-theorem Finite.bddAbove_bunionᵢ {I : Set β} {S : β → Set α} (H : I.Finite) :
+theorem Finite.bddAbove_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddAbove (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddAbove (S i) :=
- Finite.induction_on H (by simp only [bunionᵢ_empty, bddAbove_empty, ball_empty_iff])
- fun _ _ hs => by simp only [bunionᵢ_insert, ball_insert_iff, bddAbove_union, hs]
-#align set.finite.bdd_above_bUnion Set.Finite.bddAbove_bunionᵢ
+ Finite.induction_on H (by simp only [biUnion_empty, bddAbove_empty, ball_empty_iff])
+ fun _ _ hs => by simp only [biUnion_insert, ball_insert_iff, bddAbove_union, hs]
+#align set.finite.bdd_above_bUnion Set.Finite.bddAbove_biUnion
theorem infinite_of_not_bddAbove : ¬BddAbove s → s.Infinite :=
mt Finite.bddAbove
@@ -1604,10 +1604,10 @@ protected theorem Finite.bddBelow (hs : s.Finite) : BddBelow s :=
#align set.finite.bdd_below Set.Finite.bddBelow
/-- A finite union of sets which are all bounded below is still bounded below.-/
-theorem Finite.bddBelow_bunionᵢ {I : Set β} {S : β → Set α} (H : I.Finite) :
+theorem Finite.bddBelow_biUnion {I : Set β} {S : β → Set α} (H : I.Finite) :
BddBelow (⋃ i ∈ I, S i) ↔ ∀ i ∈ I, BddBelow (S i) :=
- @Finite.bddAbove_bunionᵢ αᵒᵈ _ _ _ _ _ H
-#align set.finite.bdd_below_bUnion Set.Finite.bddBelow_bunionᵢ
+ @Finite.bddAbove_biUnion αᵒᵈ _ _ _ _ _ H
+#align set.finite.bdd_below_bUnion Set.Finite.bddBelow_biUnion
theorem infinite_of_not_bddBelow : ¬BddBelow s → s.Infinite := by
contrapose!
@@ -1650,11 +1650,11 @@ lemma Set.finite_of_forall_not_lt_lt (h : ∀ x ∈ s, ∀ y ∈ s, ∀ z ∈ s,
@Set.toFinite _ s <| Finite.of_forall_not_lt_lt $ by simpa only [SetCoe.forall'] using h
#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
-lemma Set.finite_diff_unionᵢ_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
- Set.finite_of_forall_not_lt_lt fun _x hx _y hy _z hz hxy hyz => hy.2 <| mem_unionᵢ₂_of_mem hx.1 <|
- mem_unionᵢ₂_of_mem hz.1 ⟨hxy, hyz⟩
-#align set.finite_diff_Union_Ioo Set.finite_diff_unionᵢ_Ioo
+lemma Set.finite_diff_iUnion_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
+ Set.finite_of_forall_not_lt_lt fun _x hx _y hy _z hz hxy hyz => hy.2 <| mem_iUnion₂_of_mem hx.1 <|
+ mem_iUnion₂_of_mem hz.1 ⟨hxy, hyz⟩
+#align set.finite_diff_Union_Ioo Set.finite_diff_iUnion_Ioo
-lemma Set.finite_diff_unionᵢ_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
- simpa only [unionᵢ, supᵢ_prod, supᵢ_subtype] using s.finite_diff_unionᵢ_Ioo
-#align set.finite_diff_Union_Ioo' Set.finite_diff_unionᵢ_Ioo'
+lemma Set.finite_diff_iUnion_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
+ simpa only [iUnion, iSup_prod, iSup_subtype] using s.finite_diff_iUnion_Ioo
+#align set.finite_diff_Union_Ioo' Set.finite_diff_iUnion_Ioo'
Match https://github.com/leanprover-community/mathlib/pull/18620
data.set.finite
@c941bb9426d62e266612b6d99e6c9fc93e7a1d07
..52fa514ec337dd970d71d8de8d0fd68b455a1e54
data.finset.locally_finite
@f24cc2891c0e328f0ee8c57387103aa462c44b5e
..52fa514ec337dd970d71d8de8d0fd68b455a1e54
data.nat.lattice
@2445c98ae4b87eabebdde552593519b9b6dc350c
..52fa514ec337dd970d71d8de8d0fd68b455a1e54
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
+! leanprover-community/mathlib commit 52fa514ec337dd970d71d8de8d0fd68b455a1e54
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1366,11 +1366,6 @@ theorem infinite_of_injective_forall_mem [Infinite α] {s : Set β} {f : α →
exact (infinite_range_of_injective hi).mono hf
#align set.infinite_of_injective_forall_mem Set.infinite_of_injective_forall_mem
-theorem Infinite.exists_nat_lt {s : Set ℕ} (hs : s.Infinite) (n : ℕ) : ∃ m ∈ s, n < m :=
- let ⟨m, hm⟩ := (hs.diff <| Set.finite_le_nat n).nonempty
- ⟨m, by simpa using hm⟩
-#align set.infinite.exists_nat_lt Set.Infinite.exists_nat_lt
-
theorem Infinite.exists_not_mem_finset {s : Set α} (hs : s.Infinite) (f : Finset α) :
∃ a ∈ s, a ∉ f :=
let ⟨a, has, haf⟩ := (hs.diff (toFinite f)).nonempty
@@ -1391,6 +1386,23 @@ theorem not_injOn_infinite_finite_image {f : α → β} {s : Set α} (h_inf : s.
/-! ### Order properties -/
+section Preorder
+
+variable [Preorder α] [Nonempty α] {s : Set α}
+
+theorem infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.Infinite := by
+ inhabit α
+ set f : ℕ → α := fun n => Nat.recOn n (h default).choose fun n a => (h a).choose
+ have hf : ∀ n, f n ∈ s := by rintro (_ | _) <;> exact (h _).choose_spec.1
+ exact infinite_of_injective_forall_mem
+ (strictMono_nat_of_lt_succ fun n => (h _).choose_spec.2).injective hf
+#align set.infinite_of_forall_exists_gt Set.infinite_of_forall_exists_gt
+
+theorem infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.Infinite :=
+ @infinite_of_forall_exists_gt αᵒᵈ _ _ _ h
+#align set.infinite_of_forall_exists_lt Set.infinite_of_forall_exists_lt
+
+end Preorder
theorem finite_isTop (α : Type _) [PartialOrder α] : { x : α | IsTop x }.Finite :=
(subsingleton_isTop α).finite
This PR fixes two things:
align
statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align
). This is often seen in the mathport output after ending calc
blocks.#align
statements. (This was needed for a script I wrote for #3630.)@@ -1204,7 +1204,6 @@ theorem card_image_of_inj_on {s : Set α} [Fintype s] {f : α → β} [Fintype (
Finset.card_image_of_injOn fun x hx y hy hxy =>
H x (mem_toFinset.1 hx) y (mem_toFinset.1 hy) hxy
_ = Fintype.card s := (Fintype.card_of_finset' _ fun a => mem_toFinset).symm
-
#align set.card_image_of_inj_on Set.card_image_of_inj_on
theorem card_image_of_injective (s : Set α) [Fintype s] {f : α → β} [Fintype (f '' s)]
The changes I made were.
Use FunLike.coe
instead of the previous definition for the coercion from RelEmbedding
To functions and OrderIso
to functions. The previous definition was
instance : CoeFun (r ↪r s) fun _ => α → β :=
-- ⟨fun o => o.toEmbedding⟩
This does not display nicely.
I also restored the simp
attributes on a few lemmas that had their simp
attributes removed during the port. Eventually
we might want a RelEmbeddingLike
class, but this PR does not implement that.
I also added a few lemmas that proved that coercions to function commute with RelEmbedding.toRelHom
or similar.
The other changes are just fixing the build. One strange issue is that the lemma Finset.mapEmbedding_apply
seems to be harder to use, it has to be used with rw
instead of simp
Co-authored-by: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>
@@ -982,7 +982,7 @@ theorem exists_finite_iff_finset {p : Set α → Prop} :
theorem Finite.finite_subsets {α : Type u} {a : Set α} (h : a.Finite) : { b | b ⊆ a }.Finite :=
⟨Fintype.ofFinset ((Finset.powerset h.toFinset).map Finset.coeEmb.1) fun s => by
simpa [← @exists_finite_iff_finset α fun t => t ⊆ a ∧ t = s, Finite.subset_toFinset, ←
- and_assoc] using h.subset⟩
+ and_assoc, Finset.coeEmb] using h.subset⟩
#align set.finite.finite_subsets Set.Finite.finite_subsets
/-- Finite product of finite sets is finite -/
s ×ˢ t
is finite (#3214)
Match https://github.com/leanprover-community/mathlib/pull/18674
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
+! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -138,11 +138,20 @@ theorem not_infinite {s : Set α} : ¬s.Infinite ↔ s.Finite :=
not_not
#align set.not_infinite Set.not_infinite
+alias not_infinite ↔ _ Finite.not_infinite
+#align set.finite.not_infinite Set.Finite.not_infinite
+
+attribute [simp] Finite.not_infinite
+
/-- See also `finite_or_infinite`, `fintype_or_infinite`. -/
protected theorem finite_or_infinite (s : Set α) : s.Finite ∨ s.Infinite :=
em _
#align set.finite_or_infinite Set.finite_or_infinite
+protected theorem infinite_or_finite (s : Set α) : s.Infinite ∨ s.Finite :=
+ em' _
+#align set.infinite_or_finite Set.infinite_or_finite
+
/-! ### Basic properties of `Set.Finite.toFinset` -/
@@ -803,6 +812,12 @@ theorem finite_empty : (∅ : Set α).Finite :=
toFinite _
#align set.finite_empty Set.finite_empty
+protected theorem Infinite.nonempty {s : Set α} (h : s.Infinite) : s.Nonempty :=
+ nonempty_iff_ne_empty.2 $ by
+ rintro rfl
+ exact h finite_empty
+#align set.infinite.nonempty Set.Infinite.nonempty
+
@[simp]
theorem finite_singleton (a : α) : ({a} : Set α).Finite :=
toFinite _
@@ -874,26 +889,62 @@ theorem finite_le_nat (n : ℕ) : Set.Finite { i | i ≤ n } :=
toFinite _
#align set.finite_le_nat Set.finite_le_nat
-theorem Finite.prod {s : Set α} {t : Set β} (hs : s.Finite) (ht : t.Finite) :
- (s ×ˢ t : Set (α × β)).Finite := by
+section Prod
+
+variable {s : Set α} {t : Set β}
+
+protected theorem Finite.prod (hs : s.Finite) (ht : t.Finite) : (s ×ˢ t : Set (α × β)).Finite := by
cases hs
cases ht
apply toFinite
#align set.finite.prod Set.Finite.prod
-theorem Finite.offDiag {s : Set α} (hs : s.Finite) : s.offDiag.Finite := by
+theorem Finite.of_prod_left (h : (s ×ˢ t : Set (α × β)).Finite) : t.Nonempty → s.Finite :=
+ fun ⟨b, hb⟩ => (h.image Prod.fst).subset fun a ha => ⟨(a, b), ⟨ha, hb⟩, rfl⟩
+#align set.finite.of_prod_left Set.Finite.of_prod_left
+
+theorem Finite.of_prod_right (h : (s ×ˢ t : Set (α × β)).Finite) : s.Nonempty → t.Finite :=
+ fun ⟨a, ha⟩ => (h.image Prod.snd).subset fun b hb => ⟨(a, b), ⟨ha, hb⟩, rfl⟩
+#align set.finite.of_prod_right Set.Finite.of_prod_right
+
+protected theorem Infinite.prod_left (hs : s.Infinite) (ht : t.Nonempty) : (s ×ˢ t).Infinite :=
+ fun h => hs <| h.of_prod_left ht
+#align set.infinite.prod_left Set.Infinite.prod_left
+
+protected theorem Infinite.prod_right (ht : t.Infinite) (hs : s.Nonempty) : (s ×ˢ t).Infinite :=
+ fun h => ht <| h.of_prod_right hs
+#align set.infinite.prod_right Set.Infinite.prod_right
+
+protected theorem infinite_prod :
+ (s ×ˢ t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty := by
+ refine' ⟨fun h => _, _⟩
+ · simp_rw [Set.Infinite, @and_comm ¬_, ← not_imp]
+ by_contra'
+ exact h ((this.1 h.nonempty.snd).prod $ this.2 h.nonempty.fst)
+ · rintro (h | h)
+ · exact h.1.prod_left h.2
+ · exact h.1.prod_right h.2
+#align set.infinite_prod Set.infinite_prod
+
+theorem finite_prod : (s ×ˢ t).Finite ↔ (s.Finite ∨ t = ∅) ∧ (t.Finite ∨ s = ∅) := by
+ simp only [← not_infinite, Set.infinite_prod, not_or, not_and_or, not_nonempty_iff_eq_empty]
+#align set.finite_prod Set.finite_prod
+
+protected theorem Finite.offDiag {s : Set α} (hs : s.Finite) : s.offDiag.Finite := by
classical
cases hs
apply Set.toFinite
#align set.finite.off_diag Set.Finite.offDiag
-theorem Finite.image2 (f : α → β → γ) {s : Set α} {t : Set β} (hs : s.Finite) (ht : t.Finite) :
+protected theorem Finite.image2 (f : α → β → γ) (hs : s.Finite) (ht : t.Finite) :
(image2 f s t).Finite := by
cases hs
cases ht
apply toFinite
#align set.finite.image2 Set.Finite.image2
+end Prod
+
theorem Finite.seq {f : Set (α → β)} {s : Set α} (hf : f.Finite) (hs : s.Finite) :
(f.seq s).Finite := by
classical
@@ -1231,11 +1282,6 @@ theorem Infinite.exists_subset_card_eq {s : Set α} (hs : s.Infinite) (n : ℕ)
⟨((Finset.range n).map (hs.natEmbedding _)).map (Embedding.subtype _), by simp⟩
#align set.infinite.exists_subset_card_eq Set.Infinite.exists_subset_card_eq
-theorem Infinite.nonempty {s : Set α} (h : s.Infinite) : s.Nonempty :=
- let a := Infinite.natEmbedding s h 37
- ⟨a.1, a.2⟩
-#align set.infinite.nonempty Set.Infinite.nonempty
-
theorem infinite_of_finite_compl [Infinite α] {s : Set α} (hs : sᶜ.Finite) : s.Infinite := fun h =>
Set.infinite_univ (by simpa using hs.union h)
#align set.infinite_of_finite_compl Set.infinite_of_finite_compl
@@ -1257,15 +1303,47 @@ theorem infinite_union {s t : Set α} : (s ∪ t).Infinite ↔ s.Infinite ∨ t.
simp only [Set.Infinite, finite_union, not_and_or]
#align set.infinite_union Set.infinite_union
-theorem infinite_of_infinite_image (f : α → β) {s : Set α} (hs : (f '' s).Infinite) : s.Infinite :=
+theorem Infinite.of_image (f : α → β) {s : Set α} (hs : (f '' s).Infinite) : s.Infinite :=
mt (Finite.image f) hs
-#align set.infinite_of_infinite_image Set.infinite_of_infinite_image
+#align set.infinite.of_image Set.Infinite.of_image
theorem infinite_image_iff {s : Set α} {f : α → β} (hi : InjOn f s) :
(f '' s).Infinite ↔ s.Infinite :=
not_congr <| finite_image_iff hi
#align set.infinite_image_iff Set.infinite_image_iff
+alias infinite_image_iff ↔ _ Infinite.image
+#align set.infinite.image Set.Infinite.image
+
+-- Porting note: attribute [protected] doesn't work
+-- attribute [protected] infinite.image
+
+section Image2
+
+variable {f : α → β → γ} {s : Set α} {t : Set β} {a : α} {b : β}
+
+protected theorem Infinite.image2_left (hs : s.Infinite) (hb : b ∈ t)
+ (hf : InjOn (fun a => f a b) s) : (image2 f s t).Infinite :=
+ (hs.image hf).mono <| image_subset_image2_left hb
+#align set.infinite.image2_left Set.Infinite.image2_left
+
+protected theorem Infinite.image2_right (ht : t.Infinite) (ha : a ∈ s) (hf : InjOn (f a) t) :
+ (image2 f s t).Infinite :=
+ (ht.image hf).mono <| image_subset_image2_right ha
+#align set.infinite.image2_right Set.Infinite.image2_right
+
+theorem infinite_image2 (hfs : ∀ b ∈ t, InjOn (fun a => f a b) s) (hft : ∀ a ∈ s, InjOn (f a) t) :
+ (image2 f s t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty := by
+ refine' ⟨fun h => Set.infinite_prod.1 _, _⟩
+ · rw [← image_uncurry_prod] at h
+ exact h.of_image _
+ · rintro (⟨hs, b, hb⟩ | ⟨ht, a, ha⟩)
+ · exact hs.image2_left hb (hfs _ hb)
+ · exact ht.image2_right ha (hft _ ha)
+#align set.infinite_image2 Set.infinite_image2
+
+end Image2
+
theorem infinite_of_injOn_mapsTo {s : Set α} {t : Set β} {f : α → β} (hi : InjOn f s)
(hm : MapsTo f s t) (hs : s.Infinite) : t.Infinite :=
((infinite_image_iff hi).2 hs).mono (mapsTo'.mp hm)
s ∩ t * s ∪ t ⊆ s * t
(#1619)
Match https://github.com/leanprover-community/mathlib/pull/17961
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 1f0096e6caa61e9c849ec2adbd227e960e9dff58
+! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -263,7 +263,6 @@ protected theorem toFinset_empty (h : (∅ : Set α).Finite) : h.toFinset = ∅
simp
#align set.finite.to_finset_empty Set.Finite.toFinset_empty
--- Note: Not `simp` because `Set.Finite.toFinset_setOf` already proves it
protected theorem toFinset_univ [Fintype α] (h : (Set.univ : Set α).Finite) :
h.toFinset = Finset.univ := by
simp
@@ -1473,7 +1473,7 @@ theorem Finite.exists_maximal_wrt [PartialOrder β] (f : α → β) (s : Set α)
· use a
simp [h]
rcases ih h with ⟨b, hb, ih⟩
- by_cases f b ≤ f a
+ by_cases h : f b ≤ f a
· refine' ⟨a, Set.mem_insert _ _, fun c hc hac => le_antisymm hac _⟩
rcases Set.mem_insert_iff.1 hc with (rfl | hcs)
· rfl
@@ -195,12 +195,12 @@ theorem ssubset_toFinset {s : Finset α} : s ⊂ ht.toFinset ↔ ↑s ⊂ t := b
rw [← Finset.coe_ssubset, Finite.coe_toFinset]
#align set.finite.ssubset_to_finset Set.Finite.ssubset_toFinset
--- @[mono] -- Porting note: mono attribute not yet available
+@[mono]
protected theorem toFinset_subset_toFinset : hs.toFinset ⊆ ht.toFinset ↔ s ⊆ t := by
simp only [← Finset.coe_subset, Finite.coe_toFinset]
#align set.finite.to_finset_subset_to_finset Set.Finite.toFinset_subset_toFinset
--- @[mono] -- Porting note: mono attribute not yet available
+@[mono]
protected theorem toFinset_ssubset_toFinset : hs.toFinset ⊂ ht.toFinset ↔ s ⊂ t := by
simp only [← Finset.coe_ssubset, Finite.coe_toFinset]
#align set.finite.to_finset_ssubset_to_finset Set.Finite.toFinset_ssubset_toFinset
Also fix some module docstrings.
data.part
@ee0c179cd3c8a45aa5bffbf1b41d8dbede452865
..80c43012d26f63026d362c3aba28f3c3bafb07e6
order.bounds.basic
@aba57d4d3dae35460225919dcd82fe91355162f9
..3310acfa9787aa171db6d4cba3945f6f275fe9f2
data.list.of_fn
@fd838fdf07a83ca89fb66d30bebf6f0e02908c3f
..bf27744463e9620ca4e4ebe951fe83530ae6949b
data.set.finite
@1126441d6bccf98c81214a0780c73d499f6721fe
..1f0096e6caa61e9c849ec2adbd227e960e9dff58
group_theory.group_action.opposite
@fc2ed6f838ce7c9b7c7171e58d78eaf7b438fb0e
..4330aae21f538b862f8aead371cfb6ee556398f1
data.list.basic
@cf9386b56953fb40904843af98b7a80757bbe7f9
..1447cae870f372074e480de1acbeb51de0077698
data.list.infix
@6d0adfa76594f304b4650d098273d4366edeb61b
..26f081a2fb920140ed5bc5cc5344e84bcc7cb2b2
set_theory.lists
@9003f28797c0664a49e4179487267c494477d853
..497d1e06409995dd8ec95301fa8d8f3480187f4c
data.nat.choose.dvd
@207cfac9fcd06138865b5d04f7091e46d9320432
..966e0cf0685c9cedf8a3283ac69eef4d5f2eaca2
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! This file was ported from Lean 3 source module data.set.finite
-! leanprover-community/mathlib commit 1126441d6bccf98c81214a0780c73d499f6721fe
+! leanprover-community/mathlib commit 1f0096e6caa61e9c849ec2adbd227e960e9dff58
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1200,7 +1200,7 @@ theorem Finite.card_toFinset {s : Set α} [Fintype s] (h : s.Finite) :
theorem card_ne_eq [Fintype α] (a : α) [Fintype { x : α | x ≠ a }] :
Fintype.card { x : α | x ≠ a } = Fintype.card α - 1 := by
haveI := Classical.decEq α
- rw [← toFinset_card, to_finset_set_of, Finset.filter_ne',
+ rw [← toFinset_card, toFinset_setOf, Finset.filter_ne',
Finset.card_erase_of_mem (Finset.mem_univ _), Finset.card_univ]
#align set.card_ne_eq Set.card_ne_eq
@@ -181,9 +181,9 @@ theorem toFinset_subset {t : Finset α} : hs.toFinset ⊆ t ↔ s ⊆ t := by
#align set.finite.to_finset_subset Set.Finite.toFinset_subset
@[simp]
-theorem toFinset_sSubset {t : Finset α} : hs.toFinset ⊂ t ↔ s ⊂ t := by
+theorem toFinset_ssubset {t : Finset α} : hs.toFinset ⊂ t ↔ s ⊂ t := by
rw [← Finset.coe_ssubset, Finite.coe_toFinset]
-#align set.finite.to_finset_ssubset Set.Finite.toFinset_sSubset
+#align set.finite.to_finset_ssubset Set.Finite.toFinset_ssubset
@[simp]
theorem subset_toFinset {s : Finset α} : s ⊆ ht.toFinset ↔ ↑s ⊆ t := by
@@ -191,9 +191,9 @@ theorem subset_toFinset {s : Finset α} : s ⊆ ht.toFinset ↔ ↑s ⊆ t := by
#align set.finite.subset_to_finset Set.Finite.subset_toFinset
@[simp]
-theorem sSubset_toFinset {s : Finset α} : s ⊂ ht.toFinset ↔ ↑s ⊂ t := by
+theorem ssubset_toFinset {s : Finset α} : s ⊂ ht.toFinset ↔ ↑s ⊂ t := by
rw [← Finset.coe_ssubset, Finite.coe_toFinset]
-#align set.finite.ssubset_to_finset Set.Finite.sSubset_toFinset
+#align set.finite.ssubset_to_finset Set.Finite.ssubset_toFinset
-- @[mono] -- Porting note: mono attribute not yet available
protected theorem toFinset_subset_toFinset : hs.toFinset ⊆ ht.toFinset ↔ s ⊆ t := by
@@ -428,7 +428,7 @@ is decidable for this particular `a` we can still get a `Fintype` instance by us
`Set.fintypeInsertOfNotMem` or `Set.fintypeInsertOfMem`.
This instance pre-dates `Set.fintypeInsert`, and it is less efficient.
-When `decidable_mem_of_fintype` is made a local instance, then this instance would
+When `Set.decidableMemOfFintype` is made a local instance, then this instance would
override `Set.fintypeInsert` if not for the fact that its priority has been
adjusted. See Note [lower instance priority]. -/
instance (priority := 100) fintypeInsert' (a : α) (s : Set α) [Decidable <| a ∈ s] [Fintype s] :
@@ -462,22 +462,20 @@ instance fintypeMap {α β} [DecidableEq β] :
Set.fintypeImage
#align set.fintype_map Set.fintypeMap
-instance fintypeLtNat (n : ℕ) : Fintype { i | i < n } :=
+instance fintypeLTNat (n : ℕ) : Fintype { i | i < n } :=
Fintype.ofFinset (Finset.range n) <| by simp
-#align set.fintype_lt_nat Set.fintypeLtNat
+#align set.fintype_lt_nat Set.fintypeLTNat
-instance fintypeLeNat (n : ℕ) : Fintype { i | i ≤ n } := by
- simpa [Nat.lt_succ_iff] using Set.fintypeLtNat (n + 1)
-#align set.fintype_le_nat Set.fintypeLeNat
+instance fintypeLENat (n : ℕ) : Fintype { i | i ≤ n } := by
+ simpa [Nat.lt_succ_iff] using Set.fintypeLTNat (n + 1)
+#align set.fintype_le_nat Set.fintypeLENat
/-- This is not an instance so that it does not conflict with the one
-in src/order/locally_finite. -/
+in `Mathlib/Order/LocallyFinite.lean`. -/
def Nat.fintypeIio (n : ℕ) : Fintype (Iio n) :=
- Set.fintypeLtNat n
+ Set.fintypeLTNat n
#align set.nat.fintype_Iio Set.Nat.fintypeIio
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
instance fintypeProd (s : Set α) (t : Set β) [Fintype s] [Fintype t] :
Fintype (s ×ˢ t : Set (α × β)) :=
Fintype.ofFinset (s.toFinset ×ᶠ t.toFinset) <| by simp
@@ -558,7 +556,7 @@ theorem List.finite_toSet (l : List α) : { x | x ∈ l }.Finite :=
There is seemingly some overlap between the following instances and the `Fintype` instances
in `Data.Set.Finite`. While every `Fintype` instance gives a `Finite` instance, those
-instances that depend on `Fintype` or `decidable` instances need an additional `Finite` instance
+instances that depend on `Fintype` or `Decidable` instances need an additional `Finite` instance
to be able to generally apply.
Some set instances do not appear here since they are consequences of others, for example
@@ -1003,7 +1001,6 @@ theorem Finite.toFinset_insert' [DecidableEq α] {a : α} {s : Set α} (hs : s.F
Finite.toFinset_insert _
#align set.finite.to_finset_insert' Set.Finite.toFinset_insert'
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem Finite.toFinset_prod {s : Set α} {t : Set β} (hs : s.Finite) (ht : t.Finite) :
hs.toFinset ×ᶠ ht.toFinset = (hs.prod ht).toFinset :=
Finset.ext <| by simp
@@ -1367,7 +1364,7 @@ theorem exists_upper_bound_image [Nonempty α] [LinearOrder β] (s : Set α) (f
exists_lower_bound_image (β := βᵒᵈ) s f h
#align set.exists_upper_bound_image Set.exists_upper_bound_image
-theorem Finite.supᵢ_binfi_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.supᵢ_binfᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j := by
induction' s, hs using Set.Finite.dinduction_on with a s _ _ ihs hf
@@ -1375,32 +1372,30 @@ theorem Finite.supᵢ_binfi_of_monotone {ι ι' α : Type _} [Preorder ι'] [Non
· rw [ball_insert_iff] at hf
simp only [infᵢ_insert, ← ihs hf.2]
exact supᵢ_inf_of_monotone hf.1 fun j₁ j₂ hj => infᵢ₂_mono fun i hi => hf.2 i hi hj
-#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfi_of_monotone
+#align set.finite.supr_binfi_of_monotone Set.Finite.supᵢ_binfᵢ_of_monotone
--- PORTING NOTE TODO: NAMING IN THIS SECTION I (ERIC R) AM NOT SURE ABOUT
-
-theorem Finite.supᵢ_binfi_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.supᵢ_binfᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Frame α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨆ j, ⨅ i ∈ s, f i j) = ⨅ i ∈ s, ⨆ j, f i j :=
- @Finite.supᵢ_binfi_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
-#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfi_of_antitone
+ @Finite.supᵢ_binfᵢ_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
+#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfᵢ_of_antitone
theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
- hs.supᵢ_binfi_of_antitone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
+ hs.supᵢ_binfᵢ_of_antitone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotone
theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
- hs.supᵢ_binfi_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
+ hs.supᵢ_binfᵢ_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitone
theorem supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
(⨆ j, ⨅ i, f i j) = ⨅ i, ⨆ j, f i j := by
- simpa only [infᵢ_univ] using finite_univ.supᵢ_binfi_of_monotone fun i _ => hf i
+ simpa only [infᵢ_univ] using finite_univ.supᵢ_binfᵢ_of_monotone fun i _ => hf i
#align supr_infi_of_monotone Set.supᵢ_infᵢ_of_monotone
theorem supᵢ_infᵢ_of_antitone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
@@ -1555,12 +1550,10 @@ variable [LinearOrder α] {s : Set α}
/-- If a linear order does not contain any triple of elements `x < y < z`, then this type
is finite. -/
lemma Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z → False) : Finite α := by
- -- porting note: todo: use `nontriviality α` instead of the first 2 lines
- cases subsingleton_or_nontrivial α
- · exact Finite.of_subsingleton
- · rcases exists_pair_ne α with ⟨x, y, hne⟩
- refine' @Finite.of_fintype α ⟨{x, y}, fun z => _⟩
- simpa [hne] using eq_or_eq_or_eq_of_forall_not_lt_lt h z x y
+ nontriviality α
+ rcases exists_pair_ne α with ⟨x, y, hne⟩
+ refine' @Finite.of_fintype α ⟨{x, y}, fun z => _⟩
+ simpa [hne] using eq_or_eq_or_eq_of_forall_not_lt_lt h z x y
#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
Partial forward-port of leanprover-community/mathlib#18245
@@ -8,7 +8,7 @@ Authors: Johannes Hölzl, Mario Carneiro, Kyle Miller
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
-import Mathlib.Data.Finset.Sort
+import Mathlib.Data.Finset.Basic
import Mathlib.Data.Set.Functor
import Mathlib.Data.Finite.Basic
@@ -1550,19 +1550,30 @@ protected theorem bddBelow [SemilatticeInf α] [Nonempty α] (s : Finset α) : B
end Finset
-/-- If a set `s` does not contain any elements between any pair of elements `x, z ∈ s` with `x ≤ z`
-(i.e if given `x, y, z ∈ s` such that `x ≤ y ≤ z`, then `y` is either `x` or `z`), then `s` is
-finite.
--/
-theorem Set.finite_of_forall_between_eq_endpoints {α : Type _} [LinearOrder α] (s : Set α)
- (h : ∀ x ∈ s, ∀ y ∈ s, ∀ z ∈ s, x ≤ y → y ≤ z → x = y ∨ y = z) : Set.Finite s := by
- by_contra hinf
- replace hinf : s.Infinite := hinf
- rcases hinf.exists_subset_card_eq 3 with ⟨t, hts, ht⟩
- let f := t.orderIsoOfFin ht
- let x := f 0
- let y := f 1
- let z := f 2
- have := h x (hts x.2) y (hts y.2) z (hts z.2) (f.monotone <| by decide) (f.monotone <| by decide)
- simp at this
-#align set.finite_of_forall_between_eq_endpoints Set.finite_of_forall_between_eq_endpoints
+variable [LinearOrder α] {s : Set α}
+
+/-- If a linear order does not contain any triple of elements `x < y < z`, then this type
+is finite. -/
+lemma Finite.of_forall_not_lt_lt (h : ∀ ⦃x y z : α⦄, x < y → y < z → False) : Finite α := by
+ -- porting note: todo: use `nontriviality α` instead of the first 2 lines
+ cases subsingleton_or_nontrivial α
+ · exact Finite.of_subsingleton
+ · rcases exists_pair_ne α with ⟨x, y, hne⟩
+ refine' @Finite.of_fintype α ⟨{x, y}, fun z => _⟩
+ simpa [hne] using eq_or_eq_or_eq_of_forall_not_lt_lt h z x y
+#align finite.of_forall_not_lt_lt Finite.of_forall_not_lt_lt
+
+/-- If a set `s` does not contain any triple of elements `x < y < z`, then `s` is finite. -/
+lemma Set.finite_of_forall_not_lt_lt (h : ∀ x ∈ s, ∀ y ∈ s, ∀ z ∈ s, x < y → y < z → False) :
+ Set.Finite s :=
+ @Set.toFinite _ s <| Finite.of_forall_not_lt_lt $ by simpa only [SetCoe.forall'] using h
+#align set.finite_of_forall_not_lt_lt Set.finite_of_forall_not_lt_lt
+
+lemma Set.finite_diff_unionᵢ_Ioo (s : Set α) : (s \ ⋃ (x ∈ s) (y ∈ s), Ioo x y).Finite :=
+ Set.finite_of_forall_not_lt_lt fun _x hx _y hy _z hz hxy hyz => hy.2 <| mem_unionᵢ₂_of_mem hx.1 <|
+ mem_unionᵢ₂_of_mem hz.1 ⟨hxy, hyz⟩
+#align set.finite_diff_Union_Ioo Set.finite_diff_unionᵢ_Ioo
+
+lemma Set.finite_diff_unionᵢ_Ioo' (s : Set α) : (s \ ⋃ x : s × s, Ioo x.1 x.2).Finite := by
+ simpa only [unionᵢ, supᵢ_prod, supᵢ_subtype] using s.finite_diff_unionᵢ_Ioo
+#align set.finite_diff_Union_Ioo' Set.finite_diff_unionᵢ_Ioo'
@@ -1385,17 +1385,17 @@ theorem Finite.supᵢ_binfi_of_antitone {ι ι' α : Type _} [Preorder ι'] [Non
@Finite.supᵢ_binfi_of_monotone ι ι'ᵒᵈ α _ _ _ _ _ hs _ fun i hi => (hf i hi).dual_left
#align set.finite.supr_binfi_of_antitone Set.Finite.supᵢ_binfi_of_antitone
-theorem Finite.infᵢ_bsupr_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.infᵢ_bsupᵢ_of_monotone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (swap (· ≤ ·))] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Monotone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
hs.supᵢ_binfi_of_antitone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
-#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupr_of_monotone
+#align set.finite.infi_bsupr_of_monotone Set.Finite.infᵢ_bsupᵢ_of_monotone
-theorem Finite.infᵢ_bsupr_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
+theorem Finite.infᵢ_bsupᵢ_of_antitone {ι ι' α : Type _} [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Coframe α] {s : Set ι} (hs : s.Finite) {f : ι → ι' → α}
(hf : ∀ i ∈ s, Antitone (f i)) : (⨅ j, ⨆ i ∈ s, f i j) = ⨆ i ∈ s, ⨅ j, f i j :=
hs.supᵢ_binfi_of_monotone (α := αᵒᵈ) fun i hi => (hf i hi).dual_right
-#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupr_of_antitone
+#align set.finite.infi_bsupr_of_antitone Set.Finite.infᵢ_bsupᵢ_of_antitone
theorem supᵢ_infᵢ_of_monotone {ι ι' α : Type _} [Finite ι] [Preorder ι'] [Nonempty ι']
[IsDirected ι' (· ≤ ·)] [Order.Frame α] {f : ι → ι' → α} (hf : ∀ i, Monotone (f i)) :
@@ -1136,7 +1136,7 @@ theorem empty_card' {h : Fintype.{u} (∅ : Set α)} : @Fintype.card (∅ : Set
theorem card_fintypeInsertOfNotMem {a : α} (s : Set α) [Fintype s] (h : a ∉ s) :
@Fintype.card _ (fintypeInsertOfNotMem s h) = Fintype.card s + 1 := by
- rw [fintypeInsertOfNotMem, Fintype.card_of_finset]
+ rw [fintypeInsertOfNotMem, Fintype.card_ofFinset]
simp only [Finset.card, toFinset, Finset.map_val, Embedding.coe_subtype,
Multiset.card_cons, Multiset.card_map, add_left_inj]
rfl
@@ -1167,7 +1167,7 @@ theorem card_image_of_injective (s : Set α) [Fintype s] {f : α → β} [Fintyp
@[simp]
theorem card_singleton (a : α) : Fintype.card ({a} : Set α) = 1 :=
- Fintype.card_of_subsingleton _
+ Fintype.card_ofSubsingleton _
#align set.card_singleton Set.card_singleton
theorem card_lt_card {s t : Set α} [Fintype s] [Fintype t] (h : s ⊂ t) :
@@ -521,38 +521,38 @@ namespace Finset
/-- Gives a `Set.Finite` for the `Finset` coerced to a `Set`.
This is a wrapper around `Set.toFinite`. -/
@[simp]
-theorem finite_to_set (s : Finset α) : (s : Set α).Finite :=
+theorem finite_toSet (s : Finset α) : (s : Set α).Finite :=
Set.toFinite _
-#align finset.finite_to_set Finset.finite_to_set
+#align finset.finite_to_set Finset.finite_toSet
@[simp]
-theorem finite_to_set_toFinset (s : Finset α) : s.finite_to_set.toFinset = s := by
+theorem finite_toSet_toFinset (s : Finset α) : s.finite_toSet.toFinset = s := by
ext
rw [Set.Finite.mem_toFinset, mem_coe]
-#align finset.finite_to_set_to_finset Finset.finite_to_set_toFinset
+#align finset.finite_to_set_to_finset Finset.finite_toSet_toFinset
end Finset
namespace Multiset
@[simp]
-theorem finite_to_set (s : Multiset α) : { x | x ∈ s }.Finite := by
- classical simpa only [← Multiset.mem_toFinset] using s.toFinset.finite_to_set
-#align multiset.finite_to_set Multiset.finite_to_set
+theorem finite_toSet (s : Multiset α) : { x | x ∈ s }.Finite := by
+ classical simpa only [← Multiset.mem_toFinset] using s.toFinset.finite_toSet
+#align multiset.finite_to_set Multiset.finite_toSet
@[simp]
-theorem finite_to_set_toFinset [DecidableEq α] (s : Multiset α) :
- s.finite_to_set.toFinset = s.toFinset := by
+theorem finite_toSet_toFinset [DecidableEq α] (s : Multiset α) :
+ s.finite_toSet.toFinset = s.toFinset := by
ext x
simp
-#align multiset.finite_to_set_to_finset Multiset.finite_to_set_toFinset
+#align multiset.finite_to_set_to_finset Multiset.finite_toSet_toFinset
end Multiset
@[simp]
-theorem List.finite_to_set (l : List α) : { x | x ∈ l }.Finite :=
- (show Multiset α from ⟦l⟧).finite_to_set
-#align list.finite_to_set List.finite_to_set
+theorem List.finite_toSet (l : List α) : { x | x ∈ l }.Finite :=
+ (show Multiset α from ⟦l⟧).finite_toSet
+#align list.finite_to_set List.finite_toSet
/-! ### Finite instances
@@ -927,7 +927,7 @@ theorem finite_preimage_inl_and_inr {s : Set (Sum α β)} :
theorem exists_finite_iff_finset {p : Set α → Prop} :
(∃ s : Set α, s.Finite ∧ p s) ↔ ∃ s : Finset α, p ↑s :=
⟨fun ⟨_, hs, hps⟩ => ⟨hs.toFinset, hs.coe_toFinset.symm ▸ hps⟩, fun ⟨s, hs⟩ =>
- ⟨s, s.finite_to_set, hs⟩⟩
+ ⟨s, s.finite_toSet, hs⟩⟩
#align set.exists_finite_iff_finset Set.exists_finite_iff_finset
/-- There are finitely many subsets of a given finite set -/
@@ -944,14 +944,14 @@ theorem Finite.pi {δ : Type _} [Finite δ] {κ : δ → Type _} {t : ∀ d, Set
lift t to ∀ d, Finset (κ d) using ht
classical
rw [← Fintype.coe_piFinset]
- apply Finset.finite_to_set
+ apply Finset.finite_toSet
#align set.finite.pi Set.Finite.pi
/-- A finite union of finsets is finite. -/
theorem union_finset_finite_of_range_finite (f : α → Finset β) (h : (range f).Finite) :
(⋃ a, (f a : Set β)).Finite := by
rw [← bunionᵢ_range]
- exact h.bunionᵢ fun y _ => y.finite_to_set
+ exact h.bunionᵢ fun y _ => y.finite_toSet
#align set.union_finset_finite_of_range_finite Set.union_finset_finite_of_range_finite
theorem finite_range_ite {p : α → Prop} [DecidablePred p] {f g : α → β} (hf : (range f).Finite)
@@ -1540,12 +1540,12 @@ namespace Finset
/-- A finset is bounded above. -/
protected theorem bddAbove [SemilatticeSup α] [Nonempty α] (s : Finset α) : BddAbove (↑s : Set α) :=
- s.finite_to_set.bddAbove
+ s.finite_toSet.bddAbove
#align finset.bdd_above Finset.bddAbove
/-- A finset is bounded below. -/
protected theorem bddBelow [SemilatticeInf α] [Nonempty α] (s : Finset α) : BddBelow (↑s : Set α) :=
- s.finite_to_set.bddBelow
+ s.finite_toSet.bddBelow
#align finset.bdd_below Finset.bddBelow
end Finset
The unported dependencies are