Можно ли построить машину Тьюринга, используя только два ленточных символа?

Машина Тьюринга M, содержащая любое количество ленточных символов, может быть смоделирована одним M', содержащим всего три ленточных символа: {0, 1, B} (B = Пусто).

Можно ли смоделировать М с помощью М", который имеет только два символа ленты, скажем, {1, В}?


person AnkurVj    schedule 27.01.2011    source источник
comment
В=фи? пустое письмо-ничего? или фактический символ?   -  person Yochai Timmer    schedule 27.01.2011
comment
B - это пустой символ, который требуется для описания любой машины Тьюринга.. (поскольку TM имеет ленту бесконечной длины.. после определенного момента она вся заполнена пустыми символами)   -  person AnkurVj    schedule 27.01.2011
comment
Я снова задал этот вопрос, запрашивая более конкретный ответ, основанный на научной литературе. Он также содержит попытку более подробно описать преобразование: stackoverflow.com/questions/56990710/   -  person Cerno    schedule 11.07.2019


Ответы (2)


Первый шаг — переход от любой ТМ к ТМ только с единицами и нулями — не так сложен, как вы думаете, но и не так прост, как говорят все остальные. Идея состоит в том, чтобы разработать двоичное кодирование фиксированной длины для каждого символа в алфавите. Затем вы обновляете элемент управления с конечным состоянием, чтобы на каждом шаге TM сканировал соответствующее количество битов, решал, в каком направлении двигаться и какой символ записывать, записывал двоичное представление нового символа и повторял. Этого можно добиться, имея ОГРОМНЫЙ элемент управления с конечным числом состояний, и я оставлю подробности читателю, так как очень педантично рассказывать, как это работает. :-). Следует отметить одну деталь: в этой конструкции вы представляете пустой символ как последовательность пробелов той же длины, что и изобретенные вами двоичные символы.

Чтобы реализовать TM, используя только 1 и B, вы используете аналогичный трюк. Во-первых, уменьшите TM, чтобы использовать только 1, 0 и B. Мы снова уменьшим набор символов на меньший, но должны быть немного умнее, потому что на ленте бесконечно много пробелов. Это. Мы будем использовать следующую кодировку:

  1. 11 кодирует число 1
  2. 1B кодирует число 0
  3. BB кодирует пробел.

Когда мы запускаем ТМ, используя эту схему кодирования, если мы когда-либо пройдем мимо конца ранее просмотренной ленты, мы встретим бесконечно много пустых символов, которые, к счастью, соответствуют нашей кодировке пустого символа.

Единственная проблема заключается в том, как закодировать ввод в этот новый TM, чтобы мы могли преобразовать его в указанный выше формат. Поскольку во вводе TM не может быть пробелов, ввод должен быть закодирован в унарном коде. Затем мы оговариваем, что для любой двоичной строки w старой машины входными данными новой машины должно быть унарное кодирование числа 1w. Затем у нас есть первый шаг машины — преобразовать унарную кодировку в указанную выше двоичную кодировку. Это можно сделать с помощью всего двух символов, но детали очень сложны, и я снова собираюсь их использовать. Если хотите, можете уточнить детали.

Надеюсь это поможет!

person templatetypedef    schedule 27.01.2011
comment
У меня общий вопрос: В теоретическом сообществе SC какие типы кодировок разрешено делать вручную, а какие нужно делать в TM? Вы говорите, что машина должна преобразовывать унарный код в наш специальный двоичный, но мы разрешаем преобразование исходного двоичного кода в унарный оператору. Поэтому я предполагаю, что ручные преобразования разрешены до определенной степени. Но если мы позволим оператору выполнять любое произвольно сложное преобразование, он сможет вычислить всю программу TM вручную и вызвать это преобразование ввода, поэтому должен существовать порог. Есть ли эмпирическое правило о том, где? - person Cerno; 11.07.2019
comment
@Cerno Здесь нужно учитывать ряд деталей. Например, предположим, что вы хотите создать двухсимвольную НП, где один символ является пробелом. Поскольку большинство определений НП требуют, чтобы входная строка не содержала пустого символа, единственным законным способом запустить машину будет запись ввода в унарном виде. Отсюда возникает вопрос: у меня есть машина, на которой единственные входные данные, которые я могу предоставить, должны быть записаны в унарном коде, так как же мне выбрать кодирование более сложных объектов? Затем это приведет вас к разработке схемы кодирования, которая соответствует вашим потребностям. (продолжение...) - person templatetypedef; 11.07.2019
comment
@Cerno Таким образом, в этом смысле речь идет не столько о том, чтобы оператор заранее выполнял некоторые вычисления, сколько об определении ожидаемого поведения TM, нам нужно было бы выяснить, что представляет ввод и какой результат мы хотели бы получить. видеть. Нам нужно было бы сказать для каждого возможного ввода, должен ли этот ввод быть принят или не принят. Полезно попытаться подумать об этом с точки зрения языков. Какой набор строк вы хотите, чтобы TM принимал? Если вы попытаетесь сделать кодировку формы ТМ, которые останавливаются, переходят к строкам четной длины, а другие переходят к строкам нечетной длины (продолжение...) - person templatetypedef; 11.07.2019
comment
@Cerno ... тогда вы обнаружите, что нотация вашего конструктора наборов начинает выглядеть немного неправильно или у вас возникнут проблемы с определением вещей. Надеюсь это поможет! - person templatetypedef; 11.07.2019

Первый из них прост, представьте себе компьютер, двоичный файл....

В первом вы можете закодировать каждый символ в представлении 0,1.

Во втором вы можете сделать 2 вещи:

  1. Думайте о B как о 0 ... неважно, как вы это называете ... и тогда у вас есть машина 0,1, и вы можете кодировать все, что хотите.

  2. Закодируйте символы как серию единиц, разделенных буквой B. N-й символ будет содержать N единиц.

person Yochai Timmer    schedule 27.01.2011
comment
да первое не проблема и легко формально доказуемо. если в M 2^k ленточных символов, то M' может использовать k ячеек каждая для хранения одного символа ленточного алфавита M. Заготовка также может быть закодирована аналогичным образом. Проблема заключается в сокращении символов ленты до двух - person AnkurVj; 27.01.2011