Що таке Тьюрінг завершений?


Відповіді:


324

Ось найкоротше пояснення:

Система Turing Complete означає систему, в якій можна записати програму, яка знайде відповідь (хоча без гарантій щодо часу виконання чи пам'яті).

Отже, якщо хтось каже "моя нова річ - Тюрінг завершений", це означає в принципі (хоча часто це не на практиці), це може бути використане для вирішення будь-якої проблеми з обчисленнями.

Колись це жарт ... хлопець написав тренажер машини Turing Machine in vi, тому можна сказати, що vi - єдиний обчислювальний двигун, який коли-небудь потрібний у світі.


18
Для подальшого читання див. Анотоване Тюрінг. Дуже доступний. amazon.com/Annotated-Turing-Through-Historic-Computability/dp/…
i_am_jorf

43
"часто не на практиці" є неправильним. На практиці жодна система ніколи не закінчується Тьюрінгом, оскільки жодна система, що реалізується, не має нескінченної стрічки. Ми дійсно маємо на увазі те, що деякі системи мають можливість наближати Тюрінг-повноту до меж своєї доступної пам'яті.
Шелбі Мур III

22
Але Vi - єдиний обчислювальний двигун, який коли-небудь потрібен у світі ... ;-)
Джо Едгар

4
Є також Emacs токарною машиною? XD
alem0lars

6
Хтось нещодавно показав, що PowerPoint теж Turing Complete.
Tagc

192

Ось найпростіше пояснення

Алан Тьюрінг створив машину, яка може приймати програму, запускати її та показувати певний результат. Але потім йому довелося створювати різні машини для різних програм. Тому він створив "Універсальну машину Тьюрінга", яка може приймати будь-яку програму та запускати її.

Мови програмування схожі на ті машини (хоча і віртуальні). Вони беруть програми і запускають їх. Тепер мова програмування називається "Тюрінг завершений", якщо вона може запускати будь-яку програму (незалежно від мови), якою машина Тьюрінга може працювати, даючи достатньо часу та пам'яті.

Наприклад: Скажімо, існує програма, яка бере 10 чисел і додає їх. Машина Тьюрінга може легко запустити цю програму. Але тепер уявіть, що чомусь ваша програма програмування не може виконувати те саме доповнення. Це зробило б його "Тьюрінга неповним" (так би мовити). З іншого боку, якщо він може запускати будь-яку програму, яку може запустити універсальна машина Тьюрінга, то це Turing завершено.

Більшість сучасних мов програмування (наприклад, Java, JavaScript, Perl і т. Д.) Всі Turing завершені, оскільки кожен реалізує всі функції, необхідні для запуску програм, таких як додавання, множення, умова повернення, оператори повернення, способи зберігання / отримання / видалення дані тощо.

Оновлення: Ви можете дізнатися більше на моєму блозі: "JavaScript закінчується" - пояснено


5
Думка про те, що навіть існуватиме термін для такого типу машин, має набагато більше сенсу, коли я пам’ятаю, що Тьюрінг та інші ранні комп'ютерні вчені будували конкретну машину кожного разу, коли вони хотіли вирішити конкретну проблему. Ми звикли до однієї машини, яку можна назавжди перепрограмувати. Дякую за контекст, Раджа.
Джейкоб Форд

Як JavaScript може бути Turing завершеним? У ньому відсутня файлова система, належний багатопотоковий API. Він має низку обмежень, головним чином, завдяки своєму захисту браузера. Навряд чи це можна назвати "мовою програмування". Подивіться, скільки існує варіантів сценаріїв абстрагування (реагуйте, машинопис ... ви називаєте це), все це для компенсації того, що JS не має. (тут слід згадати asm.js). Java, Python або C ++ - справжні приклади "Turing Complete". Але js? Я не думаю, що так.
Михайло IV

2
@MichaelIV Туристична машина також не мала файлової системи / потоків. JS абсолютно гастролює.
Бакс

@MichaelIV Щоб додати відповідь Бакса, можна було б розглянути сучасний комп’ютер, який складається з декількох машин Тьюрінга, які працюють разом, щоб забезпечити всі ті приємні речі, які ви згадуєте. Наприклад, процесор виробляє "стрічку" для графічного процесора, щоб він міг написати "стрічку" для монітора, щоб монітор міг написати "стрічку" користувачеві. Так само процесор міг виготовити "стрічку" для жорстких дисків,

86

З Вікіпедії :

Повнота Тюрінга, названа на честь Алана Тьюрінга, важлива тим, що кожна правдоподібна конструкція для досі вдосконалених обчислювальних пристроїв може бути імітована універсальною машиною Тьюрінга - спостереженням, що стало відомим як дисертація Церкви Тьюрінга. Таким чином, машина, яка може діяти як універсальна машина Тьюрінга, в принципі може виконувати будь-який розрахунок, на який здатний будь-який інший програмований комп'ютер. Однак це не має нічого спільного з зусиллями, необхідними для написання програми для машини, часу, яке може знадобитися машині для виконання обчислення, або будь-яких можливостей, якими може володіти машина, не пов'язаних з обчисленням.

Хоча по-справжньому машини Тьюрінга - це цілком ймовірно фізично неможливо, оскільки вони вимагають необмеженого зберігання, повноту Тюрінга часто вільно віднести до фізичних машин чи мов програмування, які були б універсальними, якби вони мали необмежений обсяг зберігання. У цьому сенсі всі сучасні комп’ютери є Тьюрінгом.

Я не знаю, як ти можеш бути більш нетехнічним, ніж це, за винятком того, щоб сказати "цілісні засоби", здатні відповісти на обчислювальну проблему з урахуванням достатнього часу та місця ".


4
У цьому контексті що таке "обчислювальний пристрій"?
допатраман

30
Як і у більшості статей у Вікіпедії, хоча ця цитата є технічно правильною, вона не надає ніякої цінності людині, яка не має знань з цього питання і намагається її зрозуміти. Вміти правильно пояснити речі - це власна наука :)
Лачо Томов

76

Неформальне визначення

Повна мова Тьюрінга - це та, яка може виконувати будь-які обчислення. У тезу Черча-Тьюринга стверджує , що будь-який performable обчислення може бути зроблено з допомогою машини Тьюринга. Машина Тьюринга машина з нескінченної пам'яттю з довільним доступом і «програма» кінцевої , що диктує , коли він повинен читати, писати, і рухатися по цій пам'яті, коли він повинен припинити з певним результатом, і що він повинен робити далі. Вхід до машини Тьюрінга зберігається в її пам'яті перед її запуском.

Те, що може зробити мову НЕ Тюрінг завершеною

Тьюринг машин може приймати рішення , грунтуючись на тому, що він бачить в пам'яті - «мова» , який тільки підтримує +, -, *і /на цілих числах НЕ Тьюринг , тому що він не може зробити вибір , заснований на його вхід, але машина Тьюринга може.

Машина Тьюрінга може працювати назавжди - Якби ми взяли Java, Javascript або Python і видалили можливість робити будь-який цикл, GOTO або виклик функції, це не буде Turing завершеним, оскільки він не може виконати довільні обчислення, які ніколи не закінчується. Coq - доказ теореми, який не може виражати програми, які не завершуються, тому Тьюрінг не завершений.

Машина Тьюрінга може використовувати нескінченну пам'ять - мова, яка була точно такою, як Java, але припиниться, як тільки вона буде використовувати більше 4 гігабайт пам'яті, не буде Тюрінг повною, оскільки машина Тьюрінга може використовувати нескінченну пам'ять. Ось чому ми не можемо створити машину Тюрінга, але Java все ще є повною мовою Тюрінга, оскільки мова Java не має обмежень, що заважають їй використовувати нескінченну пам'ять. Це одна з причин, що регулярні вирази не завершуються.

Машина Тьюрінга має пам'ять з випадковим доступом - мова, яка дозволяє вам працювати лише з пам'яттю pushі popопераціями зі стеком, не закінчиться. Якщо у мене є "мова", яка читає рядок один раз і може використовувати пам'ять лише натисканням та вискакуванням із стека, вона може сказати мені, чи є кожна (в рядку )пізніше, натискаючи, коли вона бачить, (і вискакує, коли бачить ). Однак, він не може сказати мені, чи є у кожного (свій власний )пізніше, і кожен [має свій ]згодом (зауважте, що ([)]відповідає цим критеріям, але ([]]ні). Машина Тьюрінга може використовувати свою пам'ять з випадковим доступом для відстеження ()та[]окремо, але ця мова лише з стеком не може.

Машина Тьюрінга може імітувати будь-яку іншу машину Тьюрінга. Машина Тьюрінга, коли їй надається відповідна програма, може приймати програму іншої машини Тьюрінга та імітувати її на довільному введенні. Якби у вас була мова, заборонена реалізація інтерпретатора Python, це не було б завершенням Тьюрінга.

Приклади цірінг повних мов

Якщо у вашій мові є нескінченна пам'ять з випадковим доступом, умовне виконання та якась форма повторного виконання, ймовірно, Turing завершений. Є більш екзотичні системи, які все ще можуть досягти всього, що може зробити машина Тьюрінга, завдяки чому Тьюрінг теж є повним:

  • Нетипічне обчислення лямбда
  • Гра життя Конвея
  • Шаблони C ++
  • Пролог

11
SQL, безумовно, є завершеним. Він має можливості сценарію, які дозволяють проводити будь-які обчислення.
nzifnab

53
Ні, ви плутаєте SQL з розширеннями, такими як T-SQL / PL-SQL. ANSI SQL не завершений. Але TSQL / PLSQL - є.
Agnius Vasiliauskas

15
Мабуть SQL Тьюринг-повний: stackoverflow.com/questions/900055 / ...
Newtang

2
Відповідно до повноти Тьюрінга - система є Тьюрінгом завершеною, якщо її можна використовувати для імітації будь-якої одноколійної машини Тьюрінга. Але в прикладі вище, як я зрозумів, розроблені окремо, cyclic tag systemа не universal cyclic tag system. Отже - стаття не підтверджує повноту SQL. (Або я щось неправильно зрозумів)
Агній Василіяускас

2
Немає можливості реалізувати мову, повну Тюрінга, оскільки немає нескінченних стрічок. Що ми насправді маємо на увазі, це те, що деякі мови мають можливість наближати повноту Тьюрінга до меж доступної пам'яті хост-машини.
Шелбі Мур III

17

По суті, Тюрінг-повнота - це одна стисла вимога, безмежна рекурсія.

Навіть не обмежена пам’яттю.

Я думав про це самостійно, але ось деяке обговорення твердження. Моє визначення LSP забезпечує більше контексту.

Інші відповіді тут прямо не визначають фундаментальну сутність Тьюрінга-повноти.


Автомати кінцевого стану можуть мати необмежену рекурсію. Справа в точці: a*.

3
@ Rhymoid FSM мають обмежену пам’ять - кінцева кількість станів), але необмежена рекурсія без оптимізації хвоста повинна мати необмежену пам’ять. Я не обмежував своє визначення підмножиною необмеженої рекурсії лише оптимізацією хвоста. Будь ласка, вийміть свій голос.
Шелбі Мур III,

Ви зберегли визначення туманної безмежної рекурсії. Ви маєте на увазі "рекурсію" в сенсі "примітивна рекурсія" і "необмежену", зробивши її "частковою" (або "загальною", або "му-")? Тоді ви можете мати рацію. Але ваша нинішня формулювання занадто близька до тверджень, які критикують у "Про народні теореми" Девіда Харела. Важливо бути суворим у математиці, і, не залишаючи точних визначень, ви ігноруєте це. До речі: FSM можна узагальнити для моделювання взаємодії; Що їх відрізняє від ТМ, це те, що середовище останнього також моделюється (як стрічка).

@ Перерахунок римоїдів - це антитеза точності, наприклад, перерахуйте максимальну точність дробів дюйма. Безмежна рекурсія означає будь-яку можливу форму рекурсії, що неможливо без нескінченної стрічки. Повністю узагальнена рекурсія (не просто загальна в межах моделі) завжди є цілковитою Тьюрінгом. Я констатую еквівалентність між узагальненою рекурсією та здатністю виконувати будь-які можливі обчислення. Це важлива еквівалентність, яку слід зазначити.
Шелбі Мур III

"Безмежна рекурсія означає всі можливі форми рекурсії" Це ваше читання. Для більшості користувачів SO "необмежена рекурсія" означає while (p) { /* ... */ }. "Я констатую еквівалентність між генералізованою рекурсією та можливістю виконувати будь-які можливі обчислення". Теза Церкви - це зовсім інша справа, і її справді слід обговорювати окремо.

13

Turing Complete означає, що він принаймні такий же потужний, як і машина Тьюрінга . Це означає, що все, що може бути обчислено машиною Тьюрінга, може бути обчислено системою Turing Complete.

Ще ніхто не знайшов систему, більш потужну, ніж машина Тюрінга. Так, на даний момент сказати, що система є Тюрінг завершеною - це те саме, що сказати, що система така потужна, як і будь-яка відома обчислювальна система (див. Тезу Церкви-Тьюрінга ).


3
Зауважте, що все це не враховує стінного часу. Просто сказано "це можна зробити".
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen насправді вона взагалі нехтує фізичною обчислюваністю. Мало того, що це може зайняти більше часу, ніж вік Всесвіту, але також може використати більше пам'яті, ніж можна побудувати з усіма ферміонами та бозонами у Всесвіті.
Вейлон Флінн

Існує, можливо, без обмеження кількість бозонів і ферміонів у Всесвіті. Ми не знаємо, і, мабуть, ніколи не дізнаємось, це розмір. Щоразу, коли ви читаєте про кількість X у "Всесвіті", люди насправді говорять про спостережуваний Всесвіт. Хоча це цікаво, але це не фактична фізична межа.
Штійн де Вітт

9

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

Однією з ключових вимог є розмір скретч-панелі без обмежень і це можливість перемотування назад для доступу до запису на скретчпад.

Таким чином, на практиці жодна система Тьюрінга не є повною.

Скоріше деякі системи наближають до Тюрінга повноту, моделюючи необмежену пам'ять і виконуючи будь-які можливі обчислення, які можуть вміститися в пам'яті системи.


2

Я думаю, що важливість концепції "Turing Complete" полягає у здатності ідентифікувати обчислювальну машину (не обов'язково механічну / електричну "комп'ютерну"), яка може її процеси деконструювати на "прості" інструкції, складені з більш простих і простих інструкції, що універсальна машина може інтерпретувати та виконувати.

Я настійно рекомендую Анотований Тюрінг

@ Марк, я думаю, що ви пояснюєте, це суміш між описом Універсальної машини Тьюрінга і Тюрінга завершеною.

Те, що є Turing Complete, в практичному розумінні - це машина / процес / обчислення, яку можна записати і представити у вигляді програми, яку виконує універсальна машина (настільний комп'ютер). Хоча це не враховує часу та місця зберігання, як згадують інші.


2

Що я розумію простими словами:

Turing Complete: Мова / програма програмування, яка може робити обчислення, є Turing завершеною.

Наприклад :

  1. Чи можете ви додати два числа за допомогою просто HTML . (Відповідь " Ні ", для додавання вам потрібно використовувати javascript.). Отже, HTML не є завершеним Turing.

  2. Такі мови, як Java, C ++, Python, Javascript, Solidity для Ethereum тощо, є Turing завершеними, оскільки ви можете робити обчислення, як додавання двох чисел за допомогою цих мов.

Сподіваюсь, це допомагає.


0

Його завершено, якщо він може тестувати і розгалужувати (має "якщо")


1
Для такого старого питання варто було б перевірити, чи вже інші внесли подібні чи більш істотні внески
alan ocallaghan

Не впевнений у правильності відповіді. Але це дійсно просте пояснення, якого я ніколи раніше не бачив. Смішна річ: давно (після того, як я написав свій перший фрагмент коду) я також використав те саме пояснення, щоб визначити найпростіший можливий процесор.
Віктор Ярема

Це відмінна перша спроба чіткого, стислого та точного оперативного визначення. Однак, гілка повинна дозволити циклічне циклічення, і чи не так, що машина також повинна дозволяти виклики підпрограми (тобто: рекурсія)? Чи існує сплющена програма вкладених циклів для кожної програми з рекурсією?
user3673

0

Машина Тьюрінга вимагає, щоб будь-яка програма могла провести перевірку стану. Це принципово.

Розгляньте фортепіанний ролик гравця. Піаніст гравця може грати дуже складний музичний твір, але в музиці ніколи не існує жодної умовної логіки. Це Тюрінг завершений.

Умовна логіка - це і потужність, і небезпека машини, яка є Turing Complete.

Рулон піаніно гарантовано зупиняється кожного разу. Для ТМ такої гарантії немає. Це називається "проблема зупинки".


-1

Як сказав Вейлон Флін :

Turing Complete означає, що він принаймні такий же потужний, як і машина Тьюрінга.

Я вважаю, що це неправильно, система є Тюрінгом повною, якщо вона точно така ж потужна, як і машина Тьюрінга, тобто всі обчислення, виконані машиною, можуть бути виконані системою, але також будь-які обчислення, виконані системою, можуть бути виконані машиною Тьюрінга .


1
Я думаю, ви припускаєте, що теза Церкви Тюрінга справжня, щоб дійти цього висновку. Це ще не доведено. Властивість, яку ви описуєте, називається "Turing Equivalent".
Вейлон Флінн

1
@WaylonFlinn Ні, він правий. "Повнота" означає і те, що вона принаймні така сильна, як річ, але також не сильніша. Порівняйте з "NP-Complete".
Девін Жанп'єр

3
@DevinJeanpierre Я не хочу тут починати полум'яну війну, але я майже впевнений, що обчислювальний клас, який ви описуєте, називається "Еквівалент Тюрінга". Однак Turing Complete має схоже відношення до NP-Complete. NP-Complete дорівнює NP, якщо і лише тоді, коли P = NP. Точно так само Тюрінг завершений дорівнює Еквівалентному Тьюрінгу, якщо і лише в тому випадку, якщо теза Церкви Тьюрінга є правильною.
Вейлон Флін

@Waylon Джерело? Ніщо, що я прочитав, не погоджується з цим (наприклад, en.wikipedia.org/wiki/Turing_completeness )
Девін Жанп'єр

4
@DevinJeanpierre Це написано прямо там у статті Вікіпедії, на яку ви посилаєтесь. Цитуючи розділ "Формальні визначення": "Обчислювальна система, яка може обчислити кожну функцію, що обчислюється Тьюрінгом, називається Turing завершена", "Повна система Тьюрінга називається еквівалентом Тьюрінга, якщо кожна функція, яку вона може обчислити, також є обчислювальною системою Тьюрінга"
Вейлон Флінн

-2

У практичних мовних термінах, знайомих більшості програмістів, звичайним способом виявлення повноти Тьюрінга є те, якщо мова дозволяє чи дозволяє моделювання вкладених без обмежених висловлювань під час висловлювань (на відміну від стилю Pascal для висловлювань із фіксованими верхніми межами).


1
Одного необмежена циклу в той час як досить , щоб імітувати машину Тьюринга.
masterxilo

-8

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

Але C ++ може це зробити, і може зробити будь-яку проблему. Таким чином.


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

1
Я просто покладу це тут ... hansolav.net/blog/ImplementingDijkstrasAlgorithmUsingTSQL.aspx
Matthew Whited
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.