Коротше кажучи : машина Тьюрінга може робити (кінцево вказані) нескінченні обчислення на (кінцево вказаних) нескінченних даних і давати (кінцево вказані) нескінченні результати. Основна ідея полягає в тому, що ці нескінченності можуть бути визначені як межа кінцевих сутностей, визначена математично відповідним чином. Це основа математичної семантики обчислень. Якщо ви розглядаєте програми, а не машини Тюрінга, ці програми також можуть містити (нескінченно вказані) нескінченні структури даних. Випадок табличної функції fact
як можливого алгоритму аналізується врешті, як програма, або як модель ТМ, з підказкою щодо зв’язку з ледачою оцінкою нескінченних об'єктів.
З багатьма деталями
Що стосується вашого остаточного запитання, TM не обчислює довільні числа, а символічне подання цих чисел як довільно (необмежених) довгих рядків символів, що їх представляють. Правильно кодуючи модуль, правильно, що вони можуть порівнювати чи робити арифметику з такими числами через ці уявлення.
Але оригінальне питання стосується ролі нескінченності в машинах Тюрінга взагалі.
Поширена відповідь на це питання полягає в тому, що машини Тюрінга ніколи не мають справу з нескінченністю. Вони визначені кінцево, і все, що вони обчислюють, обчислюється в кінцевий час на кінцевій частині стрічки (отже, достатньо буде кінцевої стрічки, що є більшою). Щоправда, так це те, що вимога часу до простору ТМ не обмежена, що не є нескінченним.
Отже, будь-яка відповідь, обчислена ТМ, може бути обчислена також автоматом з кінцевим станом (FSA), що є «певною мірою» одним із способів розгляду таблиць. Складність полягає в тому, що деякі розміри вводу (це майже завжди доходить до цього, якщо тільки зчитувати вхід) перевищуватимуть розмір автомата. Але тоді ми можемо просто використовувати більшу. Отже, якщо ми хочемо розглянути необмежений розмір вводу, нам потрібна нескінченна послідовність FSA, яка може зробити обчислення. Насправді нам може знадобитися машина з кінцевим станом трохи складніше, ніж традиційна FSA, оскільки може бути обчислений вихід (а не відповідь "так-ні"), але, мабуть, повинен бути перетворювач кінцевого стану.
Отже, якщо ми розглядаємо проблему, яка має нескінченний набір примірників, таких як обчислення GCD або просто використання арифметики на цілі числа довільної величини, ми бачимо, що нескінченність повертається до нас через задню двері, як ця нескінченна набір FSA.
Але є ще одна проблема. Наведений вище аналіз працює лише тоді, коли ми враховуємо обчислення, які закінчуються результатом. Але не всі ТМ роблять це. Деякі можуть перерахувати членів нескінченного набору. Як правило, це стосується TM, який обчислює десяткові знаки і продовжує додавати нове безстроково. Звичайно, він обчислює лише скінченну відповідь у кінцевий час, але те, що нас цікавить, це насправді нескінченна послідовність, що створюється нескінченним обчисленням. Зауважте, що зараз у нас є два аспекти нескінченності: нескінченність обчислення та нескінченність результату (тобто деяких обчислених даних). Насправді це навіть може призвести до розгляду нескінченних даних ... але нехай ми ігноруємо це ускладнення, яке стосується необмежених потоків даних. Зауважте також, що такі обчислення, які дають результат, відмінний від такπ
Потім знову ми можемо замінити це нескінченною послідовністю скінченних обчислень кінцевими машинами. Але чи обманюємо?
З фізичної точки зору, це найкраще, що ми можемо зробити. Ми знаємо лише, як будувати кінцеві машини, принаймні відповідно до сучасного стану фізики, який, як очікується, не зміниться в цьому питанні найближчим часом.
Але як ми можемо впоратися з цими нескінченностями послідовно і простежуваним чином з математичної точки зору.
Якщо ви розглядаєте нескінченний набір FSA, який може якось співпрацювати для обчислення нескінченного набору відповідей, ви не можете це зробити довільно. Вам потрібні деякі гарантії, щоб переконатися, що те, що ви робите, має сенс. Добре відомо, що ви можете тривіально будувати будь-який набір з нескінченним об'єднанням регулярних множин, власне, з нескінченним об'єднанням однотонних множин. Тож розгляд довільних нескінченних об'єднань автоматів без будь-яких обмежень не приведе вас нікуди. Ви навіть розглядаєте в тому ж наборі автомати, які дають невідповідні відповіді.
Те, що вам справді хочеться, це визначити поняття послідовності. Але для цього потрібні певні запобіжні заходи. Припустимо, ви використовуєте нескінченну послідовність автомати для імітації ТМ, яка відповідає "так" або "ні", або не припиняється. Проблема полягає в тому, що FSA завжди зупинятиметься з відповіддю, наприклад, так чи ні. Але якщо ви використовуєте FSA, який насправді не має великого розміру для обраного входу, що йому відповідати. І так, і ні, зарезервовано для випадків, коли FSA фактично припинила обчислення TM, і використання однієї з цих відповідей з незавершеними обчисленнями призвело б лише до плутанини. Що ви хочете - це відповідь, яка говорить: " Вибачте, я занадто маленький і не можу сказати. Будь ласка, спробуйте з більшим хлопцем у сім'ї ". Іншим словом ви хочете відповіді, наприклад,
переповнення чи не знаєте. Насправді його семантики називають " невизначеним " або також " дном " і часто пишуться " ".⊥
Тож вам потрібні автомати, які мають 3 види станів: приймаючи, не приймаючи та невизначаючи. Невизначений стан може розглядатися як стан, що стоїть для відсутньої частини автомата, яка змушує обчислення зупинятися. Отже, коли обчислення зупиняються, залежно від стану, на якому він зупиняється, ви отримуєте відповідь " так" , " ні" або " невизначено" .
Тепер ви бачите, що ви хочете - це нескінченні послідовності автоматизмів, які є послідовними . І так, і ні, не відповідають
визначенню , але так , не відповідають " ні" . Тоді два автомати є послідовними, коли вони дають послідовні відповіді на одному вході.
Це можна розширити на автомати, які обчислюють відповіді іншого типу. Наприклад, якщо вони обчислюють кольори, такі як червоний, синій, зелений ..., ви можете додати невизначений колір, який відповідає всім іншим. Якщо відповідь - це нескінченна послідовність цифр, таких як , то кожну цифру можна послідовно та незалежно замінити невизначеною, щоб відповідав і з
, але останні два не відповідають . Власне, в цьому сенсі - це не наближенняπ3.14⊥⊥⊥⊥...3.1415⊥⊥⊥⊥...⊥.⊥5159⊥⊥⊥⊥...3.1416⊥⊥⊥⊥...3.1416⊥⊥⊥⊥...π. Ми говоримо, що відповідь краще визначити, ніж іншу, коли вона містить всю інформацію, яку можна знайти в іншій, а можливо і більше. Це насправді часткове впорядкування.
Я не буду більше розвивати ці теоретичні аспекти, що трохи незручно, коли базується на машинах Тьюрінга. Річ у тім, що ці поняття призводять до думки, що обчислювальні області (будь то дані чи машини) утворюють математичні структури, такі як ґрати, в яких нескінченний об'єкт може бути адекватно визначений як межі нескінченно зростаючих (тобто кращих і краще визначених) послідовностей кінцеві об'єкти. Визначення нескінченних послідовностей вимагає ще деякого апарату та поняття наступності. Це принципово те, що стосується теорії семантики Дана Скотта, і вона дає дещо інший погляд на поняття обчислюваності.
Тоді машини Тьюрінга або інші формальні пристрої, які можуть робити "нескінченні обчислення", можуть бути визначені як межі послідовностей кінцевих наближень машин, які краще і краще визначаються. Те саме стосується будь-яких даних, з якими обчислюються машини, незалежно від того, вхід чи вихід.
Найпростіший документ, який я коли-небудь читав з цього приводу, - це рукописний набір лекційних записок Дани Скотт, який часто називають амстердамським конспектом лекцій. Але я не зміг її знайти в Інтернеті. Будь-який вказівник на копію (навіть неповну, як я маю її частину) буде вітатися. Але ви можете переглянути інші ранні публікації Скотта, такі як «
Очерк математичної теорії обчислень» .
Повернімося до початкового прикладу питання
Ці концепції наближення застосовуються як до даних, так і до програм. Функція fact
визначається рекурсивно, що означає, що це найменш фіксована точка функціоналу, яка може бути використана для обчислення послідовності, що конвергує кінцеве наближення fact
. Ця послідовність дедалі більше визначених кінцевих функцій переходить у нескінченну сутність, яку ви називаєте функцією fact
.
Але якщо ви використовуєте пошук масиву, ви можете зробити точно так само, коли ваш код містить все більші та більші таблиці, які є усіма кінцевими наближеннями нескінченної таблиці попередньо обчислених значень fact
. Кожен з цих масивів може насправді дати відповідь на будь-яке ціле число, але відповідь може бути ( невизначений ), коли таблиця недостатньо визначена (достатньо велика). Алгоритм пошуку таблиці також повинен визначатися послідовністю наближень, оскільки він обчислюється з нескінченною таблицею.⊥
Це правда, що якщо розглядати елементарну модель розрахунку ТМ, такий нескінченний масив не може бути виражений у цьому формалізмі. Це не означає, що це не мало б сенсу. Машина Тьюрінга може мати другу стрічку, яку слід ініціалізувати з табличними значеннями деяких функцій, таких як fact
. Це не змінює обчислювальну потужність ТМ, якщо ця функція є обчислювальною, тобто до тих пір, поки таблиця може бути ініціалізована нескінченним обчисленням іншої ТМ, яка може обчислити всі пари аргументів-значень для відповідної функції.
Але на практиці ви не можете виконати нескінченне обчислення. Тому правильний спосіб зробити це - ліниво обчислити таблицю, тобто заповнити записи лише за потреби. Це саме те, що робиться з запам'ятовуванням, це відповідь, яку я дав вам із різними обґрунтуваннями на ваше попереднє запитання.