Аналіз I, Глава 3.1 #
У цій главі ми пропонуємо версію теорії множин Цермело-Франкеля (з атомами), яка намагається максимально точно наслідувати оригінальний тексту Аналізу I, Глава 3.1. Вся нумерація посилається на оригінальний текст.
Я (пр.перекл. Терренс Тао) намагався зробити переклад якомога точнішим перефразуванням оригінального тексту. Коли є вибір між більш ідіоматичним рішенням Lean та більш точним перекладом, я зазвичай обирав останній. Зокрема, будуть місця, де код Lean можна було б "підбуцнути", щоб зробити його більш елегантним та ідіоматичним, але я свідомо уникав цього вибору.
Основні конструкції та результати цього розділу:
Тип множин
Chapter3.SetTheory.Set
Тип об'єктів
Chapter3.SetTheory.Object
Аксіома що кожна множина є (або може бути перетворена на) об'єкт
Порожня множина
∅
, сінглетони{y}
, та пари{y,z}
(та більш узагальнені кінцеві кортежі), із їх супутнімі аксіомамиПопарне об'єднання
X ∪ Y
, та його супутні аксіомиПриведення множини
A
до пов'язаного з нею типуA.toSubtype
, який є підтипомObject
, та базового API. (Це технічна конструкція, необхідна для того, щоб зробити теорію множин Цермело-Франкеля сумісною з теорією залежних типів Lean.)Специфікація
A.specify P
множиниA
та предикатP: A.toSubtype → Prop
до підмножини елементівA
, що підпорядковуютьсяP
, та аксіома специфікації. TODO: якось реалізувати конструктора множин для цього.Заміна
A.replace hP
множиниA
за допомогою предикатаP: A.toSubtype → Object → Prop
, що підпорядковується умові унікальності∀ x y y', P x y ∧ P x y' → y = y'
, та аксіомі заміщення.Бієктивна відповідність між натуральними числами Mathlib
ℕ
та множиноюChapter3.Nat : Chapter3.Set
(аксіомою нескінченності).Аксіоми регулярності, степеневої множини та об'єднання (використовуються в наступних розділах цього розділу, але не обов'язкові тут)
Поєднання із Mathlib-овською нотацію множини
Інші аксіоми теорії множин Цермело-Френкеля обговорюються в наступних розділах.
Деякі технічні зауваження:
- Звичайно, Mathlib має власне поняття
Set
, яке несумісне з поняттямChapter3.Set
, визначеним тут, хоча ми спробуємо зробити позначення максимально збігаючимися. Це спричиняє певний конфлікт позначень: наприклад, може знадобитися явно вказати(∅:Chapter3.Set)
замість просто∅
, щоб вказати, що використовується версія порожньої множиниChapter3.Set
, а не версія порожньої множини Mathlib, і аналогічно для інших позначень, визначених тут. - В Аналізі I ми вирішили працювати з "нечистою" теорією множин, в якій може бути більше
Object
-ів, ніж простоSet
-ів. У теорії типів Lean це вимагає розглядатиChapter3.Set
таChapter3.Object
як окремі типи. Іноді це означає, що нам доводиться використовувати приведенняX.toObject
відChapter3.Set
X
, щоб перетворити його наChapter3.Object
: це здебільшого потрібно під час маніпулювання множинами множин. - Після завершення цього розділу поняття
Chapter3.SetTheory.Set
буде відхилено на користь стандартного позначенняSet
від Mathlib (або, точніше, типуSet X
множини в заданому типіX
). Однак, через різні технічні несумісності між теорією множин та теорією типів, ми не намагатимемося створити будь-яку еквівалентність між цими двома поняттями множин. (Таким чином, це робить весь цей розділ необов'язковим з точки зору решти книги, хоча ми зберігаємо його для педагогічних цілей.)
Деякі аксіоми теорії Цермело-Франкеля з атомами
Instances
Визначення 3.1.1 (об'єкти можуть бути елементами множин)
Equations
- Chapter3.objects_mem_sets = { mem := fun (X : Chapter3.Set) (x : Chapter3.Object) => Chapter3.SetTheory.mem x X }
Аксіома 3.1 (Множини це об'єкти)
Equations
- Chapter3.sets_are_objects = { coe := fun (X : Chapter3.Set) => Chapter3.SetTheory.set_to_object X }
Equations
Instances For
Equations
- Chapter3.SetTheory.Set.instEmpty = { emptyCollection := Chapter3.SetTheory.emptyset }
Axiom 3.3 (порожня множина). Примітка: можливо, доведеться явно перетворити ∅ на Set через існуючу нотацію теорії множин Mathlib.
Equations
- Chapter3.SetTheory.Set.instSingleton = { singleton := Chapter3.SetTheory.singleton }
Equations
Equations
- Chapter3.SetTheory.Set.instInsert = { insert := fun (x : Chapter3.Object) (X : Chapter3.Set) => {x} ∪ X }
Equations
Instances For
Instances For
Equations
Instances For
Вправа 3.1.2
Вправа 3.1.2
Визначення 3.1.14.
Equations
- Chapter3.SetTheory.Set.instSubset = { Subset := fun (X Y : Chapter3.Set) => ∀ x ∈ X, x ∈ Y }
Визначення 3.1.14.
Зверніть увагу, що операція строгої підмножини в Mathlib позначається ⊂
, а не ⊊
.
Equations
- Chapter3.SetTheory.Set.instSSubset = { SSubset := fun (X Y : Chapter3.Set) => X ⊆ Y ∧ X ≠ Y }
This defines the subtype A.toSubtype
for any A:Set
. To produce an element x'
of this
subtype, use ⟨ x, hx ⟩
, where x:Object
and hx:x ∈ A
. The object x
associated to a
subtype element x'
is recovered as x.val
, and the property hx
that x
belongs to A
is
recovered as x.property
Це визначає підтип A.toSubtype
для будь-якого A:Set
. Щоб створити елемент x'
цього підтипу, використовуйте ⟨ x, hx ⟩
, де x:Object
та hx:x ∈ A
. Об'єкт x
, пов'язаний з елементом підтипу x'
, відновлюється як x.val
, а властивість hx
, що x
належить A
, відновлюється як x.property
.
Instances For
Equations
- Chapter3.instCoeSortSetType = { coe := fun (A : Chapter3.Set) => A.toSubtype }
Якщо є доказ hx
для x ∈ A
, тоді A.subtype_mk hx
зробить елемент A
(розглядаємий як підтип) відповідним x
.
Equations
- A.subtype_mk hx = ⟨x, hx⟩
Instances For
Equations
- Chapter3.SetTheory.Set.instIntersection = { inter := fun (X Y : Chapter3.Set) => X.specify fun (x : X.toSubtype) => ↑x ∈ Y }
Equations
- Chapter3.SetTheory.Set.instSDiff = { sdiff := fun (X Y : Chapter3.Set) => X.specify fun (x : X.toSubtype) => ↑x ∉ Y }
Не з підручника: множини утворюють дистрибутивну решітку.
Equations
- One or more equations did not get rendered due to their size.
Множини мають мінімальний елемент.
Equations
- Chapter3.SetTheory.Set.instOrderBot = { bot := ∅, bot_le := ⋯ }
Equations
Instances For
Аксіома 3.8 (Аксіома нескінченності)
Instances For
Equations
Equations
- Chapter3.SetTheory.Set.instNatCast = { natCast := fun (n : ℕ) => Chapter3.SetTheory.Set.nat_equiv n }
Equations
- Chapter3.SetTheory.Set.toNat = { coe := fun (n : Chapter3.Nat.toSubtype) => Chapter3.SetTheory.Set.nat_equiv.symm n }
Equations
- Chapter3.SetTheory.Object.instNatCast = { natCast := fun (n : ℕ) => ↑↑n }
Equations
- Chapter3.SetTheory.Object.instOfNat = { ofNat := ↑↑n }
Вправа 3.1.11.
Завдання полягає в тому, щоб довести це без використання Set.specify
, Set.specification_axiom
або Set.specification_axiom
.
Equations
- Chapter3.SetTheory.Set.inst_coe_set = { coe := fun (X : Chapter3.Set) => {x : Chapter3.Object | x ∈ X} }