Чому порожній символ не вважається частиною вхідного алфавіту машини Тьюрінга?


12

Визначення машин Тьюрінга завжди явні щодо того, що символ пустих не є частиною вхідного алфавіту.

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

Щоб пояснити, що "здається" в останньому реченні, врахуйте наступне.

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

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

Припустимо, що цей сценарій дійсно можливий, чому б ви не вважали порожній символ частиною вхідного алфавіту і чому ви не дозволили б включити його як частину "початкового" вводу?

Можливо, це просто спосіб визначити вхід таким, щоб він не завжди був нескінченним?


Коли я був у класі, я сконструював машини Тьюрінга, які використовували дозвіл β (локального порожнього символу) у своєму введенні як роздільники поля.
Джошуа

Відповіді:


23

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

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


2
Ну, звичайно, не маючи можливості визначити кінець початкового вводу, деякі розрахунки були б неможливими. Але в іншому випадку нічого символьного немає. І я здогадуюсь, що в термінологічній економії важливо використовувати порожній символ, оскільки він потрібен у вашому алфавіті. Я думаю, що це було б для мене більш очевидним, коли спочатку було визначено явний символ кінця введення та зауваження, що це не було суворо необхідним і часто залишалося поза увагою.
Плутанина

1
{00}0,{11}1,{10,01}b

2
Вважаючи, що машина Тьюрінга потребує правил, які керують тим, що вона робить, якщо вона читає порожню, і може бути правило, яке говорить їй писати порожній, чи не означає це, що бланк справді є частиною його алфавіту? Я не бачу, чому вхід може не містити пробілів. Як щодо кодування вхідних елементів, використовуючи непорожні символи, та одну порожню як роздільник? Потім кілька послідовних пробілів вказують на кінець введення.
Rosie F

3
@YonatanN Звичайно. Це "просто", але мати порожній символ простіше.
Девід Річербі

3
@RosieF Бланк - це частина алфавіту стрічки; вхідний алфавіт є підмножиною цього. І, звичайно, ви можете встановити умови для того, як вхід може містити пробіли за певних обставин (як ви це робили), але це просто робить визначення складнішими. Більш складні визначення означають, що важче довести речі про машини Тьюрінга. А оскільки машини Тьюрінга справді використовуються лише для доказування речей (якщо ви хочете розробити власне комп'ютер, це не буде ТМ), це не дуже добре.
Девід Річербі

6

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

Ці машини Тьюрінга називаються префіксальними машинами Тьюрінга , і вони дуже корисні для доведення деяких теорем про складність Колмогорова.


5

Дуже коротка відповідь: алфавіт стрічки - це набір символів, який може з’явитися на стрічці, і він включає порожній символ. Вхідний алфавіт є набором символів , які можуть з'явитися в первісному вході , і він не включає порожній символ. Основним алфавітом, про який машина піклується, є алфавіт стрічки: він все ще потребує правил, що робити, наприклад, якщо він бачить порожній.

Ця відмінність важлива, як говорили інші, щоб машина могла сказати, де закінчується її вхід. Це та сама причина, що ви не можете (корисно) поставити нульовий символ на середину рядка в C: нульовий символ зарезервований, щоб означати "останній ненульовий символ, перш ніж це кінець даних, так коли ти це побачиш, ти закінчиш ". Якщо вам потрібно очікувати нульових символів посередині рядка, писати strlenстає набагато важче.

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