Поскольку прошло некоторое время и ответ, вероятно, больше не нужен, я думаю, я предложу решение для будущих студентов, которые ищут пример того, как один язык может быть распознан машиной Тьюринга.
Вот идея. Мы возьмем в качестве ленточного алфавита {0, 1, a, b, c, d} и создадим одноленточную однолинейную машину Тьюринга, которая распознает w w ^ R w. Машина будет работать в пять этапов:
- Заменить 0 и 1 в префиксе w w ^ R на a и b.
- Посмотрите, является ли w w ^ R палиндромом.
- Восстановите ленту в ее первоначальное состояние.
- Заменить 0 и 1 в суффиксе w ^ R w на c и d.
- Посмотрите, является ли w ^ R палиндромом.
Обратите внимание, что это просто один простой (для меня, чтобы понять, то есть) способ показать, что существует машина Тьюринга для распознавания этого языка. Естественно, показ того, что существует алгоритм для решения этой проблемы в любой эквивалентной по Тьюрингу системе вычислений, так же хорош (это доказывает, что существует ТМ) ... все же, это обрисовывает в общих чертах конструкцию одной такой ТМ. Также обратите внимание, что может быть более простой, эффективный или более интуитивно понятный TM для решения этой проблемы ... опять же, это только один подход.
Шаг 1 будет работать следующим образом:
- Условие: лента начинается с пробела, содержит любую строку в (0 + 1) * и сопровождается бесконечной строкой пустых квадратов.
Постусловие: останавливается, если лента пуста или длина не кратна 3; иначе лента начинается с пробела, затем следует (a + b) ^ 2n (c + d) ^ n, за которым следует бесконечная строка пробелов.
- Переместить вправо.
- Если пусто, прекратите прием. В противном случае сканируйте вправо, пока не найдете пустой квадрат с лентой, затем двигайтесь влево.
- Измените ленту на c, если 0 или d, если 1.
- Сканируйте влево, пока не найдете пустой квадрат с лентой. Двигайся вправо.
- Если лента 0 или 1, измените на a или b и двигайтесь вправо. Если лента c или d, отменить отклонение.
- Если лента 0 или 1, измените на a или b и двигайтесь вправо. Если лента c или d, отменить отклонение.
- Если лента c или d, отсканируйте ее в начало и перейдите к шагу 2. В противном случае отсканируйте вправо до c или d, а затем сдвиньте влево.
- Измените ленту на c, если 0 или d, если 1.
- Сканируйте влево, пока не найдете a или b. Двигайся вправо.
- Повтор, начиная с 4.
Шаг 2 будет работать следующим образом:
Шаг 3 будет работать следующим образом
Шаг 4 и 5 работают так же, как шаги 1 и 2, за исключением того, что вы работаете в обратном направлении (лента теперь выглядит как D (c + d) ^ n (a + b) ^ 2n D *, и вы должны проверить, часть (a + b) ^ 2n является палиндромом.
Любая строка, проходящая оба эти теста, должна иметь форму w w ^ R w, где w находится в (0 + 1) *.