Відповідь на обидва підпитання однакова: використовуючи стрічку для зберігання необхідних даних. Можна припустити, що набір стану та алфавіт машини, що імітується, є підмножинами натуральних чисел ("стан 1", "стан 2", "стан 3" тощо). Навіть з двома непорожніми символами універсальна машина може представляти всі ці цілі числа у вигляді двійкових рядків.
Зауважте, що універсальна машина має фіксовану кількість станів, що робить обчислювальну функцію переходу трохи хитрою. Що ми хотіли б зробити, це написати інструкції, які реалізують велику заяву перемикача форми: "Якщо стан а символ під головою , то перейдіть до стану , напишіть символ та перемістіть голова в напрямку ". Отже - і я думаю, що це може бути коренем вашого питання - як ми обчислимо функцію переходу, якщо у нас навіть не вистачає станів у універсальній машині, щоб зберігати вхід функції переходу?схс'х'г
Один із способів - зберігати функцію переходу як бінарне дерево. Припустимо, у всіх модельованих машинах є стани та символи стрічки. Збережіть функцію переходу як двійкове дерево глибини де на перших рівнях ви переходите вліво або вправо відповідно до того, чи є наступний біт модельованого стану одиничним або нульовим, а наступний рівні - те саме, але для послідовних бітів імітованого персонажа стрічки. Тепер ваша універсальна машина може ходити назад і вперед на стрічці, перевіряючи наступний шматочок стану / символу, запам'ятовуючи цей біт у власних станах, повертаючись назад до дерева, ставлячи маркер на правильний вузол тощо.2q2ℓq+ℓqℓ
Це стає дещо простіше, якщо ви дозволяєте вашій універсальній машині мати декілька стрічок, але тоді вам все одно доведеться показати, що ваша багатоступенева машина еквівалентна одній стрічковій машині.