Відповіді:
Ось найкоротше пояснення:
Система Turing Complete означає систему, в якій можна записати програму, яка знайде відповідь (хоча без гарантій щодо часу виконання чи пам'яті).
Отже, якщо хтось каже "моя нова річ - Тюрінг завершений", це означає в принципі (хоча часто це не на практиці), це може бути використане для вирішення будь-якої проблеми з обчисленнями.
Колись це жарт ... хлопець написав тренажер машини Turing Machine in vi, тому можна сказати, що vi - єдиний обчислювальний двигун, який коли-небудь потрібний у світі.
Ось найпростіше пояснення
Алан Тьюрінг створив машину, яка може приймати програму, запускати її та показувати певний результат. Але потім йому довелося створювати різні машини для різних програм. Тому він створив "Універсальну машину Тьюрінга", яка може приймати будь-яку програму та запускати її.
Мови програмування схожі на ті машини (хоча і віртуальні). Вони беруть програми і запускають їх. Тепер мова програмування називається "Тюрінг завершений", якщо вона може запускати будь-яку програму (незалежно від мови), якою машина Тьюрінга може працювати, даючи достатньо часу та пам'яті.
Наприклад: Скажімо, існує програма, яка бере 10 чисел і додає їх. Машина Тьюрінга може легко запустити цю програму. Але тепер уявіть, що чомусь ваша програма програмування не може виконувати те саме доповнення. Це зробило б його "Тьюрінга неповним" (так би мовити). З іншого боку, якщо він може запускати будь-яку програму, яку може запустити універсальна машина Тьюрінга, то це Turing завершено.
Більшість сучасних мов програмування (наприклад, Java, JavaScript, Perl і т. Д.) Всі Turing завершені, оскільки кожен реалізує всі функції, необхідні для запуску програм, таких як додавання, множення, умова повернення, оператори повернення, способи зберігання / отримання / видалення дані тощо.
Оновлення: Ви можете дізнатися більше на моєму блозі: "JavaScript закінчується" - пояснено
З Вікіпедії :
Повнота Тюрінга, названа на честь Алана Тьюрінга, важлива тим, що кожна правдоподібна конструкція для досі вдосконалених обчислювальних пристроїв може бути імітована універсальною машиною Тьюрінга - спостереженням, що стало відомим як дисертація Церкви Тьюрінга. Таким чином, машина, яка може діяти як універсальна машина Тьюрінга, в принципі може виконувати будь-який розрахунок, на який здатний будь-який інший програмований комп'ютер. Однак це не має нічого спільного з зусиллями, необхідними для написання програми для машини, часу, яке може знадобитися машині для виконання обчислення, або будь-яких можливостей, якими може володіти машина, не пов'язаних з обчисленням.
Хоча по-справжньому машини Тьюрінга - це цілком ймовірно фізично неможливо, оскільки вони вимагають необмеженого зберігання, повноту Тюрінга часто вільно віднести до фізичних машин чи мов програмування, які були б універсальними, якби вони мали необмежений обсяг зберігання. У цьому сенсі всі сучасні комп’ютери є Тьюрінгом.
Я не знаю, як ти можеш бути більш нетехнічним, ніж це, за винятком того, щоб сказати "цілісні засоби", здатні відповісти на обчислювальну проблему з урахуванням достатнього часу та місця ".
Повна мова Тьюрінга - це та, яка може виконувати будь-які обчислення. У тезу Черча-Тьюринга стверджує , що будь-який performable обчислення може бути зроблено з допомогою машини Тьюринга. Машина Тьюринга машина з нескінченної пам'яттю з довільним доступом і «програма» кінцевої , що диктує , коли він повинен читати, писати, і рухатися по цій пам'яті, коли він повинен припинити з певним результатом, і що він повинен робити далі. Вхід до машини Тьюрінга зберігається в її пам'яті перед її запуском.
Тьюринг машин може приймати рішення , грунтуючись на тому, що він бачить в пам'яті - «мова» , який тільки підтримує +
, -
, *
і /
на цілих числах НЕ Тьюринг , тому що він не може зробити вибір , заснований на його вхід, але машина Тьюринга може.
Машина Тьюрінга може працювати назавжди - Якби ми взяли Java, Javascript або Python і видалили можливість робити будь-який цикл, GOTO або виклик функції, це не буде Turing завершеним, оскільки він не може виконати довільні обчислення, які ніколи не закінчується. Coq - доказ теореми, який не може виражати програми, які не завершуються, тому Тьюрінг не завершений.
Машина Тьюрінга може використовувати нескінченну пам'ять - мова, яка була точно такою, як Java, але припиниться, як тільки вона буде використовувати більше 4 гігабайт пам'яті, не буде Тюрінг повною, оскільки машина Тьюрінга може використовувати нескінченну пам'ять. Ось чому ми не можемо створити машину Тюрінга, але Java все ще є повною мовою Тюрінга, оскільки мова Java не має обмежень, що заважають їй використовувати нескінченну пам'ять. Це одна з причин, що регулярні вирази не завершуються.
Машина Тьюрінга має пам'ять з випадковим доступом - мова, яка дозволяє вам працювати лише з пам'яттю push
і pop
операціями зі стеком, не закінчиться. Якщо у мене є "мова", яка читає рядок один раз і може використовувати пам'ять лише натисканням та вискакуванням із стека, вона може сказати мені, чи є кожна (
в рядку )
пізніше, натискаючи, коли вона бачить, (
і вискакує, коли бачить )
. Однак, він не може сказати мені, чи є у кожного (
свій власний )
пізніше, і кожен [
має свій ]
згодом (зауважте, що ([)]
відповідає цим критеріям, але ([]]
ні). Машина Тьюрінга може використовувати свою пам'ять з випадковим доступом для відстеження ()
та[]
окремо, але ця мова лише з стеком не може.
Машина Тьюрінга може імітувати будь-яку іншу машину Тьюрінга. Машина Тьюрінга, коли їй надається відповідна програма, може приймати програму іншої машини Тьюрінга та імітувати її на довільному введенні. Якби у вас була мова, заборонена реалізація інтерпретатора Python, це не було б завершенням Тьюрінга.
Якщо у вашій мові є нескінченна пам'ять з випадковим доступом, умовне виконання та якась форма повторного виконання, ймовірно, Turing завершений. Є більш екзотичні системи, які все ще можуть досягти всього, що може зробити машина Тьюрінга, завдяки чому Тьюрінг теж є повним:
cyclic tag system
а не universal cyclic tag system
. Отже - стаття не підтверджує повноту SQL. (Або я щось неправильно зрозумів)
По суті, Тюрінг-повнота - це одна стисла вимога, безмежна рекурсія.
Навіть не обмежена пам’яттю.
Я думав про це самостійно, але ось деяке обговорення твердження. Моє визначення LSP забезпечує більше контексту.
Інші відповіді тут прямо не визначають фундаментальну сутність Тьюрінга-повноти.
while (p) { /* ... */ }
. "Я констатую еквівалентність між генералізованою рекурсією та можливістю виконувати будь-які можливі обчислення". Теза Церкви - це зовсім інша справа, і її справді слід обговорювати окремо.
Turing Complete означає, що він принаймні такий же потужний, як і машина Тьюрінга . Це означає, що все, що може бути обчислено машиною Тьюрінга, може бути обчислено системою Turing Complete.
Ще ніхто не знайшов систему, більш потужну, ніж машина Тюрінга. Так, на даний момент сказати, що система є Тюрінг завершеною - це те саме, що сказати, що система така потужна, як і будь-яка відома обчислювальна система (див. Тезу Церкви-Тьюрінга ).
Найпростіше кажучи, система Тьюрінга-повна може вирішити будь-яку можливу обчислювальну задачу.
Однією з ключових вимог є розмір скретч-панелі без обмежень і це можливість перемотування назад для доступу до запису на скретчпад.
Таким чином, на практиці жодна система Тьюрінга не є повною.
Скоріше деякі системи наближають до Тюрінга повноту, моделюючи необмежену пам'ять і виконуючи будь-які можливі обчислення, які можуть вміститися в пам'яті системи.
Я думаю, що важливість концепції "Turing Complete" полягає у здатності ідентифікувати обчислювальну машину (не обов'язково механічну / електричну "комп'ютерну"), яка може її процеси деконструювати на "прості" інструкції, складені з більш простих і простих інструкції, що універсальна машина може інтерпретувати та виконувати.
Я настійно рекомендую Анотований Тюрінг
@ Марк, я думаю, що ви пояснюєте, це суміш між описом Універсальної машини Тьюрінга і Тюрінга завершеною.
Те, що є Turing Complete, в практичному розумінні - це машина / процес / обчислення, яку можна записати і представити у вигляді програми, яку виконує універсальна машина (настільний комп'ютер). Хоча це не враховує часу та місця зберігання, як згадують інші.
Що я розумію простими словами:
Turing Complete: Мова / програма програмування, яка може робити обчислення, є Turing завершеною.
Наприклад :
Чи можете ви додати два числа за допомогою просто HTML . (Відповідь " Ні ", для додавання вам потрібно використовувати javascript.). Отже, HTML не є завершеним Turing.
Такі мови, як Java, C ++, Python, Javascript, Solidity для Ethereum тощо, є Turing завершеними, оскільки ви можете робити обчислення, як додавання двох чисел за допомогою цих мов.
Сподіваюсь, це допомагає.
Його завершено, якщо він може тестувати і розгалужувати (має "якщо")
Машина Тьюрінга вимагає, щоб будь-яка програма могла провести перевірку стану. Це принципово.
Розгляньте фортепіанний ролик гравця. Піаніст гравця може грати дуже складний музичний твір, але в музиці ніколи не існує жодної умовної логіки. Це Тюрінг завершений.
Умовна логіка - це і потужність, і небезпека машини, яка є Turing Complete.
Рулон піаніно гарантовано зупиняється кожного разу. Для ТМ такої гарантії немає. Це називається "проблема зупинки".
Як сказав Вейлон Флін :
Turing Complete означає, що він принаймні такий же потужний, як і машина Тьюрінга.
Я вважаю, що це неправильно, система є Тюрінгом повною, якщо вона точно така ж потужна, як і машина Тьюрінга, тобто всі обчислення, виконані машиною, можуть бути виконані системою, але також будь-які обчислення, виконані системою, можуть бути виконані машиною Тьюрінга .
У практичних мовних термінах, знайомих більшості програмістів, звичайним способом виявлення повноти Тьюрінга є те, якщо мова дозволяє чи дозволяє моделювання вкладених без обмежених висловлювань під час висловлювань (на відміну від стилю Pascal для висловлювань із фіксованими верхніми межами).
Чи може реляційна база даних вводити широти і довготи місць і доріг, і обчислити найкоротший шлях між ними - ні. Це одна проблема, яка показує, що SQL не закінчує Тьюрінга.
Але C ++ може це зробити, і може зробити будь-яку проблему. Таким чином.