Ясное, полное, доказательство того, что язык - это язык Тьюринга Конкурирует?

10

Я видел веб-сайты, которые якобы «доказывают», что HTML5 + CSS является Turing Complete.

Я видел сайты, которые якобы «доказывают», что SQL завершен по Тьюрингу.

Я видел множество веб-сайтов, которые якобы «объясняют», что значит быть завершенным по Тьюрингу.

Достаточно!

Где я могу найти книгу (написанную экспертом в области теории вычислимости) или рецензируемую статью (в авторитетном журнале), в которой показано доказательство: «Этот язык XYZ способен описывать вычислительную машину, обладающую той же вычислительной мощью как машина Тьюринга "?

Роджер Костелло
источник
3
Ни один эксперт не собирается писать такую ​​статью, потому что это было бы бессмысленно.
Андрей Бауэр
Но есть документы, которые делают это. Рассмотрим схемы, нечувствительные к квази-задержке, полные по Тьюрингу, которые имеют доказательство по построению.
Дэн Д.
2
Я съем свою шляпу, если вы сможете найти рецензируемый документ, в котором есть подробное доказательство того, что HTML5 + CSS, или SQL, или PHP завершены по Тьюрингу.
Андрей Бауэр
@andrej попробуй это. достаточно близко? Версия 2.0 XSLT завершена по Тьюрингу: доказательство, основанное исключительно на преобразовании . может быть, просто съешь свои овощи: p
vzn
смотрите также, что делает языковой тест полным , programmers.se
vzn

Ответы:

12

Каждый язык, который может реализовать два счетчика (то есть два регистра, которые могут хранить два произвольно больших целых числа) и программу, созданную с помеченной последовательностью этих двух элементарных инструкций, является завершением Тьюринга:C1,C2

  • ДОБАВИТЬ в счетчик , инструкция GOTOC I I J1CiIj
  • СУБТРАКТ из счетчика если и инструкция GOTO ; в противном случае (если ) GOTO инструкцияC i C i > 0 I j C i = 0 I k1CiCi>0IjCi=0Ik

Результат доказан в:

Марвин Л. Минский, "Рекурсивная неразрешимость проблемы Поста о метке и других темах в теории машин Тьюринга" (1961)

Не забывайте, что вычислительная модель (в вашем случае язык программирования + устройство, выполняющее программы, написанные на этом языке ) может считаться завершенной по Тьюрингу, только если она поддерживает доступ к неограниченному объему памяти (т. Е. Пространству) или может хранить ( в некоторой форме) сколь угодно большие целые числа. Реализация языка программирования на реальном компьютере эквивалентна линейному ограниченному автомату .

Вы также можете найти много ссылок на страницах Википедии на модели RAM и модели RASP .

Наконец, хорошая книга, посвященная эквивалентности различных моделей вычислений:

«Модели вычислений: введение в теорию вычислимости», Марибель Фернандес

Вор
источник
«Не забывайте, что язык программирования можно считать полным по Тьюрингу, только если он поддерживает доступ к бесконечной памяти». Следовательно, не может быть реализации языка полного по Тьюрингу? Это ваш вывод? Или вы хотели сказать, что все (большинство) языков, которые мы используем, являются Turing Complete, потому что это требование легко выполнить? Оба вывода верны из вашего ответа, как он есть сейчас.
Бакуриу
@Bakuriu: действительно, предложение немного двусмысленно; Я имею в виду только то, что вычислительную модель можно считать полной по Тьюрингу, если - в некоторой форме - она ​​позволяет использовать неограниченное хранилище. Большинство языков программирования являются полными по Тьюрингу, потому что в своих (синтаксических) спецификациях они не имеют ограничений на размер переменных или указателей, но их реализации ограничены; см., например, C's <limit.h>. Таким образом, даже если у вас есть компьютер с неограниченной памятью, на котором выполняется реализация C, вы не сможете использовать эту память, если не предоставите «дополнительный механизм», который не является частью языка.
Вор
Технически, реализации языка программирования на реальных компьютерах даже не являются настоящим воплощением автоматов с линейной привязкой, поскольку они не могут принимать произвольные CSL ... по той же причине, по которой компьютеры не эквивалентны машинам Тьюринга, т. Е. Недостаточно Память. Сколько памяти потребуется машине для принятия контекстно-зависимого языка ? Я полагаю, вы могли бы возразить, что вы сможете решить ее, если у вас будет достаточно места для записи вопроса, но это не меняет того факта, что мы не можем сделать физическую модель эквивалентной LBA ...{w.ww{0,1}}
Patrick87
3

Два наиболее широко используемых учебника по теории вычислимости и сложности:

Майкл Сипсер: Введение в теорию вычислений , 2 / е, Cengage, 2005.

Джон Э Хопкрофт; Джеффри Д. Уллман: Введение в теорию автоматов, языков и вычислений , Эддисон-Уэсли, 1979.

Существует также прекрасная философская монография для непрофессионалов, которая прорабатывает технические детали теории вычислимости без формальных доказательств.

Дуглас Хофштадтер: Гёдель, Эшер, Бах , Basic Books, 1979.

Наконец, лучшим введением в вычислимость может стать книга-головоломка известного логика:

Раймонд Смуллян: «Леди или тигр и другие логические головоломки» , «Пингвин», 1983. (Теперь в недорогом выпуске Dover, 2009 г.)

(Он начинает с множества головоломок, основанных на парадоксе лжеца, а затем прорабатывает создание самореференциального утверждения в виде пазла в стиле Шерлока Холмса о таинственной запертой коробке.)

Блуждающая логика
источник