Легко заплутатися в тому, що означає "представляти" чи "реалізовувати" реальне число. Насправді ми спостерігаємо дискусію в коментарях, де представництво є спірним. Тож дозвольте мені вирішити це спочатку.
Як ми можемо знати, що реалізація правильна?
Теорія, яка пояснює, як представити речі в комп'ютері, - це реалізація . Основна ідея полягає в тому, що, задаючи множину , ми вибираємо тип даних τ і для кожного x ∈ X набір значень типу τ, які реалізують його. Ми пишемо V ⊢ х ∈ X , якщо v є значенням , яке реалізує й . Наприклад (я буду використовувати Haskell без поважних причин), розумною реалізацією N може бути тип даних, де v ⊢ k ∈ N, коли vXτx∈Xτv⊢x∈XvxNInteger
v⊢k∈Nvоцінює до числа (таким чином, зокрема , не представляє натурального числа, а також не розбіжну програму). Але якийсь жартівник міг би пройти і запропонувати нам використовувати для подання натуральних чисел з T r u e ⊢ 42 ∈ N і F a l s e ⊢ n ∈ N для n ≠ 42 . Чому це неправильно? Нам потрібен критерій .k¯¯¯-42
Bool
True⊢42∈NFalse⊢n∈Nn≠42
У випадку "джокер-номерів" легко помітити, що доповнення неможливо здійснити. Припустимо, я кажу вам, що я маю два числа, обидва представлені . Чи можете ви дати реалізатор на їх суму? Ну, це залежить від того, чи буде сума 42, але ви не можете сказати. Оскільки додавання є "важливою частиною того, що є природними числами", це неприпустимо. Іншими словами, реалізація стосується не множин, а структур , тобто ми повинні представляти множини таким чином, щоб можна було також реалізувати відповідну структуру. Дозвольте наголосити на цьому:False
Ми реалізуємо структури, а не голі набори. Тому ми повинні мати можливість реалізувати всю структуру разом з операціями та всіма аксіомами, щоб реалізація була правильною.
Якщо ви не дотримуєтесь цього принципу, то вам доведеться запропонувати альтернативний математичний критерій правильності. Я не знаю жодного.
Приклад: подання натуральних чисел
Для натуральних чисел відповідна структура описується аксіомами Пеано, а найважливішою аксіомою, яку потрібно реалізувати, є індукція (але також , наступник, + і × ). Ми можемо обчислити, використовуючи зрозумілість, що робить реалізація індукції. Виявляється, це карта (де ще невідомий тип даних, який представляє натуральні числа)0+×nat
induction : 'a -> (nat -> 'a -> 'a) -> 'nat -> 'a
задовольняючи induction x f zero = x
і induction x f (succ n) = f n (induction x f n)
. Все це виходить з реалізації. У нас є критерій: реалізація натуральних чисел є правильною, коли вона дозволяє реалізувати аксіоми Пеано. Аналогічний результат буде отриманий , якщо ми використовували характеристику чисел в якості вихідної алгебри для функтора .X↦1+X
Правильне виконання реальних чисел
Звернемо увагу на реальні цифри та питання, що знаходиться під рукою. Перше запитання - "яка відповідна структура дійсних чисел?" Відповідь: Архімед Коші заповнив упорядковане поле . Це усталене значення "реальних чисел". Ви не можете його змінити, це було зафіксовано іншими для вас (у нашому випадку альтернативні випробування Дедекінда виявляються ізоморфними реалій Коші, які ми тут розглядаємо.) Ви не можете забрати будь-яку його частину, вам заборонено говорити "Мені не важливо впроваджувати доповнення" або "Мене не хвилює замовлення". Якщо ви це зробите, ви повинні називати це не "справжніми числами", а чимось на кшталт "реальні числа, де ми забуваємо лінійний порядок".
Я не збираюся вникати в усі деталі, але дозвольте мені просто пояснити, як різні частини структури дають різні операції над реалізацією:
- архимедова аксіома про обчислення раціональних наближень дійсних чисел
- структура поля дає звичайні арифметичні операції
- лінійний порядок дає нам полуразрешімую процедуру для тестування x<y
- повнота Коші дає нам функцію ,
lim : (nat -> real) -> real
яка приймає (подання) швидку послідовність Коші і повертає його межа. (Послідовність швидка, якщо | x n - x m |(xn)n для всіх m , n .)| хн- хм| ≤ 2хв ( н , м )м , н
Те, що ми не отримуємо, є тестовою функцією на рівність. Там немає нічого аксіом для дійсних чисел , який запитує , що вирішується. (Навпаки, аксіоми Пеано означають, що натуральні числа можна вирішити, і ви можете довести це, використовуючи лише як цікаву вправу).=eq : nat -> nat -> Bool
induction
Справа в тому, що звичайне десяткове подання дій, якими користується людство, є поганим, оскільки з ним ми навіть не можемо реалізувати додавання. Невдача плаваюча точка з нескінченною мантісою (вправа: чому?). Однак, що працює, - це підпис з цифрами, тобто такий, в якому ми допускаємо як негативні, так і позитивні цифри. Або ми могли б використовувати послідовності раціоналів, які задовольняють швидкий тест Коші, як зазначено вище.
Представлення Цуйосі також реалізує щось, але не R
Розглянемо наступне подання дій: справжній представлений парою ( q , b ), де ( q n ) n - швидка послідовність Коші, що переходить у x, а b - булева, що вказує, чи x . Дійсно, згідно інтерпретації реалізації, об'єднання реалізується прапором, який вказує, в якій частині союзу ми перебуваємо. До речі, Z ∪ ( Rх( q, б )( qн)нхбх є цілим числом. Щоб це було зображення дій, нам довелося б реалізувати додавання, але, як виявляється, ми не можемо обчислити булеві прапори. Тож це не представлення реал. Але це все ще являє собою щось, а саме підмножину реалій Z ∪( R ∖ Z ) єНЕдорівнювати R , якщо ви не вірите в виключеному третьому, що не може бути реалізований і тому є неактуальним для цієї дискусії. Наскомп'ютери змушуютьробити речі інтуїтивно.Z ∪( R ∖ Z )R
Ми не можемо перевірити, чи дійсне є цілим числом
Наостанок дозвольте відповісти на запитання, яке було задано. Тепер ми знаємо, що прийнятне представлення реальності - це швидкі послідовності Коші раціональних. (Важлива теорема стверджує, що будь-які два подання дій, які є прийнятними, насправді є обчислювально ізоморфними.)
Теорема: Тестування того, чи дійсне є цілим числом, не вирішується.
Доказ. Припустимо, ми могли б перевірити, чи дійсне є цілим числом (звичайно, реальність реалізується за допомогою швидкої послідовності Коші). Ідея, яка дозволить вам довести набагато більш загальну теорему, якщо ви хочете, - побудувати швидку послідовність Коші нецілих чисел, яка сходиться на ціле число. Це легко, просто візьміть x n = 2 - n . Далі розв’яжіть задачу зупинки наступним чином. Давши машину Тюрінга T , визначте нову послідовність ( y n ) n через
y n = { x n, якщо T(xn)nxn=2−nT(yn)n
Тобто нова послідовність виглядає як послідовність(xn)n дотих пір, покипрацюєT, але потім вона "застрягає" наxm,якщоTзупиняється на кроціm. Дуже важливо, що нова послідовність - це також швидка послідовність Коші (і ми можемо довести це, не знаючи, чиT
yn={xnxmif T has not stopped within n stepsif T stopped in step m and m≤n
(xn)nTxmTmT зупиняється ). Тому ми можемо обчислити його межу
z=limnyn, тому що наше представлення реалій є правильним. Перевірте, чи
є цілим числом. Якщо це так, то воно повинно бути
0, і це відбувається лише в тому випадку, якщо
T працює вічно. В іншому випадку
z не є цілим числом, тому
T, мабуть, зупинився. QED.
z0TzT
Вправа: адаптуйте наведені докази, щоб показати, що ми не можемо перевірити на раціональні числа. Потім адаптуйте його, щоб показати, що ми не можемо перевірити на що-небудь нетривіальне (це трохи складніше).
Іноді люди плутаються у всьому цьому тестовому бізнесі. Вони вважають, що ми довели, що ніколи не можемо перевірити, чи дійсне значення є цілим числом. Але, безумовно, 42 справжнє, і ми можемо сказати, чи є цілим числом. Насправді, будь-яке конкретне дійсне ми придумаємо, , 88 ln 89 , e π √sin1188ln89 та ін., Ми можемо прекрасно сказати, чи є цілими числами. Точномиможемо сказати, оскільки унасє додаткова інформація: ці результати не даються нам як послідовності, а як символічні вирази, з яких ми можемо обчислити біт Цюсі. Як тільки єдина інформація, яку ми маємо про реальну, - це послідовність раціональних наближень, що сходяться до неї (а яніeπ163√ маю на увазі символічний вираз, що описує послідовність, а чорний ящик, який виводить -й член на вхід n ), то ми буде настільки ж безпорадним, як машини.nn
Мораль розповіді
Немає сенсу говорити про реалізацію набору, якщо ми не знаємо, які операції на ньому хочемо виконувати.