Что такое практические инструкции для оценки “полноты по Тьюрингу” языка?

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

46
задан Community 23 May 2017 в 12:17
поделиться

12 ответов

Вам нужна некоторая форма динамической конструкции выделения (malloc или new, или cons сделает), и или рекурсивные функции или некоторый другой способ записать бесконечный цикл. Если Вы имеете тех и можете сделать что-либо вообще интересное, Вы почти наверняка полны по Тьюрингу.

лямбда-исчисление эквивалентно в питании Машине Тьюринга, и если Вы реализуете лямбда-исчисление, это - на самом деле симпатичная забава, пишущий программы лямбда-исчисления. Путь [еще 113] забава, чем запись программы для Машины Тьюринга!

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

44
ответ дан umlcat 26 November 2019 в 20:16
поделиться

'полнота по Тьюрингу' описывает свойство способности выразить любое произвольное алгоритмическое вычисление, , который был точкой Машина Turing's во-первых. Язык или логическая система могут быть описаны как 'полные по Тьюрингу', если это имеет это свойство. С практической точки зрения все языки программирования общего назначения - и удивительно большое количество особого назначения - могут сделать это для соответственно свободного определения (см. ниже).

Однако строгое определение полноты по Тьюрингу подразумевает способность безграничного хранения, которая, конечно, не физически возможна. Учитывая это, никакая реальная машина не может возможно быть полной по Тьюрингу, но это ограничение обычно ослабляется (по крайней мере, неофициально) при приписывании полноты по Тьюрингу языку программирования. Один тривиальный тест полноты по Тьюрингу для языка - может ли язык использоваться для реализации средства моделирования Машины Тьюринга.

примером широко распространенной системы, которая не полна по Тьюрингу, является Алгебра отношений, теоретическое основание позади SQL, как описано в статье Codd реляционная модель А для крупных банков совместно используемых данных. Алгебра отношений имеет свойство геделевская Полнота , что означает, что это может выразить любое вычисление, которое может быть определено с точки зрения исчисление предикатов первого порядка (т.е. обычные логические выражения). Однако это не полно по Тьюрингу, поскольку это не может выразить произвольного алгоритмического вычисления.

Примечание, что большинство, если не все все практические диалекты SQL расширяют чистую реляционную модель с помощью процедурных конструкций до такой степени, что они полны по Тьюрингу по определению как обычно, относилось к языкам программирования. Однако отдельный SQL-запрос в общем и целом не.

Некоторые более вопиющие примеры полных по Тьюрингу проблемно-ориентированных языков TeX и sendmail.cf, . В последнем случае существует на самом деле пример известного выхода кого-то использующего sendmail.cf к , реализуют универсальное средство моделирования Машины Тьюринга.

31
ответ дан ConcernedOfTunbridgeWells 26 November 2019 в 20:16
поделиться

Если можно записать Brainf$ & интерпретатор # на Вашем языке, это полно по Тьюрингу. LOLCODE оказались полным по Тьюрингу точно этим способом.

10
ответ дан Luke Woodward 26 November 2019 в 20:16
поделиться

Примеры языков, которые не полны по Тьюрингу часто, имеют ограниченные циклы , как:

for i=1 to N {...}

, но отсутствие неограниченный циклы, которые проверяют более общее условие, как:

while bool_expr {...}

, Если все возможные конструкции цикличного выполнения ограничены, Ваша программа, как гарантируют, завершится. И, хотя безусловная гарантия завершения потенциально полезна, это - также признак, что язык не полон по Тьюрингу.

Примечание также, что, закрепляя весь возможный конструкции цикличного выполнения могут быть трудными; например, я - вполне уверенные шаблоны C++, не были предназначены для Тьюринга...

8
ответ дан comingstorm 26 November 2019 в 20:16
поделиться

Я не уверен, существует ли "минимальный набор функций", но доказать, что язык полон по Тьюрингу, только необходимо доказать, что это может эмулировать другую полную по Тьюрингу систему (не обязательно Машина Тьюринга), пока другая система, как известно, полна по Тьюрингу. http://en.wikipedia.org/wiki/Turing_complete#Examples имеет целый список полных по Тьюрингу систем. Некоторые из них более просты, чем Машины Тьюринга.

7
ответ дан Nate879 26 November 2019 в 20:16
поделиться

Я хотел бы добавить один протест к тому, что сказал Norman Ramsey: Машина Тьюринга имеет бесконечную память и следовательно языки программирования, которые считаются полными по Тьюрингу, только так находятся под предположением, что память также бесконечна.

3
ответ дан Christian Lindig 26 November 2019 в 20:16
поделиться

Я не могу помнить видеть что-либо как минимальные функции для полноты по Тьюрингу. Однако, если Ваш язык поддерживает циклы и условные переходы, возможности, что это полно по Тьюрингу, хороши. Однако единственным способом доказать его является все еще к similate Машина Тьюринга или другой полный по Тьюрингу язык.

2
ответ дан PolyThinker 26 November 2019 в 20:16
поделиться

Если можно реализовать Машину Тьюринга (насколько они могут быть реализованы, поскольку они - математические конструкции с неограниченной памятью [размер ленты бесконечен]), тогда, можно быть уверены, что это полно по Тьюрингу.

Некоторые признаки:

  • можно проверить память и управлять ею на основе текущего значения, а также использования ее к потоку управляющей программы.
  • , Что память может быть выделенной памятью, строки, которые Вы в состоянии добавить к, стек, на котором можно выделить память через рекурсию и т.д.
  • , Процесс выполнения программы может быть посредством повторения или через основанную на выборе рекурсию.
1
ответ дан 26 November 2019 в 20:16
поделиться

..., чем в практических последствиях того, чтобы быть полным по Тьюрингу.

я сомневаюсь, что существуют любые практические последствия того, чтобы быть полным по Тьюрингу.

при рассмотрении некоторых примеров полных по Тьюрингу машин, например, оригинал Машина Тьюринга , Вы будете видеть, что так далеко от того, чтобы быть полезным для реальных вычислений, что понятие должно только представлять теоретический интерес.

-4
ответ дан David Norman 26 November 2019 в 20:16
поделиться

Brainfuck является полным по Тьюрингу и имеет только циклические структуры и увеличение / уменьшение памяти, так что этого достаточно.

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

Скорее всего, ваша программа не имеет ничего общего с лямбда-исчислением, поэтому для практического ответа минимум должен быть

  1. Способ для записи в переменную
  2. Способ чтения в переменную
  3. Форма условного перехода (оператор if, цикл while и т. д.)
3
ответ дан 26 November 2019 в 20:16
поделиться

Любой язык, способный к незавершению, в значительной степени является полным по Тьюрингу. Вы можете сделать язык неограничивающим, предоставив ему неограниченные циклические структуры (например, циклы While или Goto, который может достичь себя снова) или предоставив ему общую рекурсию (позволив функции вызывать саму себя без ограничений).

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

Настоящий вопрос заключается в том, «что в этом хорошего?» Если ваш язык будет использоваться в определенной области для решения конкретных проблем, может быть лучше найти способ сформулировать решения на языке, который не является полным по Тьюрингу, и, таким образом, гарантированно дать ответ.

Вы всегда можете добавить полноту по Тьюрингу, написав «Сделайте это, то или что-то еще; но сделайте это с результатом, предоставленным X» на любом другом языке полного Тьюринга, где X предоставляется не-Тьюринговым полным языком.

Конечно, если вы хотите использовать только один язык, возможно, лучше использовать Полный Тьюринг ...

1
ответ дан 26 November 2019 в 20:16
поделиться

Вы можете попробовать эмулировать OISC (компьютер с одним набором команд). Если вы можете эмулировать там одну из инструкций, то, поскольку эта единственная инструкция может использоваться для составления полной машины Тьюринга, вы доказали, что ваш язык также должен быть полным по Тьюрингу.

1
ответ дан 26 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: