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

Commit 1c4e184

Browse files
vihdzpurkud
andcommitted
refactor(set_theory/basic): match x < ℵ₀ lemmas with x ≤ ℵ₀ lemmas (#15662)
* Mark `cardinal.lt_aleph_0_iff_set_finite` as `@[simp]` lemma. * Add `cardinal.lt_aleph_0_iff_subtype_finite` and `cardinal.mk_le_aleph_0_iff`; drop `cardinal.encodable_iff`. * Rename `cardinal.mk_set_le_aleph_0` to `cardinal.le_aleph_0_iff_set_countable`. * Rename `cardinal.mk_subtype_le_aleph_0` to `cardinal.le_aleph_0_iff_subtype_countable`. * Make `first_order.language.countable` protected. * Use `[countable _]` instead of `[encodable _]` or `[nonempty (encodable _)]` here and there. Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
1 parent d5ef068 commit 1c4e184

11 files changed

Lines changed: 47 additions & 46 deletions

File tree

src/algebra/algebraic_card.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ variable [encodable R]
7373

7474
@[simp] theorem countable_of_encodable : set.countable {x : A | is_algebraic R x} :=
7575
begin
76-
rw [←mk_set_le_aleph_0, ←lift_le],
76+
rw [←le_aleph_0_iff_set_countable, ←lift_le],
7777
apply (cardinal_mk_lift_le_max R A).trans,
7878
simp
7979
end

src/analysis/complex/cauchy_integral.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,8 @@ begin
477477
{ refine nonempty_diff.2 (λ hsub, _),
478478
have : (Ioo l u).countable,
479479
from (hs.preimage ((add_right_injective w).comp of_real_injective)).mono hsub,
480-
rw [← cardinal.mk_set_le_aleph_0, cardinal.mk_Ioo_real (hlu₀.1.trans hlu₀.2)] at this,
480+
rw [← cardinal.le_aleph_0_iff_set_countable,
481+
cardinal.mk_Ioo_real (hlu₀.1.trans hlu₀.2)] at this,
481482
exact this.not_lt cardinal.aleph_0_lt_continuum },
482483
exact ⟨g x, (hlu_sub hx.1).1, (hlu_sub hx.1).2, hx.2
483484
end

src/data/complex/cardinality.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ by rw [mk_univ, mk_complex]
2727

2828
/-- The complex numbers are not countable. -/
2929
lemma not_countable_complex : ¬ (set.univ : set ℂ).countable :=
30-
by { rw [← mk_set_le_aleph_0, not_le, mk_univ_complex], apply cantor }
30+
by { rw [← le_aleph_0_iff_set_countable, not_le, mk_univ_complex], apply cantor }

src/data/real/cardinality.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ by rw [mk_univ, mk_real]
164164

165165
/-- **Non-Denumerability of the Continuum**: The reals are not countable. -/
166166
lemma not_countable_real : ¬ (set.univ : set ℝ).countable :=
167-
by { rw [← mk_set_le_aleph_0, not_le, mk_univ_real], apply cantor }
167+
by { rw [← le_aleph_0_iff_set_countable, not_le, mk_univ_real], apply cantor }
168168

169169
/-- The cardinality of the interval (a, ∞). -/
170170
lemma mk_Ioi_real (a : ℝ) : #(Ioi a) = 𝔠 :=

src/model_theory/basic.lean

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ structures.
3535
to the `L`-structure `N` that commutes with the interpretations of functions, and which preserves
3636
the interpretations of relations in both directions.
3737
38+
## TODO
39+
40+
Use `[countable L.symbols]` instead of `[L.countable]`.
41+
3842
## References
3943
For the Flypitch project:
4044
- [J. Han, F. van Doorn, *A formal proof of the independence of the continuum hypothesis*]
@@ -125,7 +129,7 @@ rfl
125129
def card : cardinal := # L.symbols
126130

127131
/-- A language is countable when it has countably many symbols. -/
128-
class countable : Prop := (card_le_aleph_0' : L.card ≤ ℵ₀)
132+
@[protected] class countable : Prop := (card_le_aleph_0' : L.card ≤ ℵ₀)
129133

130134
lemma card_le_aleph_0 [L.countable] : L.card ≤ ℵ₀ := countable.card_le_aleph_0'
131135

@@ -194,8 +198,8 @@ instance subsingleton_mk₂_relations {c f₁ f₂ : Type u} {r₁ r₂ : Type v
194198
nat.cases_on n ⟨λ x, pempty.elim x⟩
195199
(λ n, nat.cases_on n h1 (λ n, nat.cases_on n h2 (λ n, ⟨λ x, pempty.elim x⟩)))
196200

197-
lemma encodable.countable [h : encodable L.symbols] : L.countable :=
198-
⟨cardinal.encodable_iff.1 ⟨h⟩
201+
lemma encodable.countable [_root_.countable L.symbols] : L.countable :=
202+
⟨cardinal.mk_le_aleph_0
199203

200204
@[simp] lemma empty_card : language.empty.card = 0 :=
201205
by simp [card_eq_card_functions_add_card_relations]
@@ -211,7 +215,7 @@ instance countable_empty : language.empty.countable :=
211215
end
212216

213217
lemma encodable.countable_functions [h : encodable (Σl, L.functions l)] : L.countable_functions :=
214-
⟨cardinal.encodable_iff.1 ⟨h⟩
218+
⟨cardinal.mk_le_aleph_0
215219

216220
@[priority 100] instance is_relational.countable_functions [L.is_relational] :
217221
L.countable_functions :=

src/model_theory/encoding.lean

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,10 @@ begin
117117
rw [mk_nat, lift_aleph_0, mul_eq_max_of_aleph_0_le_left le_rfl, max_le_iff,
118118
csupr_le_iff' (bdd_above_range _)],
119119
{ refine ⟨le_max_left _ _, λ i, card_le.trans _⟩,
120-
rw max_le_iff,
121-
refine ⟨le_max_left _ _, _⟩,
120+
refine max_le (le_max_left _ _) _,
122121
rw [← add_eq_max le_rfl, mk_sum, mk_sum, mk_sum, add_comm (cardinal.lift (#α)), lift_add,
123-
add_assoc, lift_lift, lift_lift],
124-
refine add_le_add_right _ _,
125-
rw [lift_le_aleph_0, ← encodable_iff],
126-
exact ⟨infer_instance⟩ },
122+
add_assoc, lift_lift, lift_lift, mk_fin, lift_nat_cast],
123+
exact add_le_add_right (nat_lt_aleph_0 _).le _ },
127124
{ rw [← one_le_iff_ne_zero],
128125
refine trans _ (le_csupr (bdd_above_range _) 1),
129126
rw [one_le_iff_ne_zero, mk_ne_zero_iff],
@@ -154,13 +151,13 @@ encodable.of_left_injection list_encode (λ l, (list_decode l).head'.join)
154151
simp only [option.join, head', list.map, option.some_bind, id.def],
155152
end)
156153

157-
lemma card_le_aleph_0 [h1 : nonempty (encodable α)] [h2 : L.countable_functions] :
154+
lemma card_le_aleph_0 [h1 : countable α] [h2 : L.countable_functions] :
158155
# (L.term α) ≤ ℵ₀ :=
159156
begin
160157
refine (card_le.trans _),
161158
rw [max_le_iff],
162159
simp only [le_refl, mk_sum, add_le_aleph_0, lift_le_aleph_0, true_and],
163-
exact ⟨encodable_iff.1 h1, L.card_functions_le_aleph_0⟩,
160+
exact ⟨mk_le_aleph_0, L.card_functions_le_aleph_0⟩,
164161
end
165162

166163
instance small [small.{u} α] :

src/model_theory/finitely_generated.lean

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,9 @@ begin
157157
end
158158

159159
theorem cg_iff_countable [L.countable_functions] {s : L.substructure M} :
160-
s.cg ↔ nonempty (encodable s) :=
160+
s.cg ↔ countable s :=
161161
begin
162-
refine ⟨_, λ h, ⟨s, h, s.closure_eq⟩⟩,
162+
refine ⟨_, λ h, ⟨s, h.to_set, s.closure_eq⟩⟩,
163163
rintro ⟨s, h, rfl⟩,
164164
exact h.substructure_closure L
165165
end
@@ -224,10 +224,8 @@ begin
224224
exact h.range f,
225225
end
226226

227-
lemma cg_iff_countable [L.countable_functions] :
228-
cg L M ↔ nonempty (encodable M) :=
229-
by rw [cg_def, cg_iff_countable, cardinal.encodable_iff, cardinal.encodable_iff,
230-
top_equiv.to_equiv.cardinal_eq]
227+
lemma cg_iff_countable [L.countable_functions] : cg L M ↔ countable M :=
228+
by rw [cg_def, cg_iff_countable, top_equiv.to_equiv.countable_iff]
231229

232230
lemma fg.cg (h : fg L M) : cg L M :=
233231
cg_def.2 (fg_def.1 h).cg

src/model_theory/fraisse.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,8 @@ begin
237237
age.hereditary M, age.joint_embedding M⟩, },
238238
{ rintros ⟨Kn, eqinv, cq, hfg, hp, jep⟩,
239239
obtain ⟨M, hM, rfl⟩ := exists_cg_is_age_of Kn eqinv cq hfg hp jep,
240-
haveI := ((Structure.cg_iff_countable).1 hM).some,
241-
refine ⟨M, to_countable _, rfl⟩, }
240+
haveI : countable M := Structure.cg_iff_countable.1 hM,
241+
exact ⟨M, to_countable _, rfl⟩, }
242242
end
243243

244244
variables {K} (L) (M)

src/model_theory/substructures.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,10 @@ variable (L)
274274

275275
lemma _root_.set.countable.substructure_closure
276276
[L.countable_functions] (h : s.countable) :
277-
nonempty (encodable (closure L s)) :=
277+
countable (closure L s) :=
278278
begin
279-
haveI : nonempty (encodable s) := h,
280-
rw [encodable_iff, ← lift_le_aleph_0],
279+
haveI : countable s := h.to_subtype,
280+
rw [← mk_le_aleph_0_iff, ← lift_le_aleph_0],
281281
exact lift_card_closure_le_card_term.trans term.card_le_aleph_0,
282282
end
283283

src/set_theory/cardinal/basic.lean

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -979,11 +979,29 @@ lt_aleph_0_iff_finite.trans (finite_iff_nonempty_fintype _)
979979
theorem lt_aleph_0_of_finite (α : Type u) [finite α] : #α < ℵ₀ :=
980980
lt_aleph_0_iff_finite.2 ‹_›
981981

982-
theorem lt_aleph_0_iff_set_finite {α} {S : set α} : #S < ℵ₀ ↔ S.finite :=
982+
@[simp] theorem lt_aleph_0_iff_set_finite {S : set α} : #S < ℵ₀ ↔ S.finite :=
983983
lt_aleph_0_iff_finite.trans finite_coe_iff
984984

985985
alias lt_aleph_0_iff_set_finite ↔ _ _root_.set.finite.lt_aleph_0
986986

987+
@[simp] theorem lt_aleph_0_iff_subtype_finite {p : α → Prop} :
988+
#{x // p x} < ℵ₀ ↔ {x | p x}.finite :=
989+
lt_aleph_0_iff_set_finite
990+
991+
lemma mk_le_aleph_0_iff : #α ≤ ℵ₀ ↔ countable α :=
992+
by rw [countable_iff_nonempty_embedding, aleph_0, ← lift_uzero (#α), lift_mk_le']
993+
994+
@[simp] lemma mk_le_aleph_0 [countable α] : #α ≤ ℵ₀ := mk_le_aleph_0_iff.mpr ‹_›
995+
996+
@[simp] lemma le_aleph_0_iff_set_countable {s : set α} : #s ≤ ℵ₀ ↔ s.countable :=
997+
by rw [mk_le_aleph_0_iff, countable_coe_iff]
998+
999+
alias le_aleph_0_iff_set_countable ↔ _ _root_.set.countable.le_aleph_0
1000+
1001+
@[simp] lemma le_aleph_0_iff_subtype_countable {p : α → Prop} :
1002+
#{x // p x} ≤ ℵ₀ ↔ {x | p x}.countable :=
1003+
le_aleph_0_iff_set_countable
1004+
9871005
instance can_lift_cardinal_nat : can_lift cardinal ℕ :=
9881006
⟨ coe, λ x, x < ℵ₀, λ x hx, let ⟨n, hn⟩ := lt_aleph_0.mp hx in ⟨n, hn.symm⟩⟩
9891007

@@ -1066,30 +1084,13 @@ by rw [← not_lt, lt_aleph_0_iff_finite, not_finite_iff_infinite]
10661084

10671085
@[simp] lemma aleph_0_le_mk (α : Type u) [infinite α] : ℵ₀ ≤ #α := infinite_iff.1 ‹_›
10681086

1069-
lemma encodable_iff {α : Type u} : nonempty (encodable α) ↔ #α ≤ ℵ₀ :=
1070-
⟨λ ⟨h⟩, ⟨(@encodable.encode' α h).trans equiv.ulift.symm.to_embedding⟩,
1071-
λ ⟨h⟩, ⟨encodable.of_inj _ (h.trans equiv.ulift.to_embedding).injective⟩⟩
1072-
1073-
@[simp] lemma mk_le_aleph_0 [countable α] : #α ≤ ℵ₀ :=
1074-
encodable_iff.1 $ encodable.nonempty_encodable.2 ‹_›
1075-
10761087
lemma denumerable_iff {α : Type u} : nonempty (denumerable α) ↔ #α = ℵ₀ :=
10771088
⟨λ ⟨h⟩, mk_congr ((@denumerable.eqv α h).trans equiv.ulift.symm),
10781089
λ h, by { cases quotient.exact h with f, exact ⟨denumerable.mk' $ f.trans equiv.ulift⟩ }⟩
10791090

10801091
@[simp] lemma mk_denumerable (α : Type u) [denumerable α] : #α = ℵ₀ :=
10811092
denumerable_iff.1 ⟨‹_›⟩
10821093

1083-
@[simp] lemma mk_set_le_aleph_0 (s : set α) : #s ≤ ℵ₀ ↔ s.countable :=
1084-
begin
1085-
rw [set.countable_iff_exists_injective], split,
1086-
{ rintro ⟨f'⟩, cases embedding.trans f' equiv.ulift.to_embedding with f hf, exact ⟨f, hf⟩ },
1087-
{ rintro ⟨f, hf⟩, exact ⟨embedding.trans ⟨f, hf⟩ equiv.ulift.symm.to_embedding⟩ }
1088-
end
1089-
1090-
@[simp] lemma mk_subtype_le_aleph_0 (p : α → Prop) : #{x // p x} ≤ ℵ₀ ↔ {x | p x}.countable :=
1091-
mk_set_le_aleph_0 _
1092-
10931094
@[simp] lemma aleph_0_add_aleph_0 : ℵ₀ + ℵ₀ = ℵ₀ := mk_denumerable _
10941095

10951096
lemma aleph_0_mul_aleph_0 : ℵ₀ * ℵ₀ = ℵ₀ := mk_denumerable _

0 commit comments

Comments
 (0)