Машины Тьюринга
[89/37%]Пусть — одноленточная ДМТ, заданная пятёркой (, , где , а задана следующей таблицей:
| B | |||
|---|---|---|---|
Постройте диаграмму переходов. Каким будет вычисление на входе ? На входе ?
Проследите работу ДМТ из примера 4.1 и покажите вычисление на входах aabba и bbbab.
Рассмотрим ДМТ с , , и
| B | |||
|---|---|---|---|
Проследите работу на входах aaab, abaa и aaaa.
Чему равен ?
Рассмотрим ДМТ , с , , и
| B | |||
|---|---|---|---|
Проследите работу на входах aaabba и .
Какую функцию вычисляет ?
Рассмотрим ДМТ , в которой и такие же, как у , а совпадает с машины , за исключением
| B | |||
|---|---|---|---|
.
Чему равен ?
Покажите, что каждый регулярный язык тьюринг-разрешим.
Пусть тьюринг-разрешим. Покажите, что язык также тьюринг-разрешим. То есть для данной ДМТ , вычисляющей характеристическую функцию языка , подробно опишите, как изменить , чтобы получить новую ДМТ , такую что вычисляет характеристическую функцию . Можете ли вы сделать то же самое для тьюринг-допустимых языков?
Покажите, что является тьюринг-допустимым языком.
Покажите, что следующая функция является тьюринг-вычислимой:
Покажите, что является тьюринг-разрешимым языком.
Покажите, что функция при является тьюринг-вычислимой.
Найдите машину Тьюринга, которая вычисляет функцию
Покажите, что при функция на натуральных числах является тьюринг-вычислимой.
Покажите, что при любом функция
на строках над алфавитом является тьюринг-вычислимой.
Для каждой из следующих ДМТ проследите работу машины и покажите вычисление на заданных входах:
ДМТ из примера 4.3 на входах 0100 и 01010.
ДМТ из примера 4.5 на входах 0110 и 01010.
ДМТ из примера 4.6 на входах и .
ДМТ из примера 4.9 при и , от конфигурации до ().
Постройте ДМТ для процедур и из примера 4.9.
Постройте ДМТ, разрешающие следующие языки:
.
.
.
.
, где обозначает число вхождений буквы в строку .
.
Постройте ДМТ, вычисляющие следующие функции:
на натуральных числах .
на натуральных числах , , где — фиксированное положительное целое число.
insert , где и — строки над , а — натуральное число, представленное как .
на натуральных числах .
на натуральных числах и .
на натуральном числе .
Для произвольной заданной ДМТ постройте новую ДМТ такую, что допускает в точности то же множество строк, что и (то есть ), но когда останавливается, её лента всегда пуста (то есть финальная конфигурация всегда равна ).
- Рассмотрим регулярный язык .
Найдите ДМТ только для чтения, допускающую . [Подсказка: выполняет два прохода по входному слову. На первом проходе она проверяет, что , и находит . На втором проходе она проверяет, что .]
Найдите все возможные последовательности пересечений на произвольном входе.
Для любых двух последовательностей пересечений машины и для любого символа определите, выполняется ли . Основываясь на этом отношении между последовательностями пересечений, постройте НКА , допускающий .
Можете ли вы найти НКА с меньшим множеством состояний, чем у , допускающий ?
- В доказательстве теоремы 4.10 мы заметили, что если ДМТ в ходе вычисления на входе посещает некоторые пустые ячейки справа от входного слова, то НКА после считывания всех символов входного слова должен переходить в другие состояния с помощью -переходов, чтобы решить, допускает ли он входное слово. Покажите, что в этом нет необходимости. То есть можно исключить все -переходы в и изменить множество финальных состояний так, чтобы оно включало все последовательности пересечений , содержащие в качестве последней пары, такие что . Объясните, как определить итоговое множество .
- Рассмотрим расширение ДМТ только для чтения. ДМТ только для чтения с одним камешком (или, короче, ДМТ с одним камешком) — это ДМТ только для чтения с дополнительной возможностью помечать определённую ячейку входной ленты, помещая на неё камешек. Машина имеет только один камешек, поэтому в любой момент времени на ленте может быть помечен не более чем один символ. Точнее, ДМТ с одним камешком — это ДМТ , где для некоторого конечного множества , , , и удовлетворяет следующим свойствам: для любых и ,
-
для некоторых и .
-
равно либо , либо для некоторых и .
-
равно либо , либо для некоторых и .
-
не определена. (Здесь верхний индекс * обозначает камешек. Таким образом, состояние означает, что держит камешек в своём конечном управлении, и все символы на ленте непомечены; а состояние означает, что камешек находится во входной ячейке. Заметим, что свойство (i) означает, что не может пометить ячейку, если в данный момент она не держит камешек в своём конечном управлении.)
-
Постройте ДМТ с одним камешком такую, что на каждом входе длины машина останавливается ровно через шагов.
-
Покажите, что для каждой ДМТ только для чтения существуют такие константы и , что если останавливается на входе длины , то она обязательно останавливается не более чем за шагов.
-
Покажите, что для каждой ДМТ с одним камешком существуют такие константы и , что если останавливается на входе длины , то она обязательно останавливается не более чем за шагов.
-
Покажите, что если — регулярный язык, то существует ДМТ с одним камешком, допускающая язык . (Напомним, что определён в примере 2.44 как .)
- В этом упражнении мы докажем, что язык, допускаемый ДМТ с одним камешком, обязательно является регулярным. Предположим, что — ДМТ с одним камешком, где . Также предположим, что работает на входе и посещает ячейки , причём в ячейке находится символ , для (то есть ). Для каждого , , определим частичную функцию следующим образом: если для некоторых и , то — это следующее состояние , в котором возвращается в ячейку . В противном случае не определена. То есть функция кодирует состояния в моменты, когда она посещает ячейку с камешком в ячейке (аналогично последовательности пересечений ДМТ только для чтения). Заметим, что зависит как от машины , так и от входного слова .
Рассмотрим язык над алфавитом , где — множество всех частичных функций из в , причём тогда и только тогда, когда для всех выполняется относительно машины и строки . (Заметим: если , то в не более символов, каждый из которых кодирует одну частичную функцию из в .) Покажите, что существует ДМТ только для чтения, допускающая ; то есть покажите, что ДМТ только для чтения может проверить, корректно ли каждый символ , хранящийся на второй дорожке ячейки , кодирует функцию . [Подсказка: не может пошагово моделировать , чтобы проверить корректность значений , поскольку у нет камешка, и поэтому, покинув ячейку , она не может запомнить, где находилась. Вместо этого нужно лишь проверить согласованность функции с её соседями и , аналогично задаче проверки согласованности соседних последовательностей пересечений в теореме 4.10.]
Пусть — язык над алфавитом , такой что , если (1) , определённый в пункте (a) выше, и (2) ДМТ с одним камешком допускает входное слово , где , если , и , если . Покажите, что существует ДМТ только для чтения, допускающая . [Подсказка: использует информацию для моделирования следующим образом: если держит камешек в своём состоянии (то есть если находится в состоянии ), то моделирует пошагово. Если оставляет камешек в ячейке , то использует на второй дорожке, чтобы определить состояние, в которое она перейдёт, когда вернётся в ячейку .]
Покажите, что если — ДМТ с одним камешком, то регулярен. [Подсказка: покажите, что язык является образом гомоморфизма на ; см. пример 2.35.]
Рассмотрим ещё одно расширение ДМТ только для чтения. ДМТ называется ДМТ только для чтения/стирания, если на каждом шаге она может только считывать входной символ и/или стирать его (то есть заменять исходный символ на ). То есть ДМТ является ДМТ только для чтения/стирания, если , и функция переходов удовлетворяет следующему свойству: для любых и , равно либо , либо для некоторых и .
Покажите, что существует ДМТ только для чтения/стирания, допускающая язык .
Покажите, что существует тьюринг-разрешимый язык, не допускаемый никакой ДМТ только для чтения/стирания.
Найдите трёхленточную ДМТ , которая вычисляет функцию на натуральных числах и .
Докажите, что для любого языка существует ДМТ с бесконечным числом лент, допускающая .
Опишите подробно последнюю часть одноленточной ДМТ из теоремы 4.11, моделирующей двустороннюю ДМТ . То есть покажите инструкции , которые восстанавливают результат из двухдорожечной формы в однодорожечную форму. Например, она должна преобразовывать конфигурацию ленты
в конфигурацию , а также преобразовывать конфигурацию ленты
в конфигурацию .
Опишите подробно шаг моделирования двусторонней ДМТ из теоремы 4.13, моделирующей трёхленточную ДМТ . То есть покажите инструкции , которые сдвигают головку влево, чтобы собрать информацию о лентах , а затем сдвигают её вправо, чтобы на основе этой информации выполнить инструкцию .
Для заданной двусторонне бесконечной одноленточной ДМТ с и постройте многоленточную ДМТ , которая на входе моделирует на входе не более чем за шагов, так что она останавливается тогда и только тогда, когда останавливается на входе за не более чем шагов.
Постройте многоленточные ДМТ, допускающие следующие языки. Для каждого языка обсудите, сколько времени экономит ваша машина по сравнению с одноленточной ДМТ, использующей тот же алгоритм.
.
.
.
.
.
Постройте многоленточные ДМТ, вычисляющие следующие функции. Для каждой функции обсудите, сколько времени экономит ваша машина по сравнению с одноленточной ДМТ, использующей тот же алгоритм.
на строках .
на натуральных числах .
на положительных целых числах , , где не фиксировано.
максимальное число вхождений одного и того же положительного целого числа в , где не фиксировано. (Например, и .
список , отсортированный по возрастанию, где — положительные целые числа, а не фиксировано.
Двумерная ДМТ — это МТ, «лента» которой представляет собой двумерную плоскость, разделённую на бесконечное число ячеек (см. рисунок 4.15). Двумерная ДМТ работает подобно двусторонней ДМТ, за исключением того, что на каждом шаге она может сдвигать головку вверх (U), вниз (D), влево (L), вправо (R) или оставаться на месте (S). Изначально входное слово хранится в горизонтальной строке, и головка находится над пустой ячейкой справа от него. Когда машина останавливается, результат также хранится в горизонтальной строке (но не обязательно в той же строке, что и вход), при этом головка указывает на пустую ячейку справа от него. Все остальные символы, не находящиеся в этой строке, игнорируются.
Рисунок 4.15: Двумерная ДМТ.
Рисунок 4.16: Изменение конфигурации в упражнении 6(b).
Опишите, как представить конфигурацию двумерной ДМТ. Используя эту нотацию, дайте формальное определение понятия функции, вычисляемой двумерной ДМТ.
Разработайте двумерную ДМТ, переводящую начальную конфигурацию ленты (a) в новую конфигурацию (b), как показано на рисунке 4.16.
Покажите, что двумерная ДМТ может быть смоделирована многоленточной ДМТ. Следовательно, все функции, вычисляемые двумерными ДМТ, являются тьюринг-вычислимыми.
Мы говорим, что автомат с магазинной памятью является детерминированным, если для любой конфигурации применима не более чем одна инструкция. Покажите, что любой детерминированный автомат с магазинной памятью может быть смоделирован двухленточной ДМТ. (В разделе 4.7 мы покажем, что все контекстно-свободные языки являются тьюринг-допустимыми.)
Рассмотрим RAM более подробно. RAM задаётся списком инструкций, пронумерованных от 1 до . Инструкция относится к одному из типов, показанных на рисунке 4.17. (Заметим: мы приводим инструкции только в форме прямой адресации. Как обсуждалось в тексте, они также могут использовать константы или косвенную адресацию.) Изначально все регистры RAM содержат
| Инструкция | Значение |
|---|---|
| считать следующее входное целое число в | |
| записать на выходную ленту | |
| записать в | |
| записать в | |
| записать в | |
| записать в | |
| записать в (записать 0, если) | |
| перейти к инструкции | |
| IF-THEN | если, то перейти к инструкции |
| : Рисунок 4.17: Инструкции RAM. |
значение 0, выходная лента «пуста» (что обозначается специальным символом, например B), а входная лента содержит конечное число неотрицательных целых чисел , хранящихся в ячейках с 1 по , причём ячейка пуста. RAM начинает работу с инструкции 1 и после выполнения каждой инструкции переходит к инструкции , если инструкция относится к одному из первых семи типов, либо переходит к инструкции , заданной в инструкции , если инструкция относится к одному из последних двух типов. RAM останавливается, когда достигает инструкции .
Для произвольного RAM определим . Мы говорим, что вычисляет функцию , если на входе машина останавливается с выходом .
Разработайте RAM, вычисляющую функцию sort из упражнения 5(e) раздела 4.3.
Приведите подробности устройства многоленточной ДМТ, моделирующей инструкцию RAM.
Покажите, что каждая тьюринг-вычислимая частичная функция , как определено в разделе 4.2, вычислима с помощью RAM.
Найдите грамматику такую, что .
Найдите грамматику такую, что .
Найдите грамматику такую, что .
Найдите грамматику такую, что .
Рассмотрим грамматику с нетерминалами , терминалами и правилами
Приведите вывод строки ccbaabcba.
Чем является ? Приведите краткое обоснование вашего ответа.
Рассмотрим грамматику с нетерминалами , терминалом и правилами
Приведите вывод .
Чем является ? Приведите краткое обоснование вашего ответа.
Постройте грамматики для каждого из следующих языков. Также приведите (i) вывод заданной строки и (ii) доказательство того, почему ваша грамматика не порождает ни одной строки, не принадлежащей языку.
. [Подсказка: следуя идее упражнения 2 выше, порождайте на -й итерации сентенциальную форму с копиями и копиями .]
.
.
. [Подсказка: аналогично пункту (a) выше, порождайте на -й итерации сентенциальную форму с копиями , копиями и копиями .]
.
.
.
cbaabcbaa.
.
Найдите грамматику такую, что для всех .
Найдите грамматику такую, что для всех с выполняется .
Рассмотрим новую вычислительную модель, называемую маркированными алгоритмами Маркова (Labeled Markov Algorithm, LMA). LMA определяется как тройка , где — входной алфавит, — рабочий алфавит с , а — программа, состоящая из конечной последовательности инструкций. Каждая инструкция в имеет вид
где , а — положительное целое число ( называется правилом вывода, а называется меткой следующей инструкции). Инструкция ( : ; goto ;) может быть применена к строке , если является подстрокой . Применение этой инструкции к порождает новую строку путём замены самого левого вхождения в на .
На входе LMA работает следующим образом: в любой момент вычисления она хранит текущую сентенциальную форму и текущую метку инструкции . Изначально — это входная строка, а текущая метка инструкции — . На каждом шаге она находит наименьшее целое число , где — текущая метка инструкции, такое что инструкция применима к . Затем она применяет к , чтобы получить новую сентенциальную форму . Она заменяет на и заменяет текущую метку инструкции на метку следующей инструкции . Если ни одна инструкция с не применима к текущей сентенциальной форме , то машина останавливается с результатом . (В частности, если текущая метка инструкции равна , где больше числа инструкций в , то машина останавливается.)
Для произвольной LMA определим . Мы говорим, что вычисляет частичную функцию , если останавливается на каждом входе с финальной сентенциальной формой , и не останавливается ни на каком .
Разработайте LMA , вычисляющий функцию для .
Покажите, что каждая тьюринг-вычислимая функция вычислима с помощью LMA.
Покажите, что для любого LMA язык является тьюринг-допустимым.
Покажите, что каждая частичная функция , вычисляемая LMA , является тьюринг-вычислимой.
Покажите, что add является примитивно рекурсивной.
Покажите, что mult является примитивно рекурсивной.
Покажите, что постоянные функции , , являются примитивно рекурсивными.
Покажите, что функция minus: , определённая как
является примитивно рекурсивной.
Предположим, что примитивно рекурсивна. Тогда функция , определённая как
также является примитивно рекурсивной.
Покажите, что следующие функции примитивно рекурсивны:
Покажите, что следующие функции примитивно рекурсивны:
Для каждого функция примитивно рекурсивна.
Следующие функции примитивно рекурсивны.
prime
Пусть и при -я цифра справа от десятичной точки в десятичном разложении . Докажите, что примитивно рекурсивна.
Покажите, что следующие функции примитивно рекурсивны:
.
уровней. [Подсказка: сначала рассмотрите более общую функцию уровней.]
.
число простых чисел, не превосходящих .
наименьшее общее кратное и .
число цифр в десятичной записи .
-я по значимости цифра десятичной записи , если (и , если или ).
Что не так со следующим доказательством примера 4.25?
Мы докажем это индукцией по , как в примере 4.28. При ; следовательно, примитивно рекурсивна. При . Поскольку примитивно рекурсивна и, по индуктивному предположению, примитивно рекурсивна, получаем, что также примитивно рекурсивна. Отсюда следует, что примитивно рекурсивна при всех , а значит, примитивно рекурсивна.
Предположим, что — примитивно рекурсивный предикат. Покажите, что следующая функция также примитивно рекурсивна:
Предположим, что примитивно рекурсивна. Покажите, что следующие функции также примитивно рекурсивны:
.
.
Предположим, что примитивно рекурсивна и удовлетворяет и при всех . Покажите, что функция целое число такое, что также примитивно рекурсивна.
Предположим, что и обе примитивно рекурсивны. Покажите, что следующая функция также примитивно рекурсивна:
Предположим, что примитивно рекурсивна. Покажите, что следующая функция также примитивно рекурсивна:
Покажите, что функция , определённая как
является функцией спаривания.
Покажите, что функция Фибоначчи примитивно рекурсивна.
Покажите, что функция
является гёделевой нумерацией.
Покажите, что следующие функции примитивно рекурсивны:
и , если .
.
Покажите, что функция , определённая как , , примитивно рекурсивна.
Функция sort : отображает число в число , где — перестановка такая, что . Покажите, что sort примитивно рекурсивна.
Покажите, что следующие функции являются функциями спаривания.
.
, где , если , и , если .
Пусть определена как , где — -е простое число.
Покажите, что сюръективна, примитивно рекурсивна и монотонна. Также покажите, что почти инъективна в том смысле, что если и если , то при всех , , и при всех , .
Проверьте, что если использовать в качестве гёделевой нумерации, то функции size, item и функции из примера 4.35 остаются примитивно рекурсивными. (Здесь — число элементов в последовательности , не считая завершающих нулей.)
Пусть — неотрицательных целых чисел. Докажите, что если , то .
Предположим, что и для некоторых примитивно рекурсивных и . Также предположим, что при всех . Докажите, что также примитивно рекурсивна. (Заметим, что решение 1 примера 4.38 фактически использовало этот результат.)
Покажите, что следующие функции примитивно рекурсивны:
число вхождений целого числа в последовательность .
, где — десятичная запись (например, ).
Мы можем расширить понятие примитивно рекурсивных функций на функции из в , где — множество целых чисел. Всё, что для этого нужно, — это рассматривать пару как представление целого числа из : если , то она представляет , иначе она представляет . Покажите, что следующие функции над целыми числами примитивно рекурсивны:
скалярное произведение двух -мерных векторов и , если (и равно 0 в противном случае). (Мы рассматриваем список как -мерный целочисленный вектор, -й элемент которого — это целое число, представленное парой ; то есть оно равно , если , и равно , если .)
определитель матрицы , если для некоторого (и равен 0 в противном случае). (Мы рассматриваем как целочисленную матрицу размера , где равно целому числу, представленному парой .)
Мы говорим, что последовательность сбалансирована, если существует разбиение на два подмножества и (то есть и ) такое, что . Докажите, что предикат сбалансирована примитивно рекурсивен.
Покажите, что функция , которая объединяет две отсортированные последовательности в одну отсортированную последовательность (и выдаёт 0, если хотя бы одна из двух входных последовательностей не отсортирована), примитивно рекурсивна.
Докажите, что sort примитивно рекурсивна, используя алгоритм сортировки слиянием.
- Предположим, что и — две примитивно рекурсивные функции. Покажите, что следующая функция примитивно рекурсивна:
- Предположим, что и все примитивно рекурсивны. Покажите, что следующая функция примитивно рекурсивна:
- Предположим, что и все примитивно рекурсивны. Покажите, что следующая функция примитивно рекурсивна:
Предположим, что и все примитивно рекурсивны. Пусть и — функции, определённые следующими формулами:
Покажите, что и обе примитивно рекурсивны:
Покажите, что если множество можно представить в виде для некоторого рекурсивного предиката , то является р.п. Как следствие,
Пусть
с порядком .
и .
Исследуйте .
Пусть и . Покажите, что следующие функции примитивно рекурсивны:
.
.
подстрока строки , начинающаяся с -го символа и имеющая длину , если и ; и 0 в противном случае.
является подстрокой .
head является префиксом .
tail является суффиксом .
Разработайте многоленточную машину Тьюринга, которая «складывает» две строки над , то есть на входах вычисляет такое, что .
Завершите доказательство части теоремы 4.47, касающейся примитивной рекурсии. А именно, для данных многоленточных ДМТ и , вычисляющих функции и , разработайте многоленточную ДМТ , вычисляющую функцию , которая определена из функций и с помощью примитивной рекурсии.
Докажите, что каждая частично рекурсивная функция может быть получена из начальных функций конечным числом применений операций суперпозиции и примитивной рекурсии и одним применением операции неограниченной минимизации.
Покажите, что следующие функции, определённые на , примитивно рекурсивны:
является подпоследовательностью , где является подпоследовательностью , если существует последовательность целых чисел такая, что для .
число вхождений в качестве подстроки в .
строка, полученная из заменой каждого вхождения в на . Например, .
длина самой длинной строки такой, что и , и встречаются в качестве подстрок в .
Покажите, что каждый контекстно-свободный язык примитивно рекурсивен.
Пусть , а -я цифра справа от десятичной точки в десятичном разложении , где . Покажите, что является рекурсивной функцией. Является ли примитивно рекурсивной функцией?
Пусть — грамматика над алфавитом . Покажите, что следующие функции частично рекурсивны:
минимальное число шагов в выводе , если , и в противном случае.
минимальная длина (число символов) вывода , если , и в противном случае.
, если существует вывод , более короткий, чем любой вывод , при условии, что оба и принадлежат , и в противном случае.
Пусть Является ли рекурсивной функцией?
(Функция Аккермана) Определим функцию следующим образом:
Пусть . Чему равно ? ? Покажите, что каждая примитивно рекурсивна.
Покажите, что является рекурсивной функцией.
Покажите, что для каждой примитивно рекурсивной функции существует целое число такое, что для почти всех (т.е. для всех, кроме конечного числа, ).
Покажите, что не является примитивно рекурсивной.