Суть этого ответа в том, что машины Тьюринга могут имитировать все, что мы можем запрограммировать, и мы делаем программные вычисления на бесконечных объектах и с ними.
Это второй ответ, фокусирующийся больше на конкретном задаваемом вопросе, чем на общей теоретической структуре, которая оправдывает ответ, и он будет окончательно необходим для ответа на более общее название вопроса. Он полностью совместим с моими предыдущими ответами на вопросы ОП. Что такое алгоритм? и машины Тьюринга предполагают что-то бесконечное в какой-то момент? Ответы, в которых я разработал более теоретический контекст. Это можно рассматривать как ответ на оба вопроса.
Машины Тьюринга обладают способностью иметь дело с бесконечностью , как и все полные вычислительные модели Тьюринга, но только со счетной бесконечностью. Наша проблема в том, что мы можем наблюдать только часть этой бесконечности, но мы должны рассмотреть всю ее, поскольку та часть, которую мы можем наблюдать, не ограничена.
Другая проблема состоит в том, что мы можем иметь дело только с конечно определенными объектами. На самом деле, вся структура науки, какой мы ее знаем, рушится, если мы рассматриваем сущности, которые не определены конечным образом, поскольку становится невозможным проверить согласованность определений, даже узнать, что это за определения, поскольку мы можем получить доступ только к их части в конечное время.
Возможно, есть еще одна фундаментальная проблема, которая в некоторой степени похожа на тот факт, что замыкание в бесконечном объединении определяет любой набор, который вы хотите, если только вы не можете соответствующим образом ограничить то, что разрешено в таком объединении. Но я не уверен, что полностью понимаю эту проблему.
Как я уже сказал, машины Тьюринга действительно способны справляться с бесконечностью . Я противоречу другим хорошо отозванным ответам некоторых высокопоставленных пользователей, которые должны знать, о чем они говорят по такой элементарной теме.
Проблема в том, что Тьюринг выбрал очень элементарную модель вычислений для достижения своей теоретической цели. Чем проще, тем лучше. Это более продвинутые / сложные модели вычислений, в значительной степени то же самое, что машинный язык для программирования: что-то очень непонятное, когда вы не можете распознать ни одну из концепций, которые имеют смысл в программировании высокого уровня. Дело в том, что, как и машинный язык, ТМ может имитировать гораздо больше, чем может выразить напрямую.
23rd Но это все равно будет часто реализовываться как бесконечные вычисления, которые искусственно останавливаются при достижении правильного ответа.
На самом деле, все пользователи, которые утверждают, что в ТМ все конечно, но не ограничено, весьма осторожны, чтобы добавить, что они рассматривают машины Тьюринга в своем стандартном определении . Проблема заключается в том, что стандартное определение - это всего лишь устройство, упрощающее теорию, но в значительной степени неуместное при попытке понять вычислительные структуры.
На самом деле, единственное, что имеет значение в вычислениях, это то, что все должно быть определено конечным образом вычислимо, а не быть конечным .
Мы предполагаем, что машина Тьюринга должна быть конечным объектом. Но это неправда. Вы можете определить модель машины Тьюринга, используя вторую ленту, которая доступна только для чтения и содержит функцию, сведенную в таблицу для всех целочисленных значений, без каких-либо ограничений. Это бесконечно. Но это не дает вам никакой дополнительной вычислительной мощности, пока содержимое этой ленты определено вычислительно (вычислимость подразумевает, что оно определено конечным образом). Дополнительную ленту вполне можно заменить машиной ТМ, встроенной в другую, и она даст ответы вместо того, чтобы искать их на дополнительной ленте. С более высокого уровня разница не видна.
С практической точки зрения, мы могли бы иметь fact
машину Тьюринга, вычисляющую факториалы и табулировать их на дополнительной ленте, в то время как другая TM использовала бы табулированный факториал с дополнительной ленты, просто ожидая на первой ТМ, когда в табуляции все еще отсутствуют некоторые данные. запись. Но вторая машина предполагает, что содержимое ленты в конечном итоге бесконечно. Табличная машина даже не должна работать все время, но должна возобновлять вычисления всякий раз, когда данные запрашиваются из таблицы и там не находятся.
Возвращаясь к вопросу, основное различие между неограниченными целыми числами и бесконечной таблицей состоит только в том, что целые числа являются конечными, неограниченными, но полностью вычисляются за конечное время. Бесконечная таблица вычисляется бесконечно, конечна, но все время растет до бесконечности. Это не проблема, но есть разница. Бесконечные объекты доступны только через конечные приближения, но они бесконечны. В этом смысле вычислимые иррациональные числа являются бесконечными объектами, по крайней мере, для их представления в виде двоичных чисел.
Все алгоритмы определены в контексте некоторой математической теории. И поиск таблицы вместе с бесконечной таблицей - это алгоритм. Но это алгоритм в математической теории, имеющий конечно определенный бесконечный набор аксиом, которые определяют (а не интенсивно) значения функции, которую она аксиоматизирует для каждого целочисленного аргумента. (см. мой ответ на ваш предыдущий вопрос ). Тогда это всегда законно, так как вы всегда можете добавить доказуемо верные утверждения к аксиомам теории.
Утверждения усул, воспроизведенные в вашем текущем вопросе, на мой взгляд, неверны (хотя все также является вопросом определения). В своем ответе он сделал вывод , что вы не воспроизвели, что использование бесконечной таблицы не может считаться алгоритмом, поскольку она может быть реализована только с помощью неоднородной модели вычислений, с помощью набора различных машин и, следовательно, такого использует « не имеют конечного описания, которое может быть реализовано для решения« целой »проблемы при любом размере вводаπ
Способ, с помощью которого такие бесконечные объекты вычисляются на практике, заключается в ленивой оценке , вычислении любой необходимой части в любое время и возобновлении вычисления для некоторых остальных, когда потребуется больше. Это именно то, что предлагается выше, когда
fact
машина лениво вычисляет факториал для хранения в таблице всякий раз, когда из таблицы требуется больше данных.
В некотором смысле это, кажется, подтверждает утверждение (в ответе DanielV ), что кодовое пространство должно быть конечным, поскольку ленивая оценка будет фактически основана на некотором конечном коде. Но вычислимость - это широко распространенная игра кодирования, так что, среди прочего, различие кода от данных всегда в значительной степени в глазах смотрящего. Действительно, многие современные языки программирования не имеют большой разницы между интенсиональной
и экстенсиональной спецификацией значений, и денотационная семантика на самом деле не отличает «2 + 2» от «4». Семантика - это то, о чем мы говорим, когда задаем такой вопрос, как « Что такое X ? ».
Такое представление о конечности кода, также рассматриваемое как статическое, является еще одной причиной, по которой бесконечная таблица (рассматриваемая как часть кода) не рассматривается на равных условиях с неограниченными целыми числами, используемыми в качестве данных. Но это еще одна иллюзия, которая не переживает известную практику программирования в метапрограммировании , рефлексивных языках и использовании eval
функции. На этих языках код может быть расширен без ограничений самой запущенной программой, пока компьютер работает. Действительно, можно рассмотреть машины Тьюринга, которые изменяют свои собственные правила перехода, увеличивая их количество без ограничений. Это довольно близко к тому, как работают машины Universal Turing.
При разработке теоретических основ всегда существует противоречие между простотой и ясностью или выразительностью. Простота часто упрощает анализ структуры, особенно когда речь идет о проверке конкретных свойств или сведении ее к другим структурам. Но это часто неудобно для выражения концепций высокого уровня, которые затем должны быть закодированы. Мы не программируем на машинах Тьюринга, но на языках высокого уровня, которые намного более выразительны и заметны, и в то же время могут стереть некоторые барьеры, такие как различие между кодом и данными, на основе семантической эквивалентности. Машины Тьюринга кажутся простыми, но могут выходить далеко за рамки их элементарного определения.