Я долго думал, стоит ли добавлять еще один ответ. Другие ответы сосредоточены на середине его вопроса (о «полной тьюринге», «тавтологии» и т. Д.). Позвольте мне взять первую и последнюю часть и, следовательно, большую и немного философскую картину:
Но что это значит?
Что значит быть полным по Тьюрингу?
Есть ли способ определить возможности машины Тьюринга, не говоря «возможность имитировать другую машину Тьюринга»?
Неформально говоря, полная целостность по Тьюрингу означает, что ваш механизм может запускать любой алгоритм, о котором вы только могли подумать, независимо от того, насколько он сложный, глубокий, рекурсивный, сложный, длинный (с точки зрения кода), и неважно, сколько будет хранилища или времени. нужно было оценить это. Само собой разумеется , что это удается только тогда , когда проблема может быть вычислен, но если это является вычислимой, она будет иметь успех (остановка).
(NB: чтобы выяснить, почему это «неформально», посмотрите тезис Черча-Тьюринга, который идет в том же духе, с более сложной формулировкой; будучи тезисом, он может или не может быть правильным, хотя. Спасибо @DavidRicherby за указывая на это маленькое упущение в комментарии.)
«Алгоритм» означает то, что мы обычно понимаем как компьютерный алгоритм сегодня; т. е. ряд дискретных шагов, манипулирующих хранилищем, со смешанной некоторой управляющей логикой. Однако он не похож на машину Oracle, т. е. не может «угадывать».
Пример для практического не-тс языка
Если вы запрограммировали себя, вы, вероятно, знаете регулярные выражения, используемые для сопоставления строк с каким-либо шаблоном.
Это один из примеров конструкции, которая не является завершенной по Тьюрингу. Вы можете легко найти упражнения, в которых просто невозможно создать регулярное выражение, соответствующее определенным фразам.
Например (и это, безусловно, раздражало многих программистов в реальных реальных приложениях), теоретически и практически невозможно создать регулярное выражение, соответствующее языку программирования или документу XML: для регулярного выражения невозможно найти структуру блока ( do ... end
или { ... }
на языках; открывающие и закрывающие теги в XML-документах), если им разрешено быть сколь угодно глубокими. Если там есть предел, например, у вас может быть только 3 уровня «рекурсии», тогда вы можете найти регулярное выражение; но если это не ограничено, то это не пойдет.
Поскольку очевидно, что можно создать программу на языке, полном Тьюринга (например, C), для разбора исходного кода (это делает любой компилятор), регулярные выражения никогда не смогут моделировать указанную программу, поэтому по определению они не являются полными по Тьюрингу.
мотивация
Идея машины Тьюринга сама по себе не практична; то есть, конечно, Тьюринг не изобрел его для создания реального компьютера или чего-то в этом роде, в отличие, например, от Чарльза Бэббиджа или фон Неймана. Суть концепции машины Тьюринга в том, что она чрезвычайно проста. Он состоит почти из ничего. Это уменьшает возможные (и фактические) компьютеры до минимума.
Смысл этого упрощения, в свою очередь, заключается в том, что это облегчает размышления над теоретическими вопросами (такими как проблемы остановки, классы сложности и все, с чем теоретическая информатика беспокоится). Одна особенность, в частности, заключается в том, что обычно очень легко проверить, может ли данный язык или компьютер моделировать машину Тьюринга, просто программируя упомянутую машину Тьюринга (что так просто!) На этом языке.
До бесконечности
Обратите внимание, что вам никогда не нужно бесконечное время или память; но и время, и память не ограничены. Они будут иметь максимальное значение для каждого вычисляемого прогона, но нет предела тому, насколько большим может быть это значение. Тот факт, что на реальном компьютере в конечном итоге не хватит оперативной памяти, здесь скрыт; это, конечно, предел для любого физического компьютера, но он также очевиден и не представляет интереса для теоретической «вычислительной мощности» машины. Кроме того, нас не интересует, сколько на самом деле это займет времени. Таким образом, наша маленькая машина может использовать произвольное количество времени и пространства, что делает ее абсолютно непрактичной.
... и дальше
Один поразительный последний пункт, то, что такая простая, простая вещь может сделать все , что любой возможный реальный компьютер мог когда - либо , во всей вселенной, выполняй (только очень медленно) - по крайней мере , насколько мы знаем сегодня.