Емулятор машини Тюрінга


Приклади:

Як користуватися емулятором

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

Машина Тьюрінга — абстрактна обчислювальна машина, запропонована Аланом Тьюрінгом для формалізації поняття алгоритму. Пристрій МТ складається з наступних частин:

Нескінченна стрічка

Стрічка в машині Тьюрінга складається з комірок, в які можна записувати символи з заданого алфавіту, а також зчитувати їх. Якщо на стрічці нічого не записано, то вважається, що там записаний спеціальний символ λ. Даний символ доповнює алфавіт, але не входить в нього явним чином.

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

Зчитувальна/записувальна головка

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

Пристрій керування

Під пристроєм керування розуміється таблиця станів і правил переходу для машини Тьюрінга. Станом називається рядок таблиці, в якому в даний момент знаходиться машина. Стан, в якому знаходиться машина перед запуском, називається початковим, зазвичай позначається ім'ям q0. Для завершення роботи МТ використовується спеціальний термінальний стан, який позначається як !.

Таблиця має розмір |Q|x|A|, де |Q| — кількість станів, а |A| — розмірність алфавіту (включаючи символ λ). У першому (заголовному) рядку написані символи алфавіту. У кожній з комірок таблиці, що відносяться до рядків зі станами, розташовані трійки <char, action, state>, що визначають дію машини, яку вона повинна здійснити, якщо знаходиться в даному стані і на стрічці записаний символ з заголовочної комірки даного стовпця:

Допускаються скорочені записи для правил:

Приклади машин Тьюрінга

Приклад 1 (завантажити в емулятор). Додати 1 до двійкового числа. На початку і в кінці головка повинна знаходитися на найстарший біт слова (зліва).

Q \ A01λ
q0RRλ L q1
q11 N q20 L q11 N !
q2LLλ R !

Оскільки по умові головка МТ знаходиться на найстаршому біті, а збільшувати потрібно молодший, необхідно спочатку перемістити головку на молодший біт, що виконується в стані q0: як тільки стрічка побачить символ λ, вона зсунеться вліво (на молодший біт) і перейде в стан інкрементації (q1).

В стані q1 можливі наступні ситуації:

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

Приклад 2 (завантажити в емулятор). У слові з алфавіту {a, b} інвертувати символи. На початковий момент головка знаходиться в початку слова.

Q \ Aabλ
q0b R q0a R q0 !

До тих пір, поки під головкою не опиниться порожній символ, замість символу a записується символ b, а замість b записується a і виконується зсув головки вправо на наступний символ.