Аналіз I, Глава 2.1 #
Цей файл є перекладом Глави 2.1 Аналізу I до Lean 4. Вся нумерація посилається на оригінальний текст.
Я (пр.перекл. Терренс Тао) намагався зробити переклад якомога точнішим перефразуванням оригінального тексту. Коли є вибір між більш ідіоматичним рішенням Lean та більш точним перекладом, я зазвичай обирав останній. Зокрема, будуть місця, де код Lean можна було б "підбуцнути", щоб зробити його більш елегантним та ідіоматичним, але я свідомо уникав цього вибору.
Основні конструкції та результати цього розділу:
- Визанчення натуральних чисел "Розділу 2",
Chapter2.Nat
, абревіюється якNat
в середині простору іменChapter2
. (У книзі натуральні числа трактуються суто аксіоматично, як тип, що підпорядковується аксіомам Пеано; але тут ми використовуємо переваги рідних для Lean індуктивних типів, щоб явно побудувати версію натуральних чисел, які підпорядковуються цим аксіомам. Можна також діяти більш аксіоматично, як це зроблено в розділі 3 для теорії множин, але ми залишаємо це як вправу для читача..) - Встановлення аксіом Пеано для
Chapter2.Nat
- Рекурсивні визначення для
Chapter2.Nat
Примітка: наприкінці цього розділу клас Chapter2.Nat
буде замінено на користь стандартного
класу Mathlib _root_.Nat
, або ℕ
. Однак, ми пропрацюємо властивості
Chapter2.Nat
"вручну" в наступних кількох розділах для педагогічних цілей.
Equations
- Chapter2.instReprNat = { reprPrec := Chapter2.reprNat✝ }
Аксіома 2.1 (0 це натуральне число)
Equations
- Chapter2.Nat.instZero = { zero := Chapter2.Nat.zero }
Аксіома 2.2 (Наступник натурального числа також є натуральним числом)
Equations
- Chapter2.«term_++» = Lean.ParserDescr.trailingNode `Chapter2.«term_++» 100 100 (Lean.ParserDescr.symbol "++")
Instances For
Визначення 2.1.3 (Визначення чисел 0, 1, 2, etc.). Примітка: щоб уникнути неоднозначності, вам може знадобитися явна конвертація як наприклад (0:Nat), (1:Nat), і т.д. щоб посилатися на версію натуральних чисел із цього розділу.
Equations
- Chapter2.Nat.instOfNat = { ofNat := Nat.rec 0 (fun (x : ℕ) (n : Chapter2.Nat) => n++) n }
Аксіома 2.3 (0 не є наступником ніякого натурального числа).
Порівняйте із Mathlib-овським Nat.succ_ne_zero
.
Аксіома 2.4 (Різні натуральні числа мають різних наступників).
Порівняйте із Mathlib-овським Nat.succ_inj
.
Аксіома 2.4 (Різні натуральні числа мають різних наступників).
Порівняйте із Mathlib-овським Nat.succ_ne_succ
.
Ви також можете довести такого типу результат використовуючи тактику decide
Рекурсія. Аналогічно до вбудованого методу Mathlib Nat.rec
ассоційованого із
натуральними числами Mathlib
Equations
- Chapter2.Nat.recurse f c Chapter2.Nat.zero = c
- Chapter2.Nat.recurse f c (a++) = f a (Chapter2.Nat.recurse f c a)
Instances For
Твердження 2.1.16 (рекурсивне визначення). Порівняйте із Mathlib-овським Nat.rec_zero
.