Аналіз I, Розділ 2, Епілог: Ізоморфізм із натуральними числами Mathlib #
У цьому (технічному) епілозі ми показуємо, що натуральні числа Chapter2.Nat з "Розділу 2"
ізоморфні стандартним натуральним числам ℕ у різних типових сенсах.
З цього моменту Chapter2.Nat буде застарілим типом, і замість нього ми використовуватимемо
стандартні натуральні числа ℕ. Зокрема, для всіх наступних розділів слід використовувати
повний API Mathlib для ℕ замість API Chapter2.Nat.
Для заповнення цих вибачень потрібні як Chapter2.Nat API, так і Mathlib API для стандартних
натуральних чисел ℕ. Таким чином, вони є чудовими вправами для підготовки до вищезгаданого
переходу.
У другій половині цього розділу ми також наводимо повністю аксіоматичне трактування
натуральних чисел за допомогою аксіом Пеано. Розгляд у попередніх трьох розділах
був лише частково аксіоматичним, оскільки ми використовували специфічну конструкцію
Chapter2.Nat натуральних чисел, яка була індуктивного типу, і використовували цей
індуктивний тип для побудови рекурсора. Тут ми наводимо кілька вправ, щоб показати,
як можна виконати ті ж завдання безпосередньо з аксіом Пеано, не знаючи конкретної
реалізації натуральних чисел.
Підказки від попередніх користувачів #
Користувачі супровідного матеріалу, які виконали вправи в цьому розділі, можуть надсилати свої поради майбутнім користувачам цього розділу як PRи.
- (Додайте підказку тут)
Перетворення є бієкцією. Тут ми використовуємо наявну можливість (з Розділу 2.1) для відображення натуральних чисел Mathlib на натуральні числа Розділу 2.
Equations
- Chapter2.Nat.equivNat = { toFun := Chapter2.Nat.toNat, invFun := fun (n : ℕ) => ↑n, left_inv := Chapter2.Nat.equivNat._proof_1, right_inv := Chapter2.Nat.equivNat._proof_2 }
Instances For
Equations
- Chapter2.Nat.equivNat_ordered_ring = { toEquiv := Chapter2.Nat.equivNat, map_mul' := Chapter2.Nat.map_mul, map_add' := Chapter2.Nat.map_add, map_le_map_iff' := ⋯ }
Instances For
Аксіоми Пеано для абстрактного типу Nat
Instances For
Натуральні числа розділу 2 дотримуються аксіом Пеано.
Equations
- PeanoAxioms.Chapter2_Nat = { Nat := Chapter2.Nat, zero := Chapter2.Nat.zero, succ := Chapter2.Nat.succ, succ_ne := Chapter2.Nat.succ_ne, succ_cancel := ⋯, induction := Chapter2.Nat.induction }
Instances For
Натуральні числа Mathlib дотримуються аксіом Пеано.
Equations
- PeanoAxioms.Mathlib_Nat = { Nat := ℕ, zero := 0, succ := Nat.succ, succ_ne := Nat.succ_ne_zero, succ_cancel := @PeanoAxioms.Mathlib_Nat._proof_1, induction := ⋯ }
Instances For
Доведення можна почати тут з unfold Function.Injective, хоча це не є строго обов’язковим.
Доведення можна почати тут з unfold Function.Surjective, хоча це не є строго обов’язковим.
Ця вправа вимагатиме застосування API Mathlib для класу Equiv.
Деякі частини цього API можна викликати автоматично за допомогою тактики simp.
Instances For
Ця вправа вимагатиме застосування API Mathlib для класу Equiv.
Деякі частини цього API можна викликати автоматично за допомогою тактики simp.
Equations
- equiv1.trans equiv2 = { equiv := PeanoAxioms.Equiv.equiv.trans PeanoAxioms.Equiv.equiv, equiv_zero := ⋯, equiv_succ := ⋯ }
Instances For
Корисні інструменти Mathlib для інверсії бієкцій включають Function.surjInv та Function.invFun.
Equations
Instances For
Завдання тут полягає в тому, щоб довести, що будь-які дві структури, які задовольняють аксіоми Пеано, є еквівалентними.
Equations
- PeanoAxioms.Equiv.mk' P Q = sorry
Instances For
Існує лише одна еквівалентність між будь-якими двома структурами, що задовольняють аксіоми Пеано.