Что такое завершение по Тьюрингу?

Что означает выражение «Turing Complete»?

Можете 9X_theory ли вы дать простое объяснение, не вдаваясь 9X_theory в слишком много теоретических подробностей?

670
1

  • Некоторые очень хорошие ссылки на [этот вопрос SO] (http://stackoverflow.com/questions ...
10
Общее количество ответов: 10

Ответ #1

Ответ на вопрос: Что такое завершение по Тьюрингу?

Вот самое краткое объяснение:

Система Turing 9X_turing Complete означает систему, в которой может 9X_turing-machines быть написана программа, которая найдет 9X_turing ответ (хотя и без каких-либо гарантий в 9X_theory отношении времени выполнения или памяти).

Итак, если 9X_turing кто-то говорит: «Моя новая вещь — завершение 9X_turing-machines по Тьюрингу», это означает, что в принципе 9X_theory (хотя часто и не на практике) его можно 9X_turing использовать для решения любой вычислительной 9X_turing-complete задачи.

Иногда это шутка... парень написал 9X_turing-complete симулятор машины Тьюринга на vi, так что 9X_turing можно сказать, что vi - единственная вычислительная 9X_turing-machines машина, когда-либо нужная в мире.

492
6

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

Ответ #2

Ответ на вопрос: Что такое завершение по Тьюрингу?

Вот простейшее объяснение

Алан Тьюринг создал машину, которая может 9X_turing взять программу, запустить ее и показать 9X_theory какой-то результат. Но тогда ему пришлось 9X_turing создавать разные машины для разных программ. Поэтому 9X_turing-machines он создал «универсальную машину Тьюринга», которая 9X_turing-complete может взять ЛЮБУЮ программу и запустить 9X_turing-machines ее.

Языки программирования похожи на эти 9X_turing машины (хотя и виртуальные). Они берут программы 9X_turing и запускают их. Теперь язык программирования 9X_theory называется «завершенным по Тьюрингу», если 9X_theory он может запускать любую программу (независимо 9X_turing-machines от языка), которую может запустить машина 9X_turing-machines Тьюринга при наличии достаточного количества 9X_turing-machines времени и памяти.

Например. Допустим, есть 9X_turing-machines программа, которая складывает 10 чисел. Эту 9X_turing-complete программу легко запустить на машине Тьюринга. Но 9X_turing-machines теперь представьте, что по какой-то причине 9X_turing-complete ваш язык программирования не может выполнять 9X_turing-machines такое же дополнение. Это сделало бы его 9X_theory «неполным по Тьюрингу» (так сказать). С 9X_theory другой стороны, если он может запускать 9X_turing-complete любую программу, которую может запустить 9X_turing-machines универсальная машина Тьюринга, то он завершен 9X_theory по Тьюрингу.

Большинство современных языков 9X_theory программирования (например, Java, JavaScript, Perl 9X_turing-complete и т. д.) являются полными по Тьюрингу, поскольку 9X_turing-machines каждый из них реализует все функции, необходимые 9X_theory для запуска программ, такие как сложение, умножение, условие 9X_turing if-else, операторы возврата, способы хранения 9X_theory / извлекать / стирать данные и т. д.

Обновление: вы 9X_turing-machines можете узнать больше в моем сообщении в 9X_theory блоге: "JavaScript Is Turing Complete" — Explained

300
3

  • @MichaelIV У туристической машины тоже не было файловой системы / потоков. JS полн ...

Ответ #3

Ответ на вопрос: Что такое завершение по Тьюрингу?

Неформальное определение

Полный язык Тьюринга - это язык, который 9X_theory может выполнять любые вычисления. Church-Turing Thesis утверждает, что 9X_turing любое выполнимое вычисление может быть выполнено 9X_turing-machines машиной Тьюринга. Turing machine - это машина с бесконечной 9X_turing-machines оперативной памятью и конечной «программой», которая 9X_theory определяет, когда она должна читать, писать 9X_turing-machines и перемещаться по этой памяти, когда она 9X_theory должна завершиться с определенным результатом 9X_turing-machines и что делать дальше. Входные данные машины 9X_turing-machines Тьюринга перед запуском помещаются в ее 9X_turing-complete память.

Что может сделать язык НЕ полным по Тьюрингу

Машина Тьюринга может принимать решения на основе того, что она видит в памяти. "Язык", который поддерживает 9X_turing только +, -, * и / для целых чисел, - не полная 9X_turing по Тьюрингу, потому что она не может сделать 9X_theory выбор на основе вводимых данных, но машина 9X_turing Тьюринга может.

Машина Тьюринга может работать вечно - если бы мы взяли Java, Javascript 9X_turing или Python и убрали возможность выполнять 9X_theory любой цикл, GOTO или вызов функции, это 9X_theory не было бы полным по Тьюрингу. потому что 9X_theory он не может выполнить произвольное вычисление, которое 9X_turing-complete никогда не завершится. Coq - это средство доказательства 9X_turing-machines теорем, которое не может выражать программы, которые 9X_turing-machines не завершаются, поэтому он не завершен по 9X_turing Тьюрингу.

Машина Тьюринга может использовать бесконечную память. Язык, который был в точности 9X_turing похож на Java, но прекратил бы свою работу, если 9X_turing бы он использовал более 4 гигабайт памяти, не 9X_turing-complete был бы полным по Тьюрингу, потому что машина 9X_turing-complete Тьюринга может использовать бесконечная 9X_turing-complete память. Вот почему мы не можем на самом 9X_turing-machines деле построить машину Тьюринга, но Java по-прежнему 9X_turing-complete является полным языком Тьюринга, потому 9X_turing-machines что язык Java не имеет ограничений, препятствующих 9X_theory использованию бесконечной памяти. Это одна 9X_theory из причин, по которой регулярные выражения 9X_turing-machines не являются полными по Тьюрингу.

Машина Тьюринга имеет оперативную память. Язык, который 9X_turing-machines позволяет работать с памятью только с помощью 9X_theory операций push и pop в стеке, не будет полным по 9X_turing-machines Тьюрингу. Если у меня есть «язык», который 9X_turing считывает строку один раз и может использовать память 9X_turing-complete только путем нажатия и извлечения из стека, он 9X_turing может сказать мне, имеет ли каждый ( в строке 9X_theory свой собственный ) позже, нажав, когда он 9X_theory увидит (, и выскочит, когда увидит ). Однако 9X_turing-complete он не может сказать мне, имеет ли каждый 9X_turing-complete ( свой собственный ) позже и каждый [ позже 9X_turing имеет свой собственный ] (обратите внимание, что 9X_theory ([)] соответствует этим критериям но ([]] нет). Машина 9X_turing-machines Тьюринга может использовать свою оперативную 9X_theory память для отслеживания () и [] по отдельности, но 9X_turing-complete этот язык с одним стеком не может.

Машина Тьюринга может моделировать любую другую машину Тьюринга. Машина 9X_turing-complete Тьюринга, если ей дана соответствующая «программа», может 9X_turing взять «программу» другой машины Тьюринга 9X_turing и смоделировать ее при произвольном вводе. Если 9X_turing-machines бы у вас был язык, на котором запрещено 9X_turing-complete реализовывать интерпретатор Python, он не 9X_theory был бы полным по Тьюрингу.

Примеры полных языков по Тьюрингу

Если ваш язык 9X_turing-complete имеет бесконечную оперативную память, условное 9X_turing-machines выполнение и некоторую форму повторного 9X_turing-machines выполнения, вероятно, он завершен по Тьюрингу. Существуют 9X_theory более экзотические системы, которые могут 9X_turing-machines достичь всего, что может машина Тьюринга, что 9X_theory также делает их полными по Тьюрингу:

  • Нетипизированное лямбда-исчисление.
  • Игра жизни Конвея
  • Шаблоны C++
  • Пролог
133
5

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

Ответ #4

Ответ на вопрос: Что такое завершение по Тьюрингу?

От wikipedia:

Полнота по Тьюрингу, названная в честь 9X_turing-complete Алана Тьюринг, знаменателен тем, что каждый правдоподобный 9X_theory дизайн для вычислений устройство до сих 9X_turing-machines пор продвинутое может быть эмулировано универсальной 9X_turing машиной Тьюринга — наблюдение, получившее 9X_turing-machines название Тезис Черча-Тьюринга. Таким образом, машина, которая 9X_turing может выступать в качестве универсальной Машина 9X_turing-machines Тьюринга в принципе может выполнить любой 9X_turing-complete расчет, который любой другой на что способен 9X_theory программируемый компьютер. Однако это 9X_turing не имеет никакого отношения к усилия, необходимые 9X_turing для написания программы для машины, время 9X_turing-complete это может занять чтобы машина выполняла расчет 9X_turing или какие-либо способности машина может 9X_turing-complete обладать несвязанными к вычислению.

В то 9X_theory время как действительно полные по Тьюрингу 9X_turing машины скорее всего физически невозможны, поскольку 9X_turing они требуют неограниченного хранения, Полнота 9X_theory по Тьюрингу часто слабо относится к физическим 9X_turing-complete машинам или языки программирования, которые 9X_theory были бы универсальные, если бы у них было 9X_theory неограниченное хранилище. Все современные 9X_turing компьютеры Тьюринг-полный в этом смысле.

Я 9X_turing-machines не знаю, как вы можете быть более нетехническим, чем 9X_turing-complete это, за исключением того, что вы говорите: «Полный 9X_turing-machines по Тьюрингу означает« возможность ответить 9X_turing на вычислимую задачу при наличии достаточного 9X_theory времени и места »».

84
2

  • Как и в большинстве статей в Википедии, хотя эта цитата технически верна, она не представляет ценности для человека, который не знает предмета и пытается его понять. Умение п ...

Ответ #5

Ответ на вопрос: Что такое завершение по Тьюрингу?

По сути, полнота по Тьюрингу - это одно 9X_turing-complete краткое требование, неограниченная рекурсия.

Даже 9X_turing-complete памятью.

Я думал об этом независимо, но here is some discussion об 9X_theory утверждении. My definition of LSP предоставляет больше контекста.

Другие 9X_turing-machines ответы здесь не определяют напрямую фундаментальную 9X_turing-machines сущность полноты по Тьюрингу.

17
1

  • @Rhymoid FSM [имеют ограниченную память] (http://en.wikipedia.org/wiki/Finite-state_machine) - конечное количество состояний), но неограниченная рекурсия без хвостово ...

Ответ #6

Ответ на вопрос: Что такое завершение по Тьюрингу?

Полный Тьюринга означает, что он не менее 9X_turing-machines эффективен, чем Turing Machine. Это означает, что все, что 9X_theory может быть вычислено машиной Тьюринга, может 9X_turing быть вычислено полной системой Тьюринга.

Никто 9X_theory еще не нашел системы более мощной, чем машина 9X_theory Тьюринга. Итак, на данный момент сказать, что 9X_turing-complete система является полной по Тьюрингу, - это 9X_turing то же самое, что сказать, что система такая 9X_turing же мощная, как и любая известная вычислительная 9X_turing система (см. Church-Turing Thesis).

16
3

  • @ ThorbjørnRavnAndersen вообще-то игнорирует физическую вычислимость. Это может не только занять больше времени, чем возраст Вселенной, но и использовать больше памяти, чем может быть создано с помощ ...

Ответ #7

Ответ на вопрос: Что такое завершение по Тьюрингу?

Проще говоря, полная по Тьюрингу система 9X_turing-complete может решить любую возможную вычислительную 9X_turing-machines проблему.

Одним из ключевых требований является 9X_turing неограниченный размер блокнота и возможность 9X_turing перемотки назад для доступа к предыдущим 9X_theory операциям записи в блокнот.

Таким образом, на 9X_theory практике ни одна система не является полной 9X_theory по Тьюрингу.

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

9
0

Ответ #8

Ответ на вопрос: Что такое завершение по Тьюрингу?

Супер-краткое изложение того, что профессор 9X_theory Бразилфорд объясняет в этом video.

Полный Тьюринга 9X_turing-complete ≅ делать все, что может сделать машина Тьюринга.

  1. Имеет 9X_turing-complete условное ветвление (т. е. «оператор if»). Также подразумевается 9X_turing «перейти к» и, таким образом, разрешить 9X_theory цикл.

  2. Он получает произвольный объем памяти (например, достаточно 9X_theory длинную ленту), необходимый программе.

3
0

Ответ #9

Ответ на вопрос: Что такое завершение по Тьюрингу?

Я думаю, что важность концепции «Завершение 9X_turing-complete по Тьюрингу» заключается в способности идентифицировать 9X_turing-machines вычислительную машину (не обязательно механический/электрический 9X_turing-complete «компьютер»), процессы которой можно разложить 9X_theory на «простые» инструкции, состоящие из более 9X_turing простых и более простые инструкции, которые 9X_turing Универсальная машина могла бы интерпретировать 9X_turing-complete и затем выполнять.

Я настоятельно рекомендую 9X_turing-complete The Annotated Turing

@Mark, я думаю, то, что 9X_turing-machines вы объясняете, представляет собой смесь 9X_theory описания универсальной машины Тьюринга и 9X_turing полного описания Тьюринга.

Что-то, что является 9X_theory полным по Тьюрингу, в практическом смысле 9X_turing-complete будет машиной/процессом/вычислением, которое 9X_turing можно написать и представить в виде программы, которая 9X_turing-machines будет выполняться универсальной машиной 9X_turing-complete (настольным компьютером). Хотя это не учитывает 9X_turing время или хранение, как упоминалось другими.

2
0

Ответ #10

Ответ на вопрос: Что такое завершение по Тьюрингу?

Что я понимаю простыми словами:

Завершение по Тьюрингу. Язык / программа 9X_theory программирования, которая может выполнять 9X_theory вычисления, является полным по Тьюрингу.

Например:

  1. Можно 9X_turing-machines ли сложить два числа, используя только HTML. (Ответ 9X_turing - «Нет», для выполнения добавления необходимо 9X_theory использовать javascript.) Следовательно, HTML 9X_turing-machines не является полным по Тьюрингу.

  2. Такие языки, как 9X_theory Java, C++, Python, Javascript, Solidity 9X_turing-machines для Ethereum и т. д., являются полными по 9X_turing Тьюрингу, потому что вы можете выполнять 9X_theory вычисления, такие как сложение двух чисел, используя 9X_turing-machines эти языки.

Надеюсь, это поможет.

2
1

  • может выполнять вычисления »явно недостаточно: с помощью ручного калькулятора вы можете вычислять такие вещи, как 1 + 1 и cos (sin (exp (42))), но у вас нет циклов while (или даже циклов for) или неограниченных рекурсия (или даже просто во ...