Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 52fa514

Browse files
dignissimusYaelDillieseric-wieser
committed
feat(data/set/finite): Add lemmas relating definitions of infinite sets (#18620)
Prove the following lemmas (and their dual) * `set.infinite_of_forall_exists_lt`: `(∀ a, ∃ b ∈ s, a < b) → s.infinite` in a nonempty preorder * `set.infinite_iff_exists_lt`: `(∀ a, ∃ b ∈ s, a < b) ↔ s.infinite` in a locally finite order with a bottom element Co-authored-by: Yaël Dillies <yael.dillies@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
1 parent efe03a5 commit 52fa514

5 files changed

Lines changed: 49 additions & 6 deletions

File tree

src/data/finset/locally_finite.lean

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,9 @@ lemma Ioi_subset_Ici_self : Ioi a ⊆ Ici a := by simpa [←coe_subset] using se
259259
lemma _root_.bdd_below.finite {s : set α} (hs : bdd_below s) : s.finite :=
260260
let ⟨a, ha⟩ := hs in (Ici a).finite_to_set.subset $ λ x hx, mem_Ici.2 $ ha hx
261261

262+
lemma _root_.set.infinite.not_bdd_below {s : set α} : s.infinite → ¬ bdd_below s :=
263+
mt bdd_below.finite
264+
262265
variables [fintype α]
263266

264267
lemma filter_lt_eq_Ioi [decidable_pred ((<) a)] : univ.filter ((<) a) = Ioi a := by { ext, simp }
@@ -273,6 +276,9 @@ lemma Iio_subset_Iic_self : Iio a ⊆ Iic a := by simpa [←coe_subset] using se
273276

274277
lemma _root_.bdd_above.finite {s : set α} (hs : bdd_above s) : s.finite := hs.dual.finite
275278

279+
lemma _root_.set.infinite.not_bdd_above {s : set α} : s.infinite → ¬ bdd_above s :=
280+
mt bdd_above.finite
281+
276282
variables [fintype α]
277283

278284
lemma filter_gt_eq_Iio [decidable_pred (< a)] : univ.filter (< a) = Iio a := by { ext, simp }
@@ -504,6 +510,28 @@ end
504510

505511
end locally_finite_order
506512

513+
section locally_finite_order_bot
514+
variables [locally_finite_order_bot α] {s : set α}
515+
516+
lemma _root_.set.infinite.exists_gt (hs : s.infinite) : ∀ a, ∃ b ∈ s, a < b :=
517+
not_bdd_above_iff.1 hs.not_bdd_above
518+
519+
lemma _root_.set.infinite_iff_exists_gt [nonempty α] : s.infinite ↔ ∀ a, ∃ b ∈ s, a < b :=
520+
⟨set.infinite.exists_gt, set.infinite_of_forall_exists_gt⟩
521+
522+
end locally_finite_order_bot
523+
524+
section locally_finite_order_top
525+
variables [locally_finite_order_top α] {s : set α}
526+
527+
lemma _root_.set.infinite.exists_lt (hs : s.infinite) : ∀ a, ∃ b ∈ s, b < a :=
528+
not_bdd_below_iff.1 hs.not_bdd_below
529+
530+
lemma _root_.set.infinite_iff_exists_lt [nonempty α] : s.infinite ↔ ∀ a, ∃ b ∈ s, b < a :=
531+
⟨set.infinite.exists_lt, set.infinite_of_forall_exists_lt⟩
532+
533+
end locally_finite_order_top
534+
507535
variables [fintype α] [locally_finite_order_top α] [locally_finite_order_bot α]
508536

509537
lemma Ioi_disj_union_Iio (a : α) :

src/data/nat/lattice.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2018 Johannes Hölzl. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Johannes Hölzl, Floris van Doorn, Gabriel Ebner, Yury Kudryashov
55
-/
6+
import data.nat.interval
67
import order.conditionally_complete_lattice.finset
78

89
/-!
@@ -37,7 +38,7 @@ lemma Sup_def {s : set ℕ} (h : ∃n, ∀a∈s, a ≤ n) :
3738
dif_pos _
3839

3940
lemma _root_.set.infinite.nat.Sup_eq_zero {s : set ℕ} (h : s.infinite) : Sup s = 0 :=
40-
dif_neg $ λ ⟨n, hn⟩, let ⟨k, hks, hk⟩ := h.exists_nat_lt n in (hn k hks).not_lt hk
41+
dif_neg $ λ ⟨n, hn⟩, let ⟨k, hks, hk⟩ := h.exists_gt n in (hn k hks).not_lt hk
4142

4243
@[simp] lemma Inf_eq_zero {s : set ℕ} : Inf s = 00 ∈ s ∨ s = ∅ :=
4344
begin

src/data/nat/nth.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ begin
294294
suffices h : Inf {i : ℕ | p i ∧ n ≤ i} ∈ {i : ℕ | p i ∧ n ≤ i},
295295
{ exact h.2 },
296296
apply Inf_mem,
297-
obtain ⟨m, hp, hn⟩ := hp.exists_nat_lt n,
297+
obtain ⟨m, hp, hn⟩ := hp.exists_gt n,
298298
exact ⟨m, hp, hn.le⟩
299299
end
300300

src/data/set/finite.lean

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1054,9 +1054,6 @@ theorem infinite_of_injective_forall_mem [infinite α] {s : set β} {f : α →
10541054
(hi : injective f) (hf : ∀ x : α, f x ∈ s) : s.infinite :=
10551055
by { rw ←range_subset_iff at hf, exact (infinite_range_of_injective hi).mono hf }
10561056

1057-
lemma infinite.exists_nat_lt {s : set ℕ} (hs : s.infinite) (n : ℕ) : ∃ m ∈ s, n < m :=
1058-
let ⟨m, hm⟩ := (hs.diff $ set.finite_le_nat n).nonempty in ⟨m, by simpa using hm⟩
1059-
10601057
lemma infinite.exists_not_mem_finset {s : set α} (hs : s.infinite) (f : finset α) :
10611058
∃ a ∈ s, a ∉ f :=
10621059
let ⟨a, has, haf⟩ := (hs.diff (to_finite f)).nonempty
@@ -1076,6 +1073,23 @@ end
10761073

10771074
/-! ### Order properties -/
10781075

1076+
section preorder
1077+
variables [preorder α] [nonempty α] {s : set α}
1078+
1079+
lemma infinite_of_forall_exists_gt (h : ∀ a, ∃ b ∈ s, a < b) : s.infinite :=
1080+
begin
1081+
inhabit α,
1082+
set f : ℕ → α := λ n, nat.rec_on n (h default).some (λ n a, (h a).some),
1083+
have hf : ∀ n, f n ∈ s := by rintro (_ | _); exact (h _).some_spec.some,
1084+
refine infinite_of_injective_forall_mem (strict_mono_nat_of_lt_succ $ λ n, _).injective hf,
1085+
exact (h _).some_spec.some_spec,
1086+
end
1087+
1088+
lemma infinite_of_forall_exists_lt (h : ∀ a, ∃ b ∈ s, b < a) : s.infinite :=
1089+
@infinite_of_forall_exists_gt αᵒᵈ _ _ _ h
1090+
1091+
end preorder
1092+
10791093
lemma finite_is_top (α : Type*) [partial_order α] : {x : α | is_top x}.finite :=
10801094
(subsingleton_is_top α).finite
10811095

src/group_theory/exponent.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ variable {G}
196196
begin
197197
refine ⟨λ he, _, λ he, _⟩,
198198
{ by_contra h,
199-
obtain ⟨m, ⟨t, rfl⟩, het⟩ := set.infinite.exists_nat_lt h (exponent G),
199+
obtain ⟨m, ⟨t, rfl⟩, het⟩ := set.infinite.exists_gt h (exponent G),
200200
exact pow_ne_one_of_lt_order_of' he het (pow_exponent_eq_one t) },
201201
{ lift (set.range order_of) to finset ℕ using he with t ht,
202202
have htpos : 0 < t.prod id,

0 commit comments

Comments
 (0)