Чому обчислювальні числа (у розумінні Тюрінга) перелічуються? Це повинно бути дуже очевидно, але в даний момент я його просто не бачу.
Чому обчислювальні числа (у розумінні Тюрінга) перелічуються? Це повинно бути дуже очевидно, але в даний момент я його просто не бачу.
Відповіді:
Я припускаю, що ваше визначення обчислюваного числа таке: є машина Тьюрінга, яка на вході , зупинки з -ий біт числа.
Припустимо, було проведено рекурсивне перерахування машин Тьюрінга, які виробляють обчислювані числа. Ви можете використовувати діагоналізацію, щоб створити нове обчислюване число, яке не є частиною цього рекурсивного перерахування.
Зараховувати перерахування обчислювальних чисел шляхом перерахування машин Тьюрінга, але не кожна машина Тьюрінга відповідає обчислювальному номеру, і взагалі вирішує, чи зупиняється машина Тьюрінга на всіх входах (не кажучи вже про вихід або 0). Однак можна перерахувати всі ефективні обчислювані числа, скажімо, ті, час роботи яких є поліном, використовуючи тактовані машини Тьюрінга.
Якщо під числом ви маєте на увазі, що існує біекція з натуральними числами (тобто, підрахункові), то ні, обчислювані числа не перелічуються.
Давайте визначимо проблему точніше: "Машина друкування чисел із друком чисел (NPTM)" - це машина Тюрінга, яка при кожному переході стану не може надрукувати нічого, а також може надрукувати будь-яку десяткову цифру, знак мінус або період. Цього достатньо для друку десяткових зображень реальних чисел.
Дозволяє визначити обчислювальне реальне число як будь-яке дійсне число, яке може бути надруковано з довільним довгим поданням, за достатнього часу, NPTM, починаючи з порожньої стрічки. Давайте також скажемо, що число обчислюється заданим NPTM, якщо воно або зупиняється після друку добре сформованого реального числа (у цьому випадку число має кінцеве десяткове представлення), або буде за певний час друкувати добре сформоване число з десятковою крапкою і коли-небудь збільшить точність числа, надрукувавши більше цифр, даючи все більше часу.
Ця пізніша умова потрібна, оскільки, якщо у нас є машина, яка, наприклад, друкує нескінченну послідовність якоїсь цифри, скажімо 1111111111111111111
..., не можна сказати, що вона обчислює будь-яке реальне число, оскільки справжні числа мають нескінченне представлення праворуч сторона десяткового періоду. З іншого боку, якщо машина друкує, 3.14
а потім припиняє друкувати, але ніколи не зупиняється, не можна сказати, що обчислює будь-яке реальне число просто тому, що точність числа не збільшується, таким чином, ця конкретна машина не будуватиме її далі.
Це приклади NPTM, які обчислюють деяку кількість. NPTM, що:
1
, потім зупинки. Він обчислює число 1.1.0
, потім зупинки. Він також обчислює число 1.1.0000000
та зберігає друк нулів назавжди. Цей також обчислює число 1.3.14
, потім зупинки. Він обчислює число 3.14.3.14159
та продовжує друкувати цифри. Це обчислює число.-42.
, а потім зупинки. Він обчислює число -42.І це приклади NPTM, які не обчислюють жодної кількості. NPTM, що:
123123123
а потім продовжує друкувати послідовність 123
назавжди. Не обчислює число, оскільки ця нескінченна послідовність не представляє реального числа.1.0.0
а потім зупинки. Це не тому, що ця кінцева послідовність недостатньо сформована.....-..---
а потім зупинки. Це не тому, що і це не добре сформоване реальне число.3.14
, не зупиняється, але також ніколи нічого іншого не друкує. Не обчислює число, оскільки його точність не збільшується з часом.У вас є ідея. Тоді у нас є два класи NPTM: ті, які обчислюють деяку реальну кількість, і ті, які ні.
Проблема з пошуком деякого перерахунку для обчислюваних чисел полягає в тому, що, навіть якщо самі NPTM є підрахунковими, ми не можемо мати процедури, яка відокремлює один вид NPTM від іншого.
Розглянемо визначення лічильного набору: для множини щоб бути підрахунком, повинна існувати якась біективна функція .
Щоб "довести", що обчислювані числа підлічуються, можна спробувати визначити таку функцію з підрахунку NPTM (і це те, що люди часто робили, коли вони вважають, що обчислювані числа підлічуються). Щось на зразок цього:
NPTM є підрахунковими, тому існує бієктивна функція , таким чином, ми можемо назавжди перерахувати всі існуючі NPTM. Отже, так само перерахувати всі обчислювані числа та точно визначити бієктивну функцію, треба просто перерахувати всі NPTM, але порахувати лише ті, які обчислюють деяке дійсне число. Але як ми знаємо, що вона обчислює якесь реальне число?
Ну, ми цього не робимо. Подумайте про машину, яка негайно друкує 1.0
, а потім зупиняє друк і продовжує намагатися вирішити екземпляр проблеми кореспонденції на пост . Якщо вона вирішує проблему, вона зупиняється, тоді машина просто обчислила номер один. Але ця проблема не може бути вирішена, тому вона ніколи не зупиняється, і якщо вона ніколи не зупиняється, вона ніколи не обчислює реальну кількість. Але ми не можемо знати, чи це колись зупиниться, тому що проблема зупинки також не вирішена ! Отже, оскільки немає можливості дізнатися, чи є ця машина, і нескінченно багато інших машин, чи то обчислює, чи не справжнє число, ми не можемо таким чином побудувати / визначити нашу біективну функцію.
Наївний спосіб визначити біекцію не вдається, і довести, що немає ніякого способу зробити це не дуже складно. Як запропонував Юваль Філіус, можна використовувати діагоналізацію.