Аналіз 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.SetX, щоб перетворити його на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} }