Я замислювався деякий час, чи додати ще одну відповідь. Інші відповіді зосереджуються на середині його запитання (про "цілінг повного", "тавтологію" тощо). Дозвольте мені захопити першу і останню частину, і таким чином більшу і трохи філософську картину:
Але що це означає?
Що означає бути Тьюрінгом повним?
Чи є спосіб визначити можливості машини Тьюрінга, не кажучи лише про те, що "зможемо імітувати іншу машину Тьюрінга"?
Неофіційно кажучи, те, що Тюрінг є повним, означає, що ваш механізм може запускати будь-який алгоритм, про який ви могли б придумати, незалежно від того, наскільки складний, глибокий, рекурсивний, складний, довгий (з точки зору коду), і незалежно від того, скільки місця для зберігання чи часу буде. необхідні для його оцінки. Само собою зрозуміло , що це вдається тільки тоді , коли проблема може бути обчислений, але якщо це є обчислюваною, вона буде мати успіх (зупинка).
(Примітка. Щоб дізнатися, чому це "неформально", ознайомтеся з цим тезою Церкви Тюрінга, яка йде лінії, з більш детальною формулюванням; хоча це теза, вона могла б чи не могла бути правильною. Хоча завдяки @DavidRicherby для вказуючи цей невеликий недолік у коментарі.)
"Алгоритм" означає те, що ми сьогодні зазвичай розуміємо як комп'ютерний алгоритм; серія дискретних кроків, що маніпулюють зберіганням, з змішаною логікою управління. Однак вона не схожа на машину Oracle, тобто вона не може «здогадуватися».
Приклад практичної мови, що не стосується tc
Якщо ви запрограмували себе, напевно, ви знаєте регулярні вирази, які використовуються для узгодження рядків з деяким шаблоном.
Це один приклад конструкції, якої немає Turing завершеною. Ви можете легко знайти вправи, де просто неможливо створити регулярний вираз, який відповідає певним фразам.
Наприклад (і це, безумовно, заплутало багатьох програмістів у фактичних реальних програмах), теоретично і практично неможливо створити регулярний вираз, який відповідає мові програмування або документу XML: неможливо знайти регулярний вираз блокової структури ( do ... end
або { ... }
мовами; відкривання та закриття тегів у XML-документах), якщо вони можуть бути довільно глибокими. Якщо там є обмеження, наприклад, ви можете мати лише 3 рівні "рекурсії", то ви можете знайти регулярний вираз; але якщо вона не обмежена, то це не піде.
Оскільки, очевидно, можна створити програму на мові, що повністю завершує Тьюрінга (наприклад, C) для розбору вихідного коду (будь-який компілятор робить це), регулярні вирази ніколи не зможуть імітувати згадану програму, отже, вони за визначенням не є повним Тьюрінга
Мотивація
Ідея машини тюрінга сама по собі - нічого практичного; Тюрінг, звичайно, не вигадав цього, щоб створити справжній комп'ютер або щось подібне, на відміну, наприклад, від Чарльза Беббіджа чи фон Ноймана. Концепція машини Тюрінга полягає в тому, що надзвичайно просто. Він складається майже з нічого. Це зводить можливі (і фактичні) комп’ютери до найменшого уявного мінімуму.
Сенс цього спрощення, у свою чергу, полягає в тому, що це дозволяє легко (іш) замислюватися про теоретичні питання (як зупинка проблем, класи складності і все, що турбує теоретична інформатика). Однією з особливостей зокрема є те, що це зазвичай дуже легко перевірити, чи може дана мова чи комп’ютер змоделювати машину Тьюрінга, просто програмувавши цю машину Тьюрінга (що так просто!) На цій мові.
До нескінченності
Зауважте, що вам ніколи не потрібен нескінченний час або зберігання; але і час, і зберігання не є обмеженими. Вони матимуть максимальне значення для кожного обчислюваного запуску, але немає обмеження на те, наскільки великим може стати це значення. Факт, що в кінцевому підсумку у справжнього комп’ютера вичерпається оперативна пам’ять, тут затьмарене; це, звичайно, обмеження для будь-якого фізичного комп'ютера, але це також очевидно і не цікавить теоретичну "обчислювальну потужність" машини. Також нас взагалі не цікавить, скільки часу насправді проходить. Тож наша маленька машина може використовувати довільну кількість часу та простору, що робить її абсолютно непрактичною.
... і за його межами
Один вражаючий останній пункт, то, що така проста, проста річ може зробити все , що будь-який можливий реальний комп'ютер міг коли - або , у всьому всесвіті, виконуй (тільки дуже повільно) - по крайней мере , наскільки ми знаємо сьогодні.