Стандартні конструктивні визначення цілих чисел, раціональних чи реальних значень?


10

Натуральні числа визначаються індуктивно як (використовуючи синтаксис Coq як приклад)

Inductive nat: Set :=
| O: nat
| S: nat -> nat.

Чи існує стандартний спосіб конструктивного визначення цілих чисел (а може бути, інших наборів, таких як раціональні чи дійсні)?


1
Що таке конструктивне визначення?
Трисмегістос

Відповіді:


12

Існує кілька способів визначення математичної структури залежно від того, які властивості ви вважаєте визначенням. Між еквівалентними характеристиками, яке саме ви будете визначати, а яке - для альтернативної характеристики, не важливо.

У конструктивній математиці бажано вибрати визначення, яке спрощує конструктивне міркування. Для натуральних чисел основна форма міркування - індукція, що робить традиційне визначення нуля чи наступника дуже підходящим. Інші набори номерів не мають такої переваги.

Розмірковуючи про коефіцієнти, у неконструктивних умовах прийнято говорити "вибрати члена класу еквівалентності". У конструктивній обстановці необхідно описати, як вибрати члена. Це полегшує пошук визначень, що будують один об'єкт для кожного члена типу, а не побудову класів еквівалентності.

Наприклад, щоб визначити , математик може бути задоволений рівнянням різниць натуральних чисел: Хоча це має сприятливе почуття до цього (ні "те чи інше"), для конструктивних міркувань простіше, якщо рівність об'єктів збігається з рівністю уявлень , тож ми можемо визначити відносні цілі числа як натуральне число, або як від’ємне натуральне число мінус одне:Z

Z:=N2/{((x,y),(x,y))x+y=x+y}
Inductive Z1 :=
  | Nonnegative : nat -> Z1   (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
  | Negative : nat -> Z1.     (* ⟦Negative x⟧ = -⟦x⟧-1 *)

Однак це визначення дивно несиметричне, завдяки чому бажано визнати два різних подання для нуля:

Inductive Z2 :=
  | Nonnegative : nat -> Z2   (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
  | Nonpositive : nat -> Z2.  (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)

Або ми можемо побудувати відносні цілі числа, не використовуючи натурали як будівельний блок:

Inductive Pos3 :=
  | I : Pos3                  (* ⟦I⟧ = 1 *)
  | S3 : Pos3 -> Pos3         (* ⟦S3 x⟧ = ⟦x⟧+1 *)
Inductive Z3 :=
  | N3 : Pos3 -> Z3           (* ⟦N3 x⟧ = -⟦x⟧ *)
  | O3 : Z3                   (* ⟦O3⟧ = 0 *)
  | P3 : Pos3 -> Z3           (* ⟦P3 x⟧ = ⟦x⟧ *)

Стандартна бібліотека використовує Coq ще одне визначення: він створює позитивні цілі числа від їх позначень є базою 2, як цифра 1 , за яким слід послідовність цифр 0 або 1. Потім він будує , Zяк Z3з Pos3вище. Це визначення також має унікальне подання для кожного цілого числа. Вибір використання двійкової нотації не для легшого міркування, а для створення більш ефективного коду, коли програми витягуються з доказів.

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

Для раціональних чисел важко уникнути коефіцієнтів, якщо ми не почнемо з подання цілих чисел як добутку факторів (що ускладнює визначення деяких фундаментальних операцій, таких як додавання та загальне впорядкування на ). Стандартна бібліотека Coq визначає як (чисельник і знаменник), і визначає оператора для перевірки еквівалентності двох елементів . Це визначення досить поширене, тому що це так просто, як це стає.NQN×N=?=Q

Справжні цифри - це зовсім інший чайник з рибою, оскільки їх не можна сконструювати. Неможливо визначити реальні числа як індуктивний тип (усі індуктивні типи є численними). Натомість будь-яке визначення реальних чисел повинно бути аксіоматичним, тобто неконструктивним. Можна побудувати численні підмножини реальних чисел; спосіб зробити це залежить від того, який підмножина ви хочете побудувати.


1
В обчислюваних дійсних чисел , як видається, найбільш розумним кандидатом, так як більшість використання дійсних чисел пов'язані з їх звичайним упорядкуванням в деякому роді.
dfeuer

5
Що означає "конструктивні"? Мені відомі лише "конструктивні множини" а-ля теорії множин, але це саме зараз. Крім того, хоча ця справа полягає в тому, що риали - це зовсім інший чайник риби, неправда, що "будь-яке визначення реальних чисел повинно бути аксіоматичним, тобто неконструктивним". А в теорії типу гомотопії існує більш високе індуктивно-індуктивне визначення дійсних дій.
Андрій Бауер

15

Відповідь Жиля - хороша, за винятком абзацу про реальні числа, який є абсолютно помилковим, за винятком того, що реальні цифри справді є різним чайником риби. Оскільки цей вид дезінформації здається досить поширеним, я хотів би записати тут детальне спростування.

Неправда, що всі індуктивні типи є численними. Наприклад, індуктивний тип

Inductive cow := 
   | nose : cow
   | horn : (nat -> cow) -> cow.

не є численним, оскільки для будь-якої послідовності c : nat -> cowми можемо сформувати цю форму, horn cяка не належить до послідовності за рахунок обґрунтованості великої рогатої худоби. Якщо ви хочете, щоб правильний вислів форми "всі індуктивні типи підлягають обліку", ви повинні сильно обмежити дозволені конструкції.

Реальні числа не можуть бути легко побудовані як індуктивний тип, за винятком того, що в теорії типу гомотопії вони можуть бути побудовані як вищий індуктивно-індуктивний тип , див. Розділ 11 книги HoTT . Можна стверджувати, що це обман.

Існує ряд конструктивних визначень і конструкцій причин, всупереч твердженню Гілла. Їх можна розділити на два класи:

  1. Конструкції типу Коші, в яких реалі розглядаються як метричне завершення раціональних чисел. Така конструкція часто вимагає доказів, хоча, можливо, вдасться уникнути коюндуктивного визначення, залежно від того, як ставиться до рівності. Наївна конструкція, як правило, також вимагає вибору, але Фред Річман дав процедуру завершення, яка конструктивно працює без вибору, дивіться його реальні номери та інші доповнення .

  2. Конструкція типу Дедекінд, в якій реальні розглядаються як (двосторонні) розрізи раціоналів. Така конструкція зазвичай вимагає набору потужностей або подібного пристрою, хоча це можливо зробити просто за допомогою базового калькуляції та аксіоматизації простору Сьєрпінського , див. Дідекінд-описи в "Абстрактній кам'яній подвійності" .λΣ

Що стосується реалізації, у нас є різні конструктивні формалізації дій (але не ті, які є у стандартній бібліотеці Coq, що просто жахливо), наприклад, Робберт Кребберс та Комп'ютер Бас Спіттерс, які підтверджують ефективні точні результати в Coq .

Для реальної реалізації точних реальних цифр я вказую вам на iRRAM Норберта Мюллера .

Нарешті, зауваження Жилла про численні підмножини реалів не вдається. Цілком можливо побудувати або визначити незлічувані множини в будь-якій конструктивній обстановці, де ви живете. Наприклад, простір Baire всіх послідовностей чисел завжди незліченний, навіть якщо ви вважаєте, що кожна функція обчислюється Тьюрінгом - див . Пояснення в моєму блозі .NN


Можна, мабуть, аксіоматизувати теорію реальних закритих полів у Coq ...
Псевдонім

Так, ви могли, і це зробив Кирило Коен, див. Hal.inria.fr/hal-00671809v1/document . Який твій погляд?
Андрій Бауер

1
Я не маю сенсу, це була лише презумпція.
Псевдонім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.