Documentation

Analysis.Section_2_epilogue

Аналіз I, Розділ 2, Епілог: Ізоморфізм із натуральними числами Mathlib #

У цьому (технічному) епілозі ми показуємо, що натуральні числа Chapter2.Nat з "Розділу 2" ізоморфні стандартним натуральним числам у різних типових сенсах.

З цього моменту Chapter2.Nat буде застарілим типом, і замість нього ми використовуватимемо стандартні натуральні числа . Зокрема, для всіх наступних розділів слід використовувати повний API Mathlib для замість API Chapter2.Nat.

Для заповнення цих вибачень потрібні як Chapter2.Nat API, так і Mathlib API для стандартних натуральних чисел . Таким чином, вони є чудовими вправами для підготовки до вищезгаданого переходу.

У другій половині цього розділу ми також наводимо повністю аксіоматичне трактування натуральних чисел за допомогою аксіом Пеано. Розгляд у попередніх трьох розділах був лише частково аксіоматичним, оскільки ми використовували специфічну конструкцію Chapter2.Nat натуральних чисел, яка була індуктивного типу, і використовували цей індуктивний тип для побудови рекурсора. Тут ми наводимо кілька вправ, щоб показати, як можна виконати ті ж завдання безпосередньо з аксіом Пеано, не знаючи конкретної реалізації натуральних чисел.

Підказки від попередніх користувачів #

Користувачі супровідного матеріалу, які виконали вправи в цьому розділі, можуть надсилати свої поради майбутнім користувачам цього розділу як PRи.

@[reducible, inline]
abbrev Chapter2.Nat.toNat (n : Nat) :

Перетворення натурального числа з Розділу 2 на натуральне число Mathlib.

Equations
Instances For
    @[reducible, inline]

    Перетворення є бієкцією. Тут ми використовуємо наявну можливість (з Розділу 2.1) для відображення натуральних чисел Mathlib на натуральні числа Розділу 2.

    Equations
    Instances For
      @[reducible, inline]
      abbrev Chapter2.Nat.map_add (n m : Nat) :
      (n + m).toNat = n.toNat + m.toNat

      Перетворення зберігає операцію додавання.

      Equations
      • =
      Instances For
        @[reducible, inline]
        abbrev Chapter2.Nat.map_mul (n m : Nat) :
        (n * m).toNat = n.toNat * m.toNat

        Перетворення зберігає операцію множення.

        Equations
        • =
        Instances For
          @[reducible, inline]

          Перетворення зберігає порядок.

          Equations
          • =
          Instances For
            @[reducible, inline]
            Equations
            Instances For
              theorem Chapter2.Nat.pow_eq_pow (n m : Nat) :
              n.toNat ^ m.toNat = (n ^ m).toNat

              Перетворення зберігає піднесення до степеня.

              structure PeanoAxioms :

              Аксіоми Пеано для абстрактного типу Nat

              Instances For
                theorem PeanoAxioms.ext {x y : PeanoAxioms} (Nat : x.Nat = y.Nat) (zero : x.zero y.zero) (succ : x.succ y.succ) :
                x = y

                Натуральні числа розділу 2 дотримуються аксіом Пеано.

                Equations
                Instances For

                  Натуральні числа Mathlib дотримуються аксіом Пеано.

                  Equations
                  Instances For
                    @[reducible, inline]

                    Ви можете співставити натуральні числа Mathlib у іншу струкруту яка дотримується аксіом Пеано.

                    Equations
                    Instances For

                      Доведення можна почати тут з unfold Function.Injective, хоча це не є строго обов’язковим.

                      Доведення можна почати тут з unfold Function.Surjective, хоча це не є строго обов’язковим.

                      Поняття еквівалентності між двома структурами, що задовольняють аксіоми Пеано. Символ є псевдонімом для класу Equiv у Mathlib; наприклад, P.Nat ≃ Q.Nat є псевдонімом для _root_.Equiv P.Nat Q.Nat.

                      Instances
                        @[reducible, inline]
                        abbrev PeanoAxioms.Equiv.symm {P Q : PeanoAxioms} (equiv : P.Equiv Q) :
                        Q.Equiv P

                        Ця вправа вимагатиме застосування API Mathlib для класу Equiv. Деякі частини цього API можна викликати автоматично за допомогою тактики simp.

                        Equations
                        Instances For
                          @[reducible, inline]
                          abbrev PeanoAxioms.Equiv.trans {P Q R : PeanoAxioms} (equiv1 : P.Equiv Q) (equiv2 : Q.Equiv R) :
                          P.Equiv R

                          Ця вправа вимагатиме застосування API Mathlib для класу Equiv. Деякі частини цього API можна викликати автоматично за допомогою тактики simp.

                          Equations
                          Instances For
                            @[reducible, inline]

                            Корисні інструменти Mathlib для інверсії бієкцій включають Function.surjInv та Function.invFun.

                            Equations
                            Instances For
                              @[reducible, inline]
                              noncomputable abbrev PeanoAxioms.Equiv.mk' (P Q : PeanoAxioms) :
                              P.Equiv Q

                              Завдання тут полягає в тому, щоб довести, що будь-які дві структури, які задовольняють аксіоми Пеано, є еквівалентними.

                              Equations
                              Instances For
                                theorem PeanoAxioms.Equiv.uniq {P Q : PeanoAxioms} (equiv1 equiv2 : P.Equiv Q) :
                                equiv1 = equiv2

                                Існує лише одна еквівалентність між будь-якими двома структурами, що задовольняють аксіоми Пеано.

                                theorem PeanoAxioms.Nat.recurse_uniq {P : PeanoAxioms} (f : P.NatP.NatP.Nat) (c : P.Nat) :
                                ∃! a : P.NatP.Nat, a P.zero = c ∀ (n : P.Nat), a (P.succ n) = f n (a n)

                                Приклад результату: рекурсія коректно визначена на будь-якій структурі, що підпорядковується аксіомам Пеано.