ГЛАВА 9
Неразрешимость
Эта глава начинается повторением рассуждений из раздела 8.1, которые неформально обосновывали существование проблем, не разрешимых с помощью компьютера. Недостатком тех «правдоподобных рассуждений» было вынужденное пренебрежение реальными ограничениями, возникающими при реализации языка С (или другого языка программирования) на любом реальном компьютере. Однако эти ограничения, вроде конечности адресного пространства, не являются фундаментальными. Наоборот, с течением времени мы вправе ожидать от компьютеров неограниченного роста таких количественных характеристик, как размеры адресного пространства, оперативной памяти и т.п.
Сосредоточившись на машинах Тьюринга, для которых ограничения такого рода отсутствуют, можно лучше понять главное — принципиальные возможности вычислительных устройств, если не сегодня, то в перспективе. В этой главе дается формальное доказательство того, что никакая машина Тьюринга не может решить следующую задачу.
Допускает ли данная машина Тьюринга сама себя (свой код) в качестве входа?
Из раздела 8.6 известно, что на машинах Тьюринга можно имитировать работу реальных компьютеров, даже не имеющих сегодняшних ограничений. Поэтому независимо от того, насколько ослаблены эти практические ограничения, у нас будет строгое доказательство, что указанную задачу нельзя решить с помощью компьютера.
Далее мы разделим проблемы, разрешимые с помощью машин Тьюринга, на два класса. В первый класс войдут те из них, которые имеют алгоритм решения (т.е. машину Тьюринга, которая останавливается независимо от того, допускает она свой вход или нет). Во второй класс войдут проблемы, разрешимые лишь с помощью таких машин Тьюринга, которые с недопустимыми входами могут работать бесконечно. В последнем случае проверить допустимость входа весьма проблематично, поскольку независимо от того, сколь долго работает МТ, неизвестно, допускается вход или нет. Поэтому мы сосредоточимся на методах доказательства «неразрешимости» проблем, т.е. что для них не существует алгоритма решения независимо от того, допускаются ли они машиной Тьюринга, которая не останавливается на некоторых входах, или нет.
Будет доказано, что неразрешима следующая проблема.
Допускает ли данная машина Тьюринга данный вход?
Затем из неразрешимости этой проблемы будет выведена неразрешимость ряда других проблем. Например, будет показано, что все нетривиальные задачи, связанные с языком машины Тьюринга, неразрешимы, как и многие проблемы, в которых речь вообще не идет о машинах Тьюринга, программах или компьютерах.
9.1. Неперечислиллый язык
Напомним, что язык L является рекурсивно-перечислимым (РП-языком), если L = L(M) для некоторой МТ М. В разделе 9.2 будут введены так называемые «рекурсивные», или «разрешимые», языки, которые не только рекурсивно перечислимы, но и допускаются некоторой МТ, останавливающейся на всех своих входах независимо от их допустимости.
Наша дальняя цель — доказать неразрешимость языка, состоящего из пар (М, w), которые удовлетворяют следующим условиям.
М— машина Тьюринга (в виде соответствующего двоичного кода) с входным алфавитом {0, 1}.
w — цепочка из символов 0 и 1.
М допускает вход w.
Если эта проблема неразрешима при условии, что алфавит — двоичный, то она, безусловно, будет неразрешимой и в более общем виде, при произвольном входном алфавите.
Прежде всего, необходимо сформулировать эту проблему как вопрос о принадлежности некоторому конкретному языку. Поэтому нужно определить такое кодирование машин Тьюринга, в котором использовались бы только символы 0 и 1 независимо от числа состояний МТ. Имея такие коды, можно рассматривать любую двоичную цепочку как машину Тьюринга. Если цепочка не является правильным представлением какой-либо МТ, то ее можно считать представлением МТ без переходов.
Для достижения промежуточной цели, представленной в данном разделе, используется «язык диагонализации» Ld. Он состоит из всех цепочек w, каждая из которых не допускается машиной Тьюринга, представленной этой цепочкой. Мы покажем, что такой машины Тьюринга, которая бы допускала Ld, вообще не существует. Напомним: доказать, что язык не допускается никакой машиной Тьюринга, значит доказать нечто большее, чем то, что данный язык неразрешим (т.е. что для него не существует алгоритма, или МТ, которая останавливается на всех своих входах).
Роль языка аналогична роли гипотетической программы Н2 из раздела 8.1.2, которая печатает hello, world, если ей на вход подается программа, не печатающая hello, world при чтении собственного кода. Точнее, как не существует Н2, так и Ld не может быть допущен никакой машиной Тьюринга. Реакция первой на саму себя как на вход приводит к противоречию. Аналогично, если бы Ld допускался некоторой машиной Тьюринга, то она противоречила бы самой себе при обработке своего собственного кода.
9.1.1. Перечисление двоичных цепочек
В дальнейшем нам понадобится приписать всем двоичным цепочкам целые числа так, чтобы каждой цепочке соответствовало одно целое число и каждому числу — одна цепочка. Если w — двоичная цепочка, то 1 w рассматривается как двоичное представление целого числа i. Тогда vv называется i-й цепочкой. Таким образом, е есть первая цепочка, О — вторая, 1 — третья, 00 — четвертая, 01 — пятая, и так далее. Это равносильно тому, что цепочки упорядочены по длине, а цепочки равной длины упорядочены лексикографически. В дальнейшем z’-я цепочка обозначается через w-v
9.1.2. Коды машин Тьюринга
Наша следующая цель — разработать для машин Тьюринга такой код, чтобы всякую МТ с входным алфавитом {0, 1} можно было рассматривать как двоичную цепочку. Мы только что показали, как перечислить двоичные цепочки. Поэтому у нас есть идентификация машин Тьюринга целыми числами, и можно говорить об «г-ой машине Тьюринга М». Для того чтобы представить МТ М= (Q, {0, 1}, Г, 5, q,, В, F) как двоичную цепочку, нужно приписать целые числа состояниям, ленточным символам и направлениям L и R.
Будем предполагать, что состояниями являются qh q2, …, qr при некотором г. Состояние q 1 всегда будет начальным, a q2 — единственным допускающим. Заметим, что поскольку можно считать, что МТ останавливается, попадая в допускающее состояние, то одного такого состояния всегда достаточно.
Предположим, что ленточными символами являются Х\, Х2, …. Л’^ при некотором s. Ху всегда будет символом 0, Х2 — 1, аХ3 — В, пробелом (пустым символом). Остальным же ленточным символам целые числа могут быть приписаны произвольным образом.
Направление L обозначается как £)(, а направление R — как D2.
Поскольку состояниям и ленточным символам любой МТ М можно приписать целые числа не единственным образом, то и кодировок МТ будет, как правило, более одной. Но в дальнейшем это не будет играть роли, так как мы покажем, что МТ М с L(M) = L& вообще непредставима никаким кодом.
Установив, какие целые числа соответствуют каждому из состояний, символов и направлений, можно записать код функции переходов 8. Пусть <5(<7;, Xj) = (qk, Xh Dm) есть одно из правил перехода, где i,j, к, I, т — некоторые целые числа. Это правило кодируется цепочкой 0’10’10k10’l0m. Заметим, что каждое из чисел i,j, к, I, т не меньше единицы, так что в коде каждого отдельного перехода нет двух 1 подряд.
Код МТ М состоит из кодов всех ее переходов, расположенных в некотором порядке и разделенных парами единиц:
С,11С211 … Сп ,11СП, где каждое С означает код одного перехода М.
Пример 9.1. Рассмотрим МТ
M=({qhq2,q3}, {0, 1}, {0, 1 ,B},S,quB, {q2}), где функция 8 состоит из следующих правил.
<5(<7ь 1 ) = (<7з, О, Л)
= (</,, 1,Л)
= (<72, 0, Л)
<5(<7з, 5) = (<7З, 1,1) Переходы кодируются соответственно следующим образом.
0100100010100 0001010100100 00010010010100 0001000100010010
Первое правило, например, можно записать как 8(qu Х2) = Хи D2), поскольку 1 = Х2, 0 ~ Х\ kR = D2. Поэтому его кодом будет цепочка 01102103101102, как и записано выше. Кодом всей М является следующая цепочка.
01001000101001100010101001001100010010010100110001000100010010 Заметим, что существуют другие возможные коды машины М. В частности, коды четырех ее переходов можно переставить 4! способами, что дает 24 кода для М. □
В разделе 9.2.3 нам понадобится кодировать пары вида (М, vr), состоящие из МТ и цепочки. В качестве такого кода последовательно записываются код М, 111 и цепочка w. Поскольку правильный код МТ не может содержать три единицы подряд, первое вхождение 111 гарантированно отделяет код М от w. Например, если М— это МТ из примера 9.1, a w— цепочка 1011, то кодом (М, w) будет цепочка, представленная в конце примера 9.1, с дописанной к ней последовательностью 1111011.
9.1.3. Язык диагонализации
В разделе 9.1.2 были определены коды машин Тьюринга, и теперь у нас есть вполне конкретное понятие М;, ‘7-й машины Тьюринга». Это МТ М, кодом которой является 1-я двоичная цепочка wv Многие целые числа вообще не соответствуют машинам Тьюринга. Например, 11001 не начинается с 0, а цепочка 0010111010010100 содержит три 1 подряд. Если Wj не является правильным кодом МТ, то будем считать, что М, — МТ, у которой одно состояние и нет переходов, т.е. М, для этих значений / есть МТ, которая сразу останавливается на любом входе. Итак, если Wi не является правильным кодом МТ, то ЦМ) есть 0.
Теперь можно дать весьма существенное определение.
- Язык диагонализации L& — это множество всех цепочек Wi, не принадлежащих L(Mi).
Таким образом, Ld состоит из всех цепочек w, каждая из которых не допускается соответствующей машиной Тьюринга с кодом w.
Из рис. 9.1 видно, почему Ld называется языком «диагонализации». Для всех i и j эта таблица показывает, допускает ли МТ Mj входную цепочку wj; 1 означает «да, допускает», а 0 — «нет, не допускает»[1]. Можно считать ю строку таблицы характеристическим вектором языка L(M); единицы в этой строке указывают на цепочки, которые принадлежат данному языку.
j ——
Числа на диагонали показывают, допускает ли М\ цепочку Чтобы построить язык нужно взять дополнение диагонали. Например, если бы таблица на рис. 9.1 была корректной, то дополнение диагонали имело бы начало 1, 0, 0, 0, …. Таким образом, Ld должен был бы содержать w\ = е и не содержать цепочки с vv2 по vv4, т.е. О, 1 и 00 и т.д.
Операция с дополнением диагонали для построения характеристического вектора языка, которому не может соответствовать никакая строка, называется диагоначизацией. Она приводит к желаемому результату, поскольку дополнение диагонали само по себе является характеристическим вектором, описывающим принадлежность некоторому языку, а именно— Ld. Действительно, этот характеристический вектор отличается от каждой из строк таблицы на рис. 9.1 хотя бы в одном столбце. Поэтому дополнение диагонали не может быть характеристическим вектором никакой машины Тьюринга.
9.1.4. Доказательство неперечислиллосги Ld
Развивая наши рассуждения о характеристических векторах и диагонали, формально докажем основной результат, касающийся машин Тьюринга, — МТ, допускающей язык Li, не существует.
Теорема 9.2. Язык Ld не является рекурсивно-перечислимым, т.е. не существует машины Тьюринга, которая допускала бы Ld.
Доказательство. Допустим, что Ld = L(M) для некоторой МТ М. Так как Ld — язык над алфавитом {0, 1}, М должна содержаться в построенной нами последовательности машин Тьюринга, поскольку эта последовательность содержит все МТ с входным алфавитом {0, 1}. Следовательно, в ней есть, по крайней мере, один код машины М, скажем,т.е. М— М\.
Выясним теперь, принадлежит ли Wj языку Ld.
Если м>\ принадлежит Ц, то М, допускает vv,. Но тогда (по определению Ld) w-, не принадлежит Ld, так как Ld содержит лишь такие Wj, для которых Щ не допускает Wj.
Точно так же, если w; не принадлежит L&, то М\ не допускает vv,. Но тогда (по определению Ld) W{ принадлежит LA.
Поскольку Wi не может одновременно и принадлежать, и не принадлежать Ld, приходим к противоречию с нашим предположением о том, что М существует. Таким образом, Ц не является рекурсивно-перечислимым языком. □
9.1.5. Упражнения к разделу 9.1
- Запишите следующие цепочки:
а) (*)w37;
б) w100.
- Запишите один из возможных кодов машины Тьюринга, изображенной на рис. 8.9.
- (!) Ниже приводятся определения двух языков, похожих на Ld, но все же отличных от него. Используя операции типа диагонализации, покажите, что каждый из них не может допускаться никакой машиной Тьюринга. Отметим, что при этом нужно использовать не диагональ, а какую-то другую бесконечную последовательность элементов матрицы, изображенной на рис. 9.1:
а) (*) множество всех w„ для которых М2\ не допускает м>\,
б) множество всех для которых Л/, не допускает vv2l.
- (!) Машины Тьюринга, рассмотренные до сих пор, имели входной алфавит {О, 1}. Допустим, мы хотели бы приписать целые числа всем машинам Тьюринга, независимо от их входного алфавита. Это, вообще говоря, невозможно. Ведь в то время, как имена состояний или рабочие символы на ленте (которые не являются входными), произвольны, каждый входной символ имеет значение. Например, языки (0ПГ | п > 1} и {anbn | п > 1} похожи, однако не совпадают и допускаются разными МТ. Допустим тем не менее, что у нас есть бесконечное множество символов {аь а2, …}, из которого выбираются все алфавиты МТ. Покажите, как можно приписать целые числа всем МТ, входной алфавит которых является конечным подмножеством этих символов.
9.2. Неразрешимая РП-пробдема
Итак, мы убедились, что существует проблема (язык диагонализации Ld), которая не допускается никакой машиной Тьюринга. Наша следующая цель — уточнить структуру рекурсивно-перечислимых языков (РП-языков), т.е. допустимых машинами Тьюринга, разбив их на два класса. В первый класс войдут языки, которым соответствует то, что обычно понимается как алгоритм, т.е. МТ, которая не только распознает язык, но и сообщает, что входная цепочка не принадлежит этому языку. Такая машина Тьюринга в конце концов всегда останавливается независимо от того, достигнуто ли допускающее состояние.
Второй класс языков состоит из тех РП-языков, которые не допускаются никакой машиной Тьюринга, останавливающейся на всех входах. Эти языки допускаются несколько неудобным образом: если входная цепочка принадлежит языку, то мы в конце концов об этом узнаем, но если нет, то машина Тьюринга будет работать вечно. Поэтому никогда нельзя быть уверенным, что данная входная цепочка не будет когда-нибудь допущена. Примером языка данного типа, как будет показано ниже, является множество таких закодированных пар (М, vv), в которых МТ М допускает вход vv.
9.2.1. Рекурсивные языки
Язык L называется рекурсивным, если L = L(M) для некоторой машины Тьюринга М, удовлетворяющей следующим условиям.
- Если w принадлежит L, то М попадает в допускающее состояние (и, следовательно, останавливается).
- Если w не принадлежит L, то М в конце концов останавливается, хотя и не попадает в допускающее состояние.
МТ этого типа соответствует интуитивному понятию «алгоритма» — правильно определенной последовательности шагов, которая всегда заканчивается и приводит к некоторому ответу. Если мы рассматриваем язык L как «проблему», то проблема L называется разрешимой, если она является рекурсивным языком. В противном случае проблема называется неразрешимой.
Существование алгоритма зачастую важнее, чем наличие некоторой МТ, решающей данную проблему. Как упоминалось ранее, машины Тьюринга, которые могут не останавливаться, не дают информации, необходимой для утверждения, что цепочка не принадлежит языку, т.е. они «не решают проблему». Таким образом, разделение проблем и языков на разрешимые (для них существует алгоритм решения) и неразрешимые часто важнее, чем разделение на рекурсивно перечислимые (для них существует МТ какого- либо типа) и неперечислимые (для них вообще не существует МТ). На рис. 9.2 представлено соотношение трех классов языков.
- Рекурсивные языки.
- Языки, которые рекурсивно перечислимы (РП), но не рекурсивны.
- Неперечислимые (не-РП) языки.
На рисунке указаны правильные положения не РП-языка Ld и «универсального языка» Lu, который, как мы вскоре докажем, является РП, но не рекурсивным.
Не-РП
Рис. 9.2. Соотношение рекурсивных, неперечислимых и РП-языков
Почему «рекурсивные»?
Современные программисты знакомы с понятием рекурсивной функции. Остается непонятным, что общего между рекурсивными функциями и машинами Тьюринга, которые всегда останавливаются. Еще хуже, что нерекурсивными, или неразрешимыми, называются языки, которые не распознаются никаким алгоритмом, хотя под «нерекурсивными» мы привыкли понимать вычисления настолько простые, что они не требуют обращений к рекурсивным функциям.
Термин «рекурсивный» как синоним слова «разрешимый» возник в период развития математики, предшествовавший появлению компьютеров. В качестве понятия вычисления обычно использовались формализмы, основанные на рекурсии (но не итерации или цикле). В этих системах понятий (не рассматриваемых здесь) было нечто от вычислений в таких языках функционального программирования, как LISP или ML. В этом смысле выражение «проблема рекурсивна» означало, что она «проста настолько, что можно записать рекурсивную функцию, которая всегда приводит к ее решению за конечное число шагов». И в наши дни применительно к машинам Тьюринга этот термин имеет в точности тот же смысл.
Термин «рекурсивно-перечислимый» — из того же семейства понятий. С помощью некоторой функции элементы языка можно выписать в некотором порядке, т.е. «перечислить» их. Языки, элементы которых можно перечислить в некотором порядке, — это именно те языки, которые допускаются некоторой МТ (возможно, работающей бесконечно на недопустимых входах).
9.2.2. Дополнения рекурсивных и РП-языков
Для доказательства того, что некоторый язык принадлежит второму кольцу на рис. 9.2 (т.е. является РП, но не рекурсивным), часто используется дополнение этого языка. Покажем, что рекурсивные языки замкнуты относительно дополнения. Поэтому, если язык L является РП, а его дополнение L — нет, то L не может быть рекурсивным. Если бы L был рекурсивным, то L также был бы рекурсивным, а следовательно, и РП. Докажем это важное свойство замкнутости рекурсивных языков.
Теорема 9.3. Если L — рекурсивный язык, то язык L также рекурсивен. Доказательство. Пусть L = L(M) для некоторой всегда останавливающейся МТ М. Согласно схеме на рис. 9.3 построим МТ М , у которой L = L(M ), т.е. М ведет себя так же, как и М; изменения касаются лишь допускающих состояний.
- Допускающие состояния М становятся не допускающими состояниями М, не имеющими переходов, т.е. в этих состояниях М останавливается, не допуская.
- М имеет новое допускающее состояние г, из которого нет переходов.
- Для каждой комбинации из недопускающего состояния и ленточного символа М, в которой М не имеет перехода (т.е. останавливается, не допуская), добавляется переход в допускающее состояние г.
Рис. 9.3. Строение МТ, допускающей дополнение рекурсивного языка |
W |
Поскольку М всегда останавливается, то всегда останавливается и М . Кроме того, М допускает множество именно тех цепочек, которые не допускаются М, т.е. L . □
С дополнениями языков связан еще один важный факт. Он еще больше ограничивает область на диаграмме (см. рис. 9.2), в которую могут попасть язык и его дополнение. Это ограничение утверждается следующей теоремой.
Теорема 9.4. Если язык L и его дополнение являются РП, то L рекурсивен. Отметим, что тогда по теореме 9.3 язык L также рекурсивен.
Доказательство. Доказательство представлено на рис. 9.4. Пусть L = L (М\) и L = L(M2). Параллельная работа машин имитируется МТ М. Чтобы эта модель стала простой и очевидной, можно взять МТ с двумя лентами и затем преобразовать ее в одно- ленточную. Одна из них имитирует ленту М\, а вторая — ленту М2. Состояния М\ и М2 являются компонентами состояния М.
Если вход w машины М принадлежит L, то А/, в конце концов попадает в допускающее состояние; тогда М допускает и останавливается. Когда же в допускающее со
стояние попадает М2, М останавливается, не допуская. Таким образом, М останавливается при любом входе, и L(M) — это в точности L. Отсюда заключаем, что язык L — рекурсивный. □
Рис. 9.4. Моделирование двух МТ, одна из которых допускает некоторый язык, а вторая — его дополнение |
Теоремы 9.3 и 9.4 можно объединить следующим образом. Из девяти способов расположения языка L и его дополнения L (см. диаграмму на рис. 9.2) возможны лишь следующие четыре[2].
- Оба языка/, и L рекурсивны, т.е. оба они находятся во внутреннем кольце.
- Ни L, ни L не являются РП, т.е. оба они находятся во внешнем кольце.
- L является РП, но не рекурсивным, и I не является РП, т.е. один находится в среднем кольце, а другой — во внешнем.
- L является РП, но не рекурсивным, и L не является РП, т.е. L и L меняются местами по отношению к случаю 3.
В качестве доказательства отметим, что теорема 9.3 исключает возможность того, что один из языков (L или L ) является рекурсивным, а второй принадлежит какому-либо из оставшихся классов. При этом теорема 9.4 исключает возможность того, что оба языка являются РП, но не рекурсивными.
Пример 9.5. Рассмотрим язык Ld, который, как мы знаем, не является РП. Поэтому язык I d не может быть рекурсивным. Однако L d может быть либо не-РП, либо РП, но не рекурсивным. На самом деле верно последнее.
L а есть множество цепочек wb допускаемых соответствующими М;. Этот язык похож на универсальный язык Lu, состоящий из всех пар (М, w), где М допускает w, который, как мы покажем в разделе 9.2.3, является РП. Точно так же можно показать, что L d является РП. □
9.2.3. Универсальный язык
В разделе 8.6.2 уже неформально обсуждалось, как можно использовать машину Тьюринга в качестве модели компьютера с загруженной в него произвольной программой. Иными словами, отдельно взятая МТ может использоваться как «компьютер с записанной программой», который считывает свою программу и данные с одной или нескольких лент, содержащих входную информацию. В данном разделе будет формализована идея того, что машина Тьюринга является представлением программы, записанной в память компьютера.
Универсальный язык Lu определяется как множество двоичных цепочек, которые являются кодами (в смысле определения из раздела 9.1.2) пар (М, vv), где М— МТ с двоичным входным алфавитом, aw — цепочка из (0+1)*, принадлежащая L{M). Таким образом, Lu — это множество цепочек, представляющих некоторую МТ и допускаемый ею вход. Покажем, что существует МТ U, которую часто называют универсальной машиной Тьюринга, для которой Lu = L(U). Поскольку входом U является двоичная цепочка, то в действительности U — это некоторая М} в списке машин Тьюринга с двоичным входом (см. раздел 9.1.2).
Рабочая лента |
Рис. 9.5. Структура универсальной машины Тьюринга |
Проще всего U описывается как многоленточная машина Тьюринга в стиле рис. 8.22. В машине U переходы М вначале хранятся на первой ленте вместе с цепочкой vv. Вторая лента используется для моделирования ленты машины М, в том же формате, что и у кода М. Таким образом, ленточный символ X, машины М кодируется как 0′, а коды разделяются одиночными 1. На третью ленту U записывается состояние М, причем состояние q, представляется в виде i нулей. Схема U представлена на рис. 9.5.
Машина U производит следующие операции.
- Исследует вход для того, чтобы убедиться, что код М является правильным кодом МТ. Если это не так, U останавливается, не допуская. Это действие корректно, поскольку неправильные коды по договоренности представляют МТ без переходов, а такие МТ не допускают никакого входа.
- Записывает на вторую ленту код входной цепочки Таким образом, каждому символу 0 из w на второй ленте ставится в соответствие цепочка 10, а каждой 1 — цепочка 100. Отметим, что пустые символы, которые находятся на ленте самой М и представляются цепочками вида 1 ООО, на этой ленте появляться не будут. Все клетки, кроме занятых символами цепочки w, будут заполняться пустыми символами машины U. Но при этом U знает, что если она ищет имитируемый символ М и находит свой собственный пустой символ, то она должна заменить его последовательностью 1000, имитирующей пустой символ М.
- На третьей ленте записывает 0, т.е. начальное состояние М, и перемещает головку второй ленты U в первую имитируемую клетку.
- Для того чтобы отобразить переход М, U отыскивает на своей первой ленте переход О11040k 10110т, у которого 0′ есть состояние на ленте 3, а О1 — ленточный символ М, начинающийся с позиции на ленте 2, обозреваемой Это переход, который М совершает на следующем шаге. Машина U должна выполнить следующие действия:
а) изменить содержимое ленты 3 на 0к, т.е. отобразить изменение состояния М. Для этого U вначале заменяет все символы 0 на ленте 3 пустыми символами, а затем копирует 0к с ленты 1 на ленту 3;
б) заменить О’ на ленте 2 символами О1, т.е. поменять ленточный символ М. Если потребуется больше или меньше места (т.е. j * Г), то для управления пространством используются рабочая лента и техника переноса (см. раздел 8.6.2);
в) переместить головку на ленте 2 в ту позицию слева или справа, в которой находится ближайший символ 1. При т = 1 совершается сдвиг влево, а при т = 2 — вправо. Таким образом, U имитирует движение М влево или вправо.
- Если Мне имеет перехода, соответствующего имитируемым состоянию и ленточному символу, то в п. 4 переход не будет найден. Таким образом, в данной конфигурации М останавливается, и то же самое должна делать
- Если М попадает в свое допускающее состояние, то U допускает.
Этими действиями U имитирует работу М со входом w. U допускает закодированную пару (М, w) тогда и только тогда, когда М допускает w.
Более эффективная универсальная МТ
Машина U, эффективно имитирующая М, т.е. не требующая сдвига ленточных символов, должна вначале определять число ленточных символов, используемых М. Если число символов лежит в пределах от 2k_1 до 2k— 1, то однозначно представить различные ленточные символы можно с помощью ^-битового двоичного кода. Каждой клетке М можно поставить в соответствие к клеток машины U. Для того чтобы упростить имитацию, можно переписать в машине U данные переходы М и вместо описанного нами унарного кода переменной длины использовать бинарный код фиксированной длины.
9.2.4. Неразрешимость универсального языка
Представим проблему, которая является РП, но не рекурсивной. Это язык Lu. Неразрешимость Lu (т.е. его нерекурсивность) во многих отношениях важнее, чем наш предыдущий вывод о том, что язык Ь^ не является РП. Причина состоит в следующем. Сведением La к другой проблеме Р можно показать, что алгоритма, решающего Р, не существует, независимо от того, является ли Р РП. Однако сведение L& к Р возможно лишь тогда, когда Р не является РП, поэтому L& не может использоваться при доказательстве неразрешимости проблем, которые являются РП, но не рекурсивными. Вместе с тем, если нужно показать, что проблема не является РП, то можно использовать только Zd, в то время как язык Lu оказывается бесполезным, поскольку он является РП.
Теорема 9.6. Lu является РП, но не рекурсивным.
Доказательство. В разделе 9.2.3 доказано, что язык Lu является РП. Допустим, что La рекурсивен. Тогда по теореме 9.3 L u (дополнение Lu) — также рекурсивный язык. Но если существует МТ М, допускающая L и, то, используя описанный ниже метод, можно построить МТ, допускающую Ld. Поскольку нам известно, что L& не является РП, приходим к противоречию с предположением, что язык Lu является рекурсивным.
Проблема останова
Проблема останова машины Тьюринга считается подобной проблеме Lu; она также является РП, но не рекурсивной. В действительности, определенная А. М. Тьюрингом машина допускала, не попадая в допускающее состояние, а останавливаясь. Для МТ М можно определить Н(М) как множество входов vv, на которых М останавливается независимо от того, допускает ли М вход vv. Тогда проблема останова состоит в определении множества таких пар (М, w), у которых w принадлежит Н(М). Это еще один пример проблемы/языка, которая является РП, но не рекурсивной.
Предположим, что L(M) = L u. На рис. 9.6 показано, как можно преобразовать МТ М в МТ М\ которая допускает Ld с помощью следующих действий.
Рис. 9.6. Сведение Ьлк L u |
- М’ преобразует входную цепочку w в wl 1 В качестве упражнения читатель может написать программу для выполнения этого шага на одной ленте. Однако легче это сделать, используя для копии w вторую ленту, и затем преобразовать двухленточную МТ в одноленточную.
- М’ имитирует М на новом входе. Если w есть w, в нашем перечислении, то М’ определяет, допускает ли М\ вход Поскольку М допускает L и, то она допускает тогда и только тогда, когда М\ не допускает wt, т.е. когда w, принадлежит Ld.
Таким образом, М’ допускает w тогда и только тогда, когда w принадлежит Ld. Поскольку по теореме 9.2 машины М’ не существует, приходим к выводу, что язык Lu не является рекурсивным. □
9.2.5. Упражнения к разделу 9.2
- Покажите, что проблема останова, т.е. проблема определения множества пар (М, w), где М останавливается (допуская или нет) на входе и>, является РП, но не рекурсивной. (См. врезку «Проблема останова» в разделе 9.2.4.)
- Во врезке «Почему «рекурсивные»?» из раздела 9.2.1 говорилось о «рекурсивных функциях» как модели вычислимости, используемой наравне с машинами Тьюринга. В данном упражнении рассмотрим пример записи рекурсивных функций. Рекурсивная функция — это функция F, определенная конечным набором правил. Каждое правило устанавливает значение функции F для определенных аргументов; в правиле могут присутствовать переменные, неотрицательные целочисленные константы, функция прибавления единицы (successor), сама функция F и выражения, построенные композицией перечисленных функций. Например, функция Аккермана определяется следующим образом.
- /1(0, у) = 1 для всеху > 1.
- А( 1,0) = 2.
- А(х; 0) = х + 2 для х > 2.
- А(х +l,j+l) = А(А(х, у + 1), у) для любых х > 0 и у >
Выполните следующее:
а) (*) вычислите А(2, 1);
б) (!) опишите А(х, 2) как функцию от х;
в) (!) вычислите А(4, 3).
- Опишите неформально многоленточные машины Тьюринга, которые перечисляют следующие множества целых чисел в том смысле, что, начав с пустых лент, они печатают на одной из лент цепочку Ю^Ю’2!…, представляющую множество {г’ь г2, …}:
а) (*) множество квадратов целых чисел {1, 4, 9, …};
б) множество простых чисел {2, 3, 5, 7, 11, …};
в) (!!) множество всех таких г, для которых М\ допускает w,. Указание. Такие i невозможно генерировать в порядке возрастания. Причина состоит в том, что данный язык, который есть L <ь является РП, но не рекурсивным. Такие языки по определению можно перечислить, но не в порядке возрастания. «Прием» с их перечислением состоит в том, чтобы смоделировать работу всех М со входами vv,. При этом мы не можем позволить какой-либо М работать вечно, поскольку это помешает продолжать проверку для других Мр где i Ф j. Поэтому мы вынуждены работать поэтапно, проверяя на k-и этапе лишь конечное множество машин М и ограничивая проверку каждой машины конечным числом шагов. Таким образом, каждый этап проверки будет выполнен за конечное время. Поскольку для всякой МТ М и всякого числа шагов 5 найдется такой этап, на котором будет промоделировано не менее s шагов М, то в конце концов мы обнаружим все М, допускающие wis и перечислим номера г.
- (*) Пусть Lu L2, …, Lk— набор языков в алфавите Z, для которого верны следующие утверждения.
- Li ПLj Ф 0 для всехi Ф j, т.е. никакая цепочка не принадлежит сразу двум языкам.
- Li lj Z2 U • • U Lk = Е*, т.е. каждая цепочка принадлежит одному из этих языков.
- Все языки L[, где i = 1, 2, …, к, рекурсивно перечислимы. Докажите, что тогда каждый из этих языков рекурсивен.
- (*!) Пусть L рекурсивно перечислим и L не является РП. Рассмотрим язык L’= {Ow |’vv принадлежит!} U {lw | vv не принадлежит!}.
Можете ли вы наверняка сказать, что язык L’ или его дополнение являются рекурсивными, РП или не-РП? Ответ обоснуйте.
9.2.6. (!) За исключением операции дополнения в разделе 9.2.2, свойства замкнутости
рекурсивных и РП-языков пока не обсуждались. Выясните, замкнуты ли рекурсивные и/или РП-языки относительно перечисленных ниже операций:
а) (*) объединение;
б) пересечение;
в) конкатенация;
г) замыкание Клини (звездочка);
д) (*) гомоморфизм;
е) обратный гомоморфизм.
Обосновывая замкнутость, можно использовать неформальные, но достаточно
понятные конструкции.
9.3. Неразрешимые проблемы, связанные с машинами Тьюринга
Статус языков Lu и Ц относительно неразрешимости и рекурсивной перечислимости нам уже известен. Используем их для демонстрации других неразрешимых или не РП-языков. В доказательствах используется техника сведения. Все неразрешимые проблемы, которые рассматриваются вначале, связаны с машинами Тьюринга. Кульминацией данного раздела является доказательство «теоремы Райса». В ней утверждается, что любое нетривиальное свойство МТ, зависящее лишь от языка, допускаемого машиной Тьюринга, должно быть неразрешимым. Материал раздела 9.4 позволяет исследовать некоторые неразрешимые проблемы, не связанные ни с машинами Тьюринга, ни с их языками.
9.3.1. Сведения
Понятие сведения было введено в разделе 8.1.3. В общем случае, если у нас есть алгоритм, преобразующий экземпляры проблемы Рх в экземпляры проблемы Р2, которые имеют тот же ответ (да/нет), то говорят, что Р\ сводится к Р2. Доказательство такой сводимости используется, чтобы показать, что Р2 не менее трудна, чем Р\. Таким образом, если Р\ не является рекурсивной, то и Р2 не может быть рекурсивной. Если Р, не является РП, то и Р2 не может быть РП. Как уже упоминалось в разделе 8.1.3, чтобы доказать, что проблема Р2 не менее трудна, чем некоторая известная Ри нужно свести Р[ к Р2, а не наоборот.
Как показано на,рис. 9.7, сведение должно переводить всякий экземпляр Р\ с ответом «да» (позитивный) в экземпляр Р2 с ответом «да», и всякий экземпляр Р, с ответом «нет» (негативный) — в экземпляр Р2 с ответом «нет». Отметим, что неважно, является ли каж-
Рис. 9.7. Сведение переводит позитивные экземпляры в позитивные, а негативные — в негативные |
Формально сведение Pi к Р2 является машиной Тьюринга, которая начинает работу с экземпляром проблемы Pi на ленте и останавливается, имея на ленте экземпляр проблемы Р2. Как правило, сведения описываются так, как если бы они были компьютерными программами, которые на вход получают экземпляры Р\ и выдают экземпляры Р2. Эквивалентность машин Тьюринга и компьютерных программ позволяет описывать сведение в терминах как тех, так и других. Значимость процедуры сведения подчеркивается следующей широко используемой теоремой.
Теорема 9.7. Если Pi можно свести к Р2, то:
а) если Pi неразрешима, то и Р2 неразрешима;
б) если РI не-РП, то Р2 также не-РП.
Доказательство. Предположим сначала, что проблема Pi неразрешима. Если решить Р2 возможно, то, объединяя сведение f, к f2 и алгоритм решения последней, можно построить алгоритм, решающий Рх. Эта идея была проиллюстрирована на рис. 8.7. Поясним подробнее. Пусть дан экземпляр w проблемы Р\. Применим к нему алгоритм, который переводит w в экземпляр х проблемы Р2. Затем применим к х алгоритм, решающий Р2. Если алгоритм выдает ответ «да», то х принадлежит Р2. Поскольку Pi была сведена к Р2, то известен ответ «да» для Pi на w, т.е. w принадлежит Рх. Точно так же, если х не принадлежит Р2, то и w не принадлежит Р,. Итак, ответ на вопрос «х принадлежит Р2?» является также правильным ответом на вопрос «w принадлежит РХТ\
Таким образом, получено противоречие с предположением, что проблема Р\ неразрешима. Делаем вывод, что если Pi неразрешима, то и Р2 неразрешима.
дый экземпляр Р2 образом одного или нескольких экземпляров Pi. В действительности, обычно лишь небольшая часть экземпляров Р2 образуется в результате сведения. |
Рассмотрим теперь часть б. Предположим, что Р2 (в отличие от Pi) является РП. В данном случае у нас есть алгоритм сведения Pi к Р2, но для Р2 существует лишь процедура распознавания, т.е. МТ, которая дает ответ «да», когда ее вход принадлежит Р2, и мо
жет работать бесконечно, когда вход не принадлежит Р2. Как и в части а, с помощью алгоритма сведения преобразуем экземпляр w проблемы Рх в экземпляр х проблемы Р2. Затем применим к х МТ для Р2. Если х допускается, то допустим и w.
Эта процедура описывает МТ (возможно, работающую бесконечно), языком которой является Pi. Если w принадлежит Pi, то х принадлежит Рг, и поэтому данная МТ допускает w. Если же w не принадлежит Ри то х не принадлежит Р2. Тогда МТ может или остановиться, или работать бесконечно, но в обоих случаях она не допустит w. Поскольку по предположению МТ, распознающей Ри не существует, то полученное противоречие доказывает, что МТ для Р2 также не существует. Таким образом, если Pi не-РП, то и Р2 не-РП. □
9.3.2. Машины Тьюринга, допускающие пустой язык
В качестве примера сведения, связанного с машинами Тьюринга, исследуем языки, известные как Le и Lnc. Оба они состоят из двоичных цепочек. Если w — двоичная цепочка, то она представляет некоторую МТ М из перечисления, описанного в разделе 9.1.2.
Если М\ = 0, т.е. М\ не допускает никакого входа, то М, принадлежит Д. Таким образом, Д состоит из кодов всех МТ, языки которых пусты. С другой стороны, если ДМ) не пуст, то w принадлежит Де. Таким образом, Дс состоит из кодов всех машин Тьюринга, которые допускают хотя бы одну цепочку.
В дальнейшем нам будет удобно рассматривать цепочки как машины Тьюринга, представленные этими цепочками. Итак, упомянутые языки определяются следующим образом.
Д = {М | ДМ) = 0}
Де = {М| ДМ) Ф 0}
Отметим, что Д и Дс— языки над алфавитом {0, 1}, дополняющие друг друга. Как будет видно, Z.,,e является «более легким». Он РП, но не рекурсивный, в то время как Le — не-РП.
Теорема 9.8. Язык Lm рекурсивно перечислим.
Доказательство. Достаточно предъявить МТ, допускающую L„e. Проще всего это сделать, описав недетерминированную МТ М, которая схематично изображена на рис. 9.8. Согласно теореме 8.11 Мможно преобразовать в детерминированную МТ.
Рис. 9.8. Конструкция НМТ, допускающей язык L, |
Работа М заключается в следующем.
На вход М подается код МТ Mv
Используя недетерминизм, Мугадывает вход w, который, возможно, допускается М\.
М проверяет, допускает ли М\ свой вход w. В этой части М может моделировать работу универсальной МТ U, допускающей Lu.
Если М{ допускает w, то и М допускает свой вход, т.е. Mt.
Таким образом, если М{ допускает хотя бы одну цепочку, то М угадает ее (среди прочих, конечно) и допустит А/;. Если же L(Mt) = 0, то ни одна из угаданных w не допускается М^ и Мне допустит Мх. Таким образом, ЦМ) = Lne. □
Следующим шагом будет доказательство, что язык Ью не является рекурсивным. Для этого сведем к Lne язык Lu, т.е. опишем алгоритм, который преобразует вход (М, w) в выход М’— код еще одной машины Тьюринга, для которой w принадлежит L(M) тогда и только тогда, когда язык ЦМ’) не пуст. Таким образом, М допускает w тогда и только тогда, когда М’ допускает хотя бы одну цепочку. Прием состоит в том, что М’ игнорирует свой вход, а вместо этого моделирует работу М на w. Если М допускает w, то М’ допускает свой собственный вход. Таким образом, ЦМ’) не пуст тогда и только тогда, когда М допускает w. Если бы Lm. был рекурсивным, то у нас был бы алгоритм выяснения, допускает ли Мвход w: построить М’и проверить, будет ли L(M’) = 0. Теорема 9.9. Язык Lne не является рекурсивным.
Доказательство. Уточним доказательство, кратко описанное выше. Нужно построить алгоритм, который преобразует свой вход — двоичный код пары (М, w) — в МТ М’, для которой ЦМ’) * 0 тогда и только тогда, когда М допускает вход w. Данная конструкция схематично представлена на рис. 9.9. Как будет показано, если М не допускает w, то М’ не допускает никакого входа, т.е. ЦМ’) = 0. Но если М допускает w, то М’ допускает любой вход, и поэтому, конечно же, ЦМ’) Ф 0.
Рис. 9.9. Схема МТ М’, построенной по (М, w) в теореме 9.9; М’ допускает произвольный вход тогда и только тогда, когда М допускает w |
М’ по построению выполняет следующие действия.
- М’ игнорирует собственный вход. Она заменяет его цепочкой, представляющей МТ М и ее вход w. Поскольку М’ строится для конкретной пары (М, w), имеющей некоторую длину п, можно построить М’с состояниями q0, qx, …, q„ {qo — начальное состояние), причем:
а) в состоянии q-„ i = 0, 1, …, п — 1, М’ записывает (/+ 1)-й бит кода (М, w), переходит в состояние qi+l и сдвигается вправо;
б) в состоянии qn в случае необходимости М’ сдвигается вправо и заполняет все непустые клетки (содержащие «хвост» цепочки х, если ее длина больше п) пробелами.
Когда М’ достигает пробела в состоянии qn, она, используя похожий набор состояний, перемещает головку в левый конец ленты.
М\ используя дополнительные состояния, моделирует универсальную МТ U на полученной ленте.
Если U допускает, то и М’ допускает. Если U никогда не допускает, то и М’ никогда не допускает.
Приведенное описание М’ показывает возможность построения машины Тьюринга, которая переводит код М и цепочки w в код М’. Таким образом, существует алгоритм сведения Lu к Lm. Кроме того, если М допускает w, то М’ допускает любой вход х, который первоначально содержался на ее ленте. То, что вначале вход х был проигнорирован, не имеет никакого значения, поскольку по определению МТ допускает то, что было на ее ленте до начала операций. Таким образом, если М допускает w, то код М’ принадлежит L,K.
Наоборот, если Мне допускает vv, то М’никогда не допустит свой вход, каким бы он ни был. Следовательно, в этом случае код М’не принадлежит Lne. Таким образом, Lu сводится к Lne с помощью алгоритма, который строит М’ по данным М и w. Поскольку Lu не является рекурсивным, то и Lne также не рекурсивен. Того, что это сведение существует, вполне достаточно для завершения доказательства. Однако для того, чтобы проиллюстрировать значимость сведения, продолжим наши рассуждения. Если бы Lne был рекурсивным, то можно было бы построить алгоритм для Lu следующим образом.
Преобразовать (М, vv) в МТ М’описанным выше способом.
Выяснить с помощью гипотетического алгоритма для ine, верно ли ЦМО = 0. Если это так, то сказать, что М не допускает vv, если же ЦМ’) ф 0, то сказать, что М допускает w.
Поскольку из теоремы 9.6 известно, что такого алгоритма для Lu нет, приходим к противоречию с тем, что Ьж является рекурсивным, и делаем вывод, что L„c — не рекурсивный. □
Теперь известен и статус языка Lc. Если бы Д был РП, то по теореме 9.4 и он, и Lne были бы рекурсивными. Но поскольку Lne не является рекурсивным по теореме 9.9, то справедливо следующее утверждение.
Теорема 9.10. Язык Le не является РП. □ 9.3.3. Теорема Райса и свойства РП-языков
Неразрешимость языков, подобных Le и Lnc, в действительности представляет собой частный случай гораздо более общей теоремы: любое нетривиальное свойство РП- языков неразрешимо в том смысле, что с помощью машин Тьюринга невозможно распознать цепочки, которые являются кодами МТ, обладающих этим свойством. Примером свойства РП-языков служит выражение «язык является контекстно-свободным». Вопрос о том, допускает ли данная МТ контекстно-свободный язык, является неразрешимым частным случаем общего закона, согласно которому все нетривиальные свойства РП- языков неразрешимы.
Свойство РП-языков представляет собой некоторое множество РП-языков. Таким образом, формально свойство языка быть контекстно-свободным — это множество всех КС-языков. Свойство быть пустым есть множество {0}, содержащее только пустой язык.
Почему проблемы и их дополнения различны
Интуиция подсказывает, что в действительности проблема и ее дополнение — одна и та же проблема. Для решения одной можно использовать алгоритм решения другой, и лишь на последнем шаге взять отрицание ответа: вместо «нет» сказать «да» и наоборот. Если проблема и ее дополнение рекурсивны, это действительно верно. Однако, как обсуждалось в разделе 9.2.2, существуют две другие возможности. Во- первых, может быть, что ни сама проблема, ни ее дополнение не являются даже РП. Тогда ни одна из них вообще не может быть решена никакой МТ. В этом смысле они по-прежнему похожи друг на друга. Существует, однако, еще одна интересная ситуация типа Lt и Lnt, когда один из языков является РП, а другой — нет. Для языка, являющегося РП, можно построить МТ, которая получает на вход цепочку w и исследует, почему данная цепочка принадлежит языку. Так, для Lne и данной в качестве входа МТ М мы заставляем нашу МТ искать цепочки, которые допускает эта МТ, и, обнаружив хотя бы одну такую цепочку, допускаем М. Если М— МТ с пустым языком, то мы никогда не будем знать наверняка, что М не принадлежит Lnt, но при этом никогда и не допустим М, и это будет правильным откликом МТ. С другой стороны, для дополнения этой проблемы — языка Lt, который не является РП, вообще не существует способа, позволяющего допустить все его цепочки. Предположим, что нам дана цепочка М, представляющая МТ с пустым языком. Проверяя различные входы М, мы можем никогда не найти такого, который М допускает, но при этом не сможем и быть уверенными в том, что такого входа нет среди еще непроверенных. Поэтому М никогда не сможет быть допущена, даже если и должна.
Свойство называется тривиальным, если оно либо пустое (т.е. никакой язык вообще ему не удовлетворяет), либо содержит все РП-языки. В противном случае свойство называется нетривиальным.
- Отметим, что пустое свойство 0 и свойство быть пустым языком — не одно и то же.
Мы не можем распознать множество языков так, как сами эти языки. Причина в том, что обычный бесконечный язык нельзя записать в виде цепочки конечной длины, которая может быть входом некоторой МТ. Вместо этого мы должны распознавать машины Тьюринга, которые допускают эти языки. Код самой МТ конечен, даже если язык, который она допускает, бесконечен. Таким образом, если V— это свойство РП-языков, то Lr— множество кодов машин Тьюринга М, языки ДМ) которых принадлежат V. Говоря о разрешимости свойства V, мы имеем в виду разрешимость языка Lp.
Теорема 9.11 (теорема Райса). Всякое нетривиальное свойство РП-языков неразрешимо.
Доказательство. Пусть V— нетривиальное свойство РП-языков. Вначале допустим, что пустой язык 0 не принадлежит V’, противоположный случай рассмотрим позже. Поскольку V— нетривиально, должен существовать непустой язык Д принадлежащий V. Пусть М/. обозначает МТ, допускающую L.
Сведем Д к Lp, и этим докажем, что язык L^ неразрешим, поскольку Д неразрешим. Алгоритм сведения получает на вход пару (М, w) и выдает некоторую МТ М’. Структура М’представлена на рис. 9.10. Если Мне допускает w, то L(M’) есть 0, и Д№) = L, если М допускает w.
М’— двухленточная МТ. Одна лента используется для моделирования работы М со входом w. Напомним, что алгоритм сведения получает на вход пару (М, w) и может использовать ее для построения переходов М’. Таким образом, имитация М со входом w «встроена» в М’, которой не нужно считывать с ленты переходы М.
Вторая лента М’ используется для моделирования работы ML с цепочкой х, входной для М’. Еще раз отметим, что переходы ML известны алгоритму сведения и могут быть «встроены» в переходы М’. По построению МТ М’ должна выполнять следующие операции.
- Имитировать работу М со входом w. Отметим, что w не является входом М’. М’ записывает Ми w на одну из своих лент и имитирует МТ U на этой паре, как в доказательстве теоремы 9.8.
- Если М не допускает w, то М’ больше ничего не делает, т.е. не допускает любой свой вход х, поэтому ЦМ’) = Мы предположили, что 0 не содержится в свойстве V, поэтому код М’ не принадлежит L-p.
- Если М допускает w, то М’ начинает имитацию ML на своем собственном входе х. Таким образом, М’ допускает именно язык Поскольку L принадлежит V, то код М’ принадлежит L-p.
Как видим, построение М’ по М и w можно провести в соответствии с некоторым алгоритмом. Поскольку этот алгоритм превращает (М, w) в М\ которая принадлежит Lp тогда и только тогда, когда (Л/, и>) принадлежит Lm этот алгоритм представляет собой сведение ЬцКЬрИ доказывает неразрешимость свойства V.
Для завершения доказательства нужно еще рассмотреть вариант, когда 0 принадлежит V. Для этого рассмотрим дополнение V свойства V, т.е. множество РП-языков, не обладающих свойством V. Из описанных выше рассуждений следует, что свойство V неразрешимо. Однако поскольку всякая МТ допускает некоторый РП-язык, то Lv , т.е. множество (кодов) машин Тьюринга, не допускающих языки из V, совпадает с Ь^ — множеством МТ, допускающих языки из V. Предположим, что язык разрешим. Тогда L^ также должен быть разрешимым, поскольку дополнение рекурсивного языка рекурсивно (теорема 9.3). □
9.3.4. Проблемы, связанные с описаниями языков в виде машин Тьюринга
Согласно теореме 9.11 все проблемы, связанные только с языками машин Тьюринга, неразрешимы. Некоторые из них интересны сами по себе. Например, неразрешимы следующие вопросы.
- Пуст ли язык, допускаемый МТ (ответ дают теоремы 9.9 и 9.3)?
- Конечен ли язык МТ?
- Регулярен ли язык, допускаемый МТ?
- Является ли язык МТ контекстно-свободным?
Вместе с тем, теорема Райса не означает, что любая проблема, связанная с МТ, неразрешима. Например, вопросы о состояниях МТ, в отличие от вопросов о языке, могут быть разрешимыми.
Пример 9.12. Вопрос о том, имеет ли МТ пять состояний, разрешим. Алгоритм, решающий его, просматривает код МТ и подсчитывает число состояний, встреченных в его переходах.
Еще один пример разрешимого вопроса — существует ли вход, при обработке которого МТ совершает более пяти переходов? Алгоритм решения становится очевидным, если заметить, что, когда МТ делает пять переходов, она обозревает не более девяти клеток вокруг начальной позиции головки. Поэтому можно проимитировать пять переходов МТ на любом из конечного числа входов, длина которых не более девяти. Если все эти имитации не достигают останова, то делается вывод, что на любом входе данная МТ совершает более пяти переходов. □
9.3.5. Упражнения к разделу 9.3
- (*) Покажите, что множество кодов машин Тьюринга, допускающих все входы, которые являются палиндромами (возможно, наряду с другими входами), неразрешимо.
- Большая Компьютерная Корпорация для увеличения сократившегося объема продаж решила выпустить высокотехнологичную модель машины Тьюринга под названием МТЗС, оснащенную звонками и свистками. В основном МТЗС совпадает с обычной МТ, за исключением того, что каждое состояние этой машины отмечено либо как «состояние-звонок», либо как «состояние-свисток». Как только МТЗС попадает в новое состояние, то, в зависимости от его типа, она либо звенит, либо свистит. Докажите, что проблема определения, свистнет ли когда- нибудь данная МТЗС М при данном входе w, неразрешима.
- Покажите, что язык кодов МТ, которые, начиная с пустой ленты, в конце концов записывают где-либо на ней символ 1, неразрешим.
- (!) В соответствии с теоремой Райса известно, что каждый из следующих вопросов неразрешим:
а) содержит ли L(M) хотя бы две цепочки?
б) бесконечен ли ЦА/)?
в) является ли язык L(M) контекстно-свободным?
г) (*) верно ли, что L(M) = (L{M)fl
Являются ли они рекурсивно перечислимыми или не-РП?
- (!) Пусть язык I состоит из троек (Mh М2, к), образованных парой кодов МТ и целым числом, для которых ЦМ/) П Ь(М2) содержит не менее, чем к цепочек. Покажите, что L является РП, но не рекурсивным.
- Покажите, что следующие вопросы разрешимы:
а) (*) множество кодов МТ М, которые, имея в начальный момент пустую ленту, в конце концов записывают на ней некоторый непустой символ. Указание. Если М имеет т состояний, рассмотрите первые т + 1 совершаемых ею переходов;
б) (!) множество кодов МТ, которые никогда не совершают сдвиг влево;
в) (!) множество пар (М, w), для которых МТ М при обработке входа w не обозревает никакую клетку на ленте более одного раза.
- (!) Покажите, что следующие проблемы не являются рекурсивно-перечислимыми:
а) (*) множество пар (М, w), для которых МТ М при обработке входа w не останавливается;
б) множество пар (Мь М2), для которых L(Mt) П L(M2) = 0;
в) множество троек (Мь М2, М3), для которых L(MX) = L(M2) L(M-$), т.е. язык первой машины — это конкатенация языков двух других МТ.
- (!!) Ответьте, является ли каждое из следующих множеств рекурсивным, РП, но не рекурсивным, или не-РП:
а) (*) множество кодов всех МТ, останавливающихся на любом входе;
б) множество кодов всех МТ, которые не останавливаются ни на каком входе;
в) множество кодов всех МТ, останавливающихся хотя бы на одном входе;
г) (*) множество кодов всех МТ, которые не останавливаются хотя бы на одном входе.
9.4. Проблема соответствий Поста
В этом разделе начнется сведение неразрешимых вопросов о машинах Тьюринга к неразрешимым вопросам о «реальных вещах», т.е. обычных предметах, не имеющих отношения к абстрактным машинам Тьюринга. Начнем с проблемы, которая называется «проблемой соответствий Поста» (ПСП). Эта проблема по-прежнему довольно абстрактна, но она связана уже не с машинами Тьюринга, а с цепочками. Наша цель — доказать неразрешимость этой проблемы, чтобы затем доказывать неразрешимость других проблем путем сведения ПСП к ним.
Докажем неразрешимость ПСП сведением Lu к ней. Чтобы облегчить доказательство, рассмотрим вначале «модифицированную» версию ПСП, а потом сведем ее к исходной ПСП. Затем сведем Lu к модифицированной ПСП. Цепь этих сведений представлена на рис. 9.11. Поскольку известно, что исходная проблема La неразрешима, можно сделать вывод, что ПСП также неразрешима.
МПСП | ПСП | ||
Алгоритм | Алгоритм | ||
Рис. 9.11. Цепь сведений в доказательстве неразрешимости проблемы соответствий Поста |
9.4.1. Определение проблемы соответствий Поста
Экземпляр проблемы соответствий Поста (ПСП) состоит из двух списков равной длины в некотором алфавите 2. Как правило, мы будем называть их списками А и В, и писать А = vwb w2, …, wk и В = хи х2, …, хк при некотором целом к. Для каждого / пара (Wj, Х[) называется парой соответствующих цепочек.
Мы говорим, что экземпляр ПСП имеет решение, если существует последовательность из одного или нескольких целых чисел /ь i2, …, im, которая, если считать эти числа индексами цепочек и выбрать соответствующие цепочки из списков Ли В, дает одну и ту же цепочку, т.е. wixwi2… Wjm = xj,xj2…xjin. В таком случае последовательность /ь i2, …, im называется решающей последовательностью, или просто решением, данного экземпляра ПСП. Проблема соответствий Поста состоит в следующем.
- Выяснить, имеет ли решение данный экземпляр ПСП.
Пример 9.13. Пусть 2 = {0, 1}, А и В — списки (рис. 9.12). Данный экземпляр ПСП имеет решение. Пусть, например, т = 4, ix = 2, i2 = 1, /3 = 1 и Ц = 3, т.е. решающая последовательность имеет вид 2, 1, 1,3. Для проверки записываются конкатенации соответствующих цепочек каждого из списков в порядке, задаваемом данной последовательностью, т.е. w2w1vv1w3 = x2xix,x3 = 101111110. Отметим, что это решение— не единственное. Например, 2, 1, 1, 3, 2, 1, 1, 3 также является решением. □
Список А | Список В | |
i | Wi | X, |
1 | 1 | 111 |
2 | 10111 | 10 |
3 | 10 | 0 |
Рис. 9.12. Экземпляр ПСП |
ПСП как язык
Речь идет о вопросе, существует ли решение у экземпляра ПСП, поэтому данную проблему нужно представить в виде языка. Поскольку экземпляры ПСП могут иметь произвольные алфавиты, язык ПСП на самом деле есть множество цепочек над некоторым фиксированным алфавитом, которыми кодируются экземпляры ПСП. Эти коды во многом напоминают коды машин Тьюринга с произвольными множествами состояний и ленточных символов, рассмотренные в разделе 9.1.2. Например, если экземпляр ПСП имеет алфавит, содержащий до 2к символов, то для каждого из этих символов можно- использовать ^-битный двоичный код.
Поскольку каждый экземпляр ПСП имеет конечный алфавит, то некоторое к можно найти для каждого экземпляра. Следовательно, все экземпляры проблемы можно закодировать с помощью алфавита из 3-х символов: 0, 1 и «запятой», разделяющей цепочки. Код начинается двоичной записью числа к и запятой за ней. Затем записывается каждая из пар цепочек, в которых цепочки разделены запятыми, а символы закодированы к-битными двоичными числами.
Пример 9.14. Пусть, как и раньше, 2 = {0, 1}, но теперь экземпляр проблемы представлен списками, как на рис. 9.13.
Список/! | Список В | |
W; | х{ | |
1 | 10 | 101 |
2 | 011 | И |
3 | 101 | 011 |
Рис. 9.13. Еще один экземпляр ПСП |
В этом примере решения нет. Допустим, что экземпляр ПСП, представленный на рис.9.13, имеет решение, скажем, /ь i2, …, im при некотором т> 1. Утверждаем, что /’i = l. При i] = 2 цепочка, начинающаяся с w2 = 011, должна равняться цепочке, которая начинается с х2 = 11. Но это равенство невозможно, поскольку их первые символы — 0 и 1, соответственно. Точно так же невозможно, чтобы i\ = 3, поскольку тогда цепочка, начинающаяся с w3 = 101, равнялась бы цепочке, которая начинается с х3 = 011. •
Если i’i = 1, то две соответствующие цепочки из списков А и В должны начинаться так: А: 10… В: 101…
Рассмотрим теперь, каким может быть /2.
- Вариант i2 — 1 невозможен, поскольку никакая цепочка, начинающаяся с WiWj = 1010, не может соответствовать цепочке, которая начинается с Х\Х\ = 101101; эти цепочки различаются в четвертой позиции.
- Вариант i2 = 2 также невозможен, поскольку никакая цепочка, начинающаяся с w\w2 = 10011, не может соответствовать цепочке, которая начинается с х\х2 = 10111; они различаются в третьей позиции.
- Возможен лишь вариант i2 =
При i2 = 3 цепочки, соответствующие списку чисел 1, 3, имеют следующий вид.
А: 10101… В: 101011…
Пока не видно, что последовательность 1, 3 невозможно продолжить до решения. Однако обосновать это несложно. Действительно, мы находимся в тех же условиях, в которых были после выбора = 1. Цепочка из списка В отличается от цепочки из списка А лишним символом 1 на конце. Чтобы избежать несовпадения, мы вынуждены выбирать h — 3, /4 = 3 и так далее. Таким образом, цепочка из списка А никогда не догонит цепочку из списка В, и решение никогда не будет получено. □
9.4.2. „Модифицированная» ПСП
Свести La к ПСП легче, если рассмотреть вначале промежуточную версию ПСП, которая называется модифицированной проблемой соответствий Поста, или МПСП. В модифицированной ПСП на решение накладывается дополнительное требование, чтобы первой парой в решении была пара первых элементов списков А и В. Более формально, экземпляр МПСП состоит из двух списков A = wuw2, …, и В = хьх2, …, хк, и решением является последовательность из 0 или нескольких целых чисел /ь /2, …, /т, при которой
WlWi,Wi2…Wim = ад,х;2…х;т.
Отметим, что цепочки обязательно начинаются парой (vvb хх), хотя индекс 1 даже не указан в качестве начального элемента решения. Кроме того, в отличие от ПСП, решение которой содержит хотя бы один элемент, решением МПСП может быть и пустая последовательность (когда W\ =xt). Однако такие экземпляры не представляют никакого интереса и далее не рассматриваются.
Частичные решения
В примере 9.14 для анализа экземпляров ПСП используется широко распространенный метод. Рассматривается, какими могут быть частичные решения, т.е. последовательности индексов /ь /2, …, для которых одна из цепочек wnw)2..,\vir и xnxl2…xh является префиксом другой, хотя сами цепочки не равны. Заметим, что если последовательность целых чисел является решением, то всякий префикс этой последовательности должен быть частичным решением. Поэтому понимание того, как выглядят частичные решения проблемы, позволяет определить, какими могут быть полные решения.
Отметим, однако, что, поскольку ПСП неразрешима, не существует и алгоритма, позволяющего вычислять все частичные решения. Их может быть бесконечно много, а также, что гораздо хуже, если даже частичные решения wi,wi2…wir и xj|xi2…xir ведут к решению, разница их длин может быть сколь угодно большой.
Пример 9.15. Списки, представленные на рис. 9.12, можно рассматривать как экземпляр МПСП. Однако этот экземпляр МПСП не имеет решения. Для доказательства заметим, что всякое его частичное решение начинается с индекса 1, поэтому цепочки, образующие решение, должны начинаться следующим образом.
А: 1…
В: 111…
Следующим целым в решении не может быть 2 или 3, поскольку и w2, и w3 начинаются с 10, и поэтому при таком выборе возникнет несоответствие в третьей позиции. Таким образом, следующий индекс должен быть 1, и получаются такие цепочки. А: 11… В: 111111…
Эти рассуждения можно продолжать бесконечно. Только еще одно число 1 позволяет избежать несоответствия в решении. Но если все время выбирается индекс 1, то цепочка В остается втрое длиннее А, и цепочки никогда не сравняются. □
Важным шагом в доказательстве неразрешимости ПСП является сведение МПСП к ПСП. Далее будет показано, что МПСП неразрешима, путем сведения Lu к МПСП. Тем самым будет доказана неразрешимость ПСП. Действительно, если бы она была разрешима, то можно было бы решить МПСП, а следовательно, и Lu.
По данному экземпляру МПСП с алфавитом Е соответствующий экземпляр ПСП строится следующим образом. Вначале вводится новый символ *, который помещается между символами цепочек экземпляра МПСП. При этом в цепочках списка А он следует за символами алфавита Е, а в цепочках списка В — предшествует им. Исключением является новая пара, которая строится по первой паре экземпляра МПСП; в этой паре есть дополнительный символ * в начале wh поэтому она может служить началом решения ПСП. К экземпляру ПСП добавляется также заключительная пара ($, *$). Она служит последней парой в решении ПСП, имитирующем решение экземпляра МПСП.
Формализуем описанную конструкцию. Пусть дан экземпляр МПСП со списками А = wu w2, …, wk и В = хи х2, …, хк. Предполагается, что символы * и $ отсутствуют в алфавите Е данного экземпляра МПСП. Строится экземпляр ПСП со списками С = уп, уи …, Ук+i и D = z0, zi, …, zk+1 следующим образом.
- Для /= 1, 2, …, к положим равной w, с символом * после каждого ее символа, а Zj — равной х, с символом * перед каждым ее символом.
- >’о = *ух и z0 = zi, т.е. нулевая пара выглядит так же, как первая, с той лишь разницей, что в начале цепочки из первого списка есть еще символ *. Отметим, что нулевая пара будет единственной парой экземпляра ПСП, в которой обе цепочки начинаются одним и тем же символом, поэтому всякое решение данного экземпляра ПСП должно начинаться с индекса 0.
- ук+1 = $ игк+1 = *$.
Пример 9.16. Пусть рис. 9.12 изображает экземпляр МПСП. Тогда экземпляр ПСП, построенный с помощью описанных выше действий, представлен на рис. 9.14. □ Теорема 9.17. МПСП сводится к ПСП.
Доказательство. В основе доказательства лежит описанная выше конструкция. Допустим, что iь i2, …, im — решение данного экземпляра МПСП со списками А и В; тогда w1wi|wi2…wim = х1хпх12…х{т. Если заменить каждую цепочку w соответствующей у и каждую х— соответствующей z, то получатся две почти одинаковые цепочки и
Z\Z{\Z\i—Z[m. Разница между ними в том, что у первой не хватает * в начале, а у второй — в конце, т.е.
*у\у^п-■ -yim = zlzi,zi2.. -zim*.
Список С | Список D | |
i | У< | zi |
0 | *1* | *1*1*1 |
1 | 1* | |
2 | 1*0*1*1*1* | *1*0 |
3 | 1*0* | *0 |
4 | $ | *$ |
Рис. 9.14. Построение экземпляра ПСП по экземпляру МПСП |
Однако уо = *V| и z0 = zt, поэтому можно «расправиться» с * в начале, изменив первый индекс на 0:
УоУпУп— -Уы = гоВД2.. .zim*. Для учета * в конце добавим индекс k + 1. Поскольку yk+) = $, a zk+I = *$, получим:
УъУ^Уъ-■-УтУы = z0zi1zi2…zimzk+1. Итак, показано, что последовательность 0, /ь /2,…, im, к + 1 — решение экземпляра ПСП.
Теперь докажем обратное, т.е. если построенный экземпляр ПСП имеет решение, то исходный экземпляр МПСП также имеет решение. Заметим, что решение данного экземпляра ПСП должно начинаться индексом 0 и заканчиваться индексом к + 1, поскольку только в нулевой паре цепочки у0 и z0 начинаются и только в (к + 1)-й паре цепочки yk+1 и zk+1 оканчиваются одним и тем же символом. Таким образом, решение экземпляра ПСП можно записать в виде 0, /ь i2, …, im, к + 1.
Мы утверждаем, что /ь i2, …, im есть решение экземпляра МПСП. Действительно, из цепочкиyQyjj’i2…yim>’k+i можно удалить все символы * и символ $ в конце. В результате получим цепочку wlwuwll…w\m. Точно так же, удалив символы * и символ $ из цепочки ZoZ;,^.. .Zimrk.b получим xixuxl2 .. ,x,m. Поскольку
УаУ\1У\2-■ -УхпУы = гоЗД2.. .zitnzk+1, получаем:
Итак, решение экземпляра ПСП содержит в себе решение экземпляра МПСП.
Теперь ясно, что конструкция, описанная перед данной теоремой, представляет собой алгоритм, который переводит экземпляр МПСП, имеющий решение, в экземпляр ПСП, также имеющий решение, а экземпляр МПСП, не имеющий решения, — в экземпляр ПСП, не имеющий решения. Таким образом, МПСП сводится к ПСП, а это означает, что из разрешимости ПСП следовала бы разрешимость МПСП. □
9.4.3. Завершение доказательства неразрешимости ПСП
Завершим цепь сведений (см. рис. 9.11), сведя Lu к МПСП. По заданной паре (М, w) строится экземпляр МПСП (А, В), имеющий решение тогда и только тогда, когда МТ М допускает вход w.
Основная идея состоит в том, что частичные решения экземпляра МПСП (А, В) имитируют обработку входа w машиной М. Частичные решения будут состоять из цепочек, которые являются префиксами последовательности МО М #ал#а2#аъ#…, где оА— начальное МО Мпри входной цепочке w и а, aj+1 для всех /’. Цепочка из списка В всегда на одно МО впереди цепочки из списка А, за исключением ситуации, когда М попадает в допускающее состояние. В этом случае используются специальные пары, позволяющие списку А «догнать» список бив конце концов выработать решение. Однако если машина не попадает в допускающее состояние, то эти пары не могут быть использованы, и проблема не имеет решения.
Для того чтобы упростить построение экземпляра МПСП, воспользуемся теоремой 8.12, согласно которой можно считать, что МТ никогда не печатает пробел и ее головка не сдвигается левее исходного положения. Тогда МО машины Тьюринга всегда будет цепочкой вида aqP, где аи (3 — цепочки непустых символов на ленте, а с/ — состояние. Однако тогда, когда головка обозревает пробел непосредственно справа от а, позволим цепочке /3 быть пустой вместо того, чтобы помещать пробел справа от состояния. Таким образом, символы цепочек а и /3 будут в точности соответствовать содержимому клеток, в которых записан вход, а также всех тех клеток справа, в которых головка уже побывала.
Пусть М= (Q, Е, Г, 5, q0, В, F) — машина Тьюринга, удовлетворяющая условиям теоремы 8.12, и w — входная цепочка из Е*. По ним строится экземпляр МПСП следующим образом. Чтобы понять, почему пары выбираются пары именно так, а не иначе, нужно помнить, что нам нужно, чтобы первый список всегда на одно МО отставал от второго, если только М не попадает в допускающее состояние.
- Первая пара имеет следующий вид.
Список А Список В
# #qQw#
В соответствии с правилами МПСП эта пара — первая в любом решении. С нее начинается имитация М на входе w. Заметим, что в начальный момент список В опережает список А на одно полное МО.
Ленточные символы и разделитель # могут быть добавлены в оба списка. Пары
Список А Список В
X X для каждого X из Г
# #
позволяют «копировать» символы, не обозначающие состояния. Выбирая такие пары, можно одновременно и удлинить цепочку списка А до соответствующей цепочки списка В, и скопировать часть предыдущего МО в конец цепочки списка В. Это поможет нам записать в конец цепочки списка В следующее МО в последовательности переходов М.
Для имитации перехода М применяются специальные пары. Для всех q из Q — F (т.е. состояние q не является допускающим), р из Q и X, Y,Z из Г есть следующие пары.
Список А Список В
qX Yp если 8(q, X) = (p,Y, R)
ZqX pZY если S(iq, X) = (p, Y, L); Z— любой ленточный символ
q# Yp# если S(q, В) = (p, Y, R)
Zq# pZY# если S(q, B) = (p, Y, L); Z — любой ленточный символ
Как и в пункте 2, эти пары позволяют добавить к цепочке В следующее МО, дописывая цепочку А таким образом, чтобы она соответствовала цепочке В. Однако эти пары используют состояние для определения, как нужно изменить текущее МО, чтобы получить следующее. Эти изменения— новое состояние, ленточный символ и сдвиг головки — отображаются в МО, которое строится в конце цепочки В.
Если МО, которое находится в конце цепочки В, содержит допускающее состояние, нужно сделать частичное решение полным. Для этого добавляются «МО», которые в действительности не являются МО машины М, а отображают ситуацию, при которой в допускающем состоянии разрешается поглощать все ленточные символы по обе стороны от головки. Таким образом, если q — допускающее состояние, то для всех ленточных символов X и Г существуют следующие пары.
Список А Список В
XqY q
Xq q
qY q
Наконец, если допускающее состояние поглотило все ленточные символы, то оно остается в одиночестве как последнее МО в цепочке В. Таким образом, разность цепочек (суффикс цепочки В, который нужно дописать к цепочке А для того, чтобы она соответствовала В) есть <т#, и для завершения решения используется последняя пара.
Список А Список В
qM #
В дальнейшем пары этих пяти типов называются парами из правила 1, из правила 2 и так далее.
Пример 9.18. Преобразуем в экземпляр МПСП машину М= {{qh q2, q3}, {0, 1}, {0, 1, В}, 8, qh В, {q3}) с таблицей 8
8(q„ 0) | 1) | fifa, В) | |
Я1 | (<72,1, Л) | (Я2, 0, L) | (Я 2, 1,1) |
Я 2 | (Яз, 0, L) | СЯ1, о, R) | (Я2, о, R) |
Яз | — | — | — |
и входной цепочкой w = 01.
Чтобы упростить построение, заметим, что М никогда не печатает пробел В, и его не будет ни в одном МО. Поэтому все пары с пустым символом В опускаются. Полный список пар с указанием их происхождения представлен на рис. 9.15.
Отметим, что М допускает входную цепочку 01 в результате следующей последовательности переходов.
q,01 Н lftl Н Н 1^01 q3Wl
Рассмотрим последовательность частичных решений, которая имитирует эти вычисления Мив конце концов приводит к решению. Начать нужно с первой пары, как того требует всякое решение МПСП. А:#
В: #q,01#
Для того чтобы частичное решение можно было продолжить, следующая цепочка из списка А должна быть префиксом разности q/01 #. Поэтому следующей парой должна быть (qfi, 1 q2). Это одна из пар, имитирующих переходы, полученная по правилу 3. Итак, получаем следующее частичное решение.
A: #qfi В: #qfi\#\q2
Теперь можно продолжить частичное решение, используя «копирующие» пары из правила 2 до тех пор, пока не дойдем до состояния во втором МО. Тогда частичное решение примет такой вид. A:#q,01#1 В: #q,01#\q2l#l
Для имитации перехода тут снова можно использовать пару из правила 3. Подходящей является пара (<721, 0qi), и в результате получается следующее частичное решение.
A: #ql0l#lq2l В: #qfi\#\q2\#\0q,
Правило | Список А | Список В | Источник |
(1) | # | #q, 01# | |
(2) | 0 | 0 | |
1 | 1 | ||
# | # | ||
(3) | q, 0 | Siqi,0) = (q2, 1 ,R) | |
0<7,1# | q2 00 | S(qul) = (q2, 0,1) | |
lq,l# | q2l0 | Siqi,l) = (q2, 0, L) | |
0 q,# | q2 01# | diqi,B) = (q2,\,L) | |
1 q,# | q211# | Siqi,B) = (q2,\,L) | |
0q20 | q300# | S(q2, 0) = (q3, 0, L) | |
lq20 | q310# | 8{Чъ 0) = (qh 0,1) | |
q21 | 0 q, | S(q2, l) = (qu0, R) | |
q2# | 0 q2# | %q2, B) = (q2, 0, R) | |
(4) | 0q30 | qs | |
0 q3l | qj | ||
\qs 0 | q3 | ||
\q3\ | qs | ||
0 q3 | qs | ||
q3 | |||
qs 0 | qs | ||
qs | |||
(5) | q3## | # |
Рис. 9.15. Экземпляр МПСП, построенный по МТ М и слову w из примера 9.18 |
Теперь можно было бы использовать пары из правила 3 и скопировать следующие три символа #, 1 и 0. Однако это решение было бы ошибочным, поскольку следующий переход М сдвигает головку влево, и символ 0, стоящий непосредственно перед состоянием, потребуется в следующей паре из правила 3. Поэтому копируются лишь два следующих символа.
A:#q,0\#\q2l#\ В: #qfimq2\mq,#\
Подходящей парой из правила 3 является (0qfi, q201#), и получается новое частичное решение.
A: #q,0l#lq2m0q1#
В: #q,0l#lq2m0q,#lq20l# Используя теперь еще одну пару (\q20, q310) из правила 3, приходим к допусканию.
А: %Д)1#1<721#10<7;#1<720
В: #^01#1^1#10^#1^01#^10 Теперь, с помощью пар из правила 4 в МО исключаются все символы, кроме q3. Для правильного копирования символов нужны также пары из правила 2. Частичное решение продолжается до следующего.
А: #q,0l#lq2l#l0q,#lq20l#q3l0l#q30l#q3l#
В: #qj0\#\q2l#\0qi#lq20\#q3\01#q30\#q3\#q3# Теперь в МО находится лишь q3. Чтобы завершить решение, можно использовать пару (q3##, #) из правила 5.
A: #qi01#lq2l#10qi#lq201#q3l01#q30l#q3l#q3##
В: #qi0l#lq2l#\0qi#lq20l#q3l0\#q30l#q3l#q3##
□
Теорема 9.19. Проблема соответствий Поста неразрешима.
Доказательство. Цепь сведений, представленная на рис. 9.11, почти завершена. Сведение МПСП к ПСП было показано в теореме 9.17. В данном разделе приведена конструкция, позволяющая свести Lu к МПСП. Таким образом, для завершения доказательства неразрешимости ПСП покажем, что эта конструкция корректна, т.е.
- М допускает w тогда и только тогда, когда построенный экземпляр МПСП имеет решение.
(Необходимость) Основную идею подсказывает пример 9.18. Если w принадлежит L(M), то можно проимитировать работу М со входом w, начав с пары из правила 1. Для копирования состояния каждого МО и имитации одного перехода М используются пары из правила 3, а для копирования ленточных символов и при необходимости маркера # — из 2. Если М попадает в допускающее состояние, то с помощью пар из правила 4 и заключительной пары из 5 мы позволяем цепочке А догнать цепочку В, тем самым формируя решение.
(Достаточность) Нужно доказать, что если данный экземпляр МПСП имеет решение, то только потому, что М допускает w. Отметим, что, поскольку мы имеем дело с МПСП, любое решение должно начинаться с первой пары, так что начало частичного решения имеет Следующий вид.
А:#
В: #q0w#
Поскольку в этом частичном решении нет допускающего состояния, то пары из правил 4 и 5 бесполезны. Состояния и окружающие их один или два символа могут быть обработаны только с помощью пар из правила 3, а все остальные ленточные символы и # должны быть обработаны с помощью пар из правила2. Поэтому, если Мне попала в допускающее состояние, все частичные решения имеют общий вид А: х В: ху,
где х — последовательность МО машины М, представляющих вычисления М со входом w, возможно, с символом # и началом а следующего МО в конце. Разность у содержит завершение а, еще один символ # и начало МО, следующего за а, вплоть до точки, на которой заканчивается а в х.
Отметим, что до тех пор, пока М не попадает в допускающее состояние, частичное решение не является решением, поскольку цепочка В длиннее цепочки А. Поэтому, если решение существует, то М должна когда-нибудь попасть в допускающее состояние, т.е. допустить w. □
9.4.4. Упражнения к разделу 9.4
Выясните, имеют ли решение следующие экземпляры ПСП. Каждый из них представлен двумя списками — А и В, и /-е цепочки списков соответствуют друг другу (/= 1, 2,…).
а) (*) А = (01,001, 10); В = (011, 10,00).
б) А = (01,001, 10); В = (011,01,00).
в) А = (ab, a, be, с); В = (be, ab, са, а).
(!) Было доказано, что ПСП неразрешима в предположении, что алфавит £ может быть произвольным. Покажите, что ПСП неразрешима даже при ограничении Е = {0, 1}, сведя ПСП к данному частному случаю.
(*!) Допустим, ПСП ограничена односимвольным алфавитом Е = {0}. Будет ли ПСП и в этом ограниченном случае по-прежнему неразрешимой?
(!) ТАГ-система Поста образуется множеством пар цепочек в некотором конечном алфавите X и стартовой цепочкой. Если (w, х) — пара и у — произвольная цепочка в Е, то мы говорим, что wy |- ух. Таким образом, на одном шаге
можно стереть некоторый префикс w «текущей» цепочки wy и вместо него в
*
конце приписать второй компонент пары с w — цепочку х. Определим |- как
нуль или несколько шагов точно так же, как для порождений в КС-грам-
*
матиках. Покажите, что проблема выяснения, верно ли z |- е для данного множества пар Р и стартовой цепочки z, неразрешима. Указание. Пусть для любых
МТ М и цепочки w стартовая цепочка z является начальным МО со входом w и разделителем # на конце. Выберите пары Р так, что всякое МО М должно в конце концов превращаться в МО, в которое М попадает за один переход. Устройте так, что если М попадает в допускающее состояние, то текущая цепочка может быть в конце концов стерта, т.е. сведена к е.
9.5. Другие неразрешимые проблемы
Здесь рассматривается ряд других неразрешимых проблем. Основным методом доказательства их неразрешимости является сведение к ним ПСП.
Проблемы, связанные с программами
Прежде всего, отметим, что на любом привычном языке можно написать программу, которая на вход получает экземпляр ПСП и ищет решение по определенной системе, например, в порядке возрастания длины (числа пар) потенциальных решений. Поскольку ПСП может иметь произвольный алфавит, нужно закодировать символы ее алфавита с помощью двоичного или другого фиксированного алфавита, о чем говорилось во врезке «ПСП как язык» в разделе 9.4.1.
Наша программа может выполнять любое конкретное действие, например, останавливаться или печатать фразу hello, world, если она нашла решение. В противном случае программа никогда не выполняет это конкретное действие. Таким образом, вопрос о том, печатает ли программа hello, world, останавливается ли, вызывает ли определенную функцию, заставляет ли консоль звенеть, или выполняет любое другое нетривиальное действие, неразрешим. В действительности для программ справедлив аналог теоремы Райса: всякое нетривиальное свойство программы, связанное с ее действиями (но не лексическое или синтаксическое свойство самой программы), является нераз- ршиыым.
Неразрешимость проблемы неоднозначности КС-грамматик
Программы и машины Тьюринга — это в общем-то одно и то же, так что в замечаниях из раздела 9.5.1 нет ничего удивительного. Теперь мы увидим, как ПСП можно свести к проблеме, которая, на первый взгляд, совсем не похожа на вопрос о компьютерах. Это проблема выяснения, является ли данная КС-грамматика неоднозначной.
Основная идея заключается в рассмотрении цепочек, представляющих обращение последовательности индексов, вместе с соответствующими им цепочками одного из списков экземпляра ПСП. Такие цепочки могут порождаться некоторой грамматикой. Аналогичное множество цепочек для второго списка экземпляра ПСП также может порождаться некоторой грамматикой. Если объединить эти грамматики очевидным способом, то найдется цепочка, которая порождается правилами каждой исходной грамматики тогда и только тогда, когда данный экземпляр ПСП имеет решение. Таким образом, решение существует тогда и только тогда, когда в грамматике для объединения присутствует неоднозначность.
Уточним эту идею. Пусть экземпляр ПСП состоит из списков А = wb w2, Wk и В = х{, х2, …, хк. Для списка А построим КС-грамматику с одной переменной А. Терминалами будут все символы алфавита Z, используемые в данном экземпляре ПСП, плюс не пересекающееся с Е множество индексных символов аь а2, …, ак, которые представляют выборы пар цепочек в решении ПСП. Таким образом, индексный символ а, представляет выбор Wi из списка А или из списка В. Продукции КС-грамматики для списка А имеют следующий вид.
А —» wiAdi | w2Aa2 I … I w^Aa^ | W\d\ [ w2a2 I … I Wk«k Обозначим эту грамматику через GA, а ее язык — через LA. Язык типа LA будет называться в дальнейшем языком для списка А.
Заметим, что все терминальные цепочки, порожденные переменной А в GA, имеют вид Wi1Wi2—WiII1aiin«-ai2ai1 при некотором т > 1, где /ь i2, …, im— последовательность целых чисел в пределах от 1 до к. Все выводимые цепочки содержат одиночный символ А, отделяющий цепочки w от индексных символов а, до тех пор, пока не используется одно из к правил последней группы, в которых А отсутствует. Поэтому деревья разбора имеют структуру, представленную на рис. 9.16.
А
Рис. 9.16. Общий вид деревьев разбора в грамматике GA |
Заметим также, что любая терминальная цепочка порождается в GA одним-един- ственным способом. Индексные символы в конце цепочки однозначно определяют, какое именно правило должно использоваться на каждом шаге, поскольку тела лишь двух продукций оканчиваются данным индексным символом а,: А —> щАа, и Л —> и^а;. Первую продукцию нужно использовать, когда данный шаг порождения не последний, в противном же случае используется вторая продукция.
Рассмотрим теперь вторую часть экземпляра ПСП— список В = хх,х2, …,xk. Этому списку мы поставим в соответствие еще одну грамматику Gb с такими продукциями.
В —> х\Вах | х2Ва2 I … I хфак \ ххах | х2а2 | … | xkak
Язык этой грамматики обозначим через Lв. Все замечания, касающиеся GA, справедливы и для GB. В частности, терминальная цепочка из Lu имеет одно-единственное порождение, определяемое индексными символами в конце этой цепочки.
Наконец, мы объединяем языки и грамматики двух списков, формируя грамматику Gab для всего данного экземпляра ПСП. GAB имеет следующие компоненты.
Переменные А, В и S, последняя из которых — стартовый символ.
Продукции S —> А | В.
Все продукции грамматики GA.
Все продукции грамматики GB.
Утверждаем, что грамматика GAB неоднозначна тогда и только тогда, когда экземпляр (А, В) ПСП имеет решение. Это утверждение является основным в следующей теореме.
Теорема 9.20. Вопрос о неоднозначности КС-грамматики неразрешим. Основная часть сведения ПСП к вопросу о неразрешимости КС-грамматики проведена выше. В силу неразрешимости ПСП это сведение доказывает неразрешимость проблемы неоднозначности КС-грамматики. Остается лишь показать корректность приведенной конструкции, т.е. что
- Gab неоднозначна тогда и только тогда, когда экземпляр (А, В) ПСП имеет решение.
(Достаточность) Предположим, что ix,i2,…,im— решение данного экземпляра ПСП. Рассмотрим два порождения в GAB.
S=>A=> Wjj/la;, => ~wnwxlAanan =>•■■=>
Wj [Wfc • • ■ Щт-1 Л°im-1′ ‘ ‘ ai2I => Wi I Wi2 • • ■ Wim°im’ » ai2°i I
S => В => xnBatl => x^xnBanan =>■■■=>
Поскольку /ь i2, …, zm— решение, то w:lwn—wlm = хих,2—х,т, т.е. эти два порождения представляют собой порождения одной и той же цепочки. А поскольку сами порождения, очевидно, являются двумя различными левыми порождениями одной и той же терминальной цепочки, делаем вывод, что грамматика GAB неоднозначна.
(Необходимость) Как было отмечено ранее, для данной терминальной цепочки существует не более одного порождения в GA и не более одного порождения в GB. Поэтому терминальная цепочка может иметь в GAb два левых порождения лишь в том случае, если одно из них начинается с5=>^ и продолжается порождением в GA, а второе начинается с S => В и продолжается порождением в GB.
Цепочка с двумя порождениями имеет окончание из индексов а,т—а12а,, при некотором т> 1. Это окончание и должно быть решением данного экземпляра ПСП, поскольку то, что ей предшествует в цепочке с двумя порождениями, есть одновременно
hwilw,2—wlm,hxilxil—xim. □
9.5.3. Дополнение языка списка
Наличие контекстно-свободных языков, подобных ЬА для списка А, позволяет показать неразрешимость ряда проблем, связанных с КС-языками. Еще больше фактов о неразрешимости свойств КС-языков можно получить, рассмотрев дополнение этого языка La . Отметим, что язык LA состоит из всех цепочек в алфавите X U {а/, а2, …, ак}, не содержащихся в LA, где £ — алфавит некоторого экземпляра ПСП, а а, — символы, которые не принадлежат Z и представляют индексы пар в этом экземпляре ПСП.
Интересными элементами языка LA являются цепочки, префикс которых принадлежит Z , т.е. является конкатенацией цепочек из списка А, а суффикс состоит из индексных символов, не соответствующих цепочкам из префикса. Однако помимо этих элементов в La содержатся цепочки неправильного вида, не принадлежащие языку регулярного выражения Z*(a, + а2 + … + ак)*.
Мы утверждаем, что LA является КС-языком. В отличие от LA, грамматику для 1А построить нелегко, но можно построить МП-автомат, точнее— детерминированный МП-автомат. Конструкция описывается в следующей теореме.
Теорема 9.21. Если ЬА— язык для списка А, то LA является контекстно-свободным языком.
Доказательство. Пусть Е— алфавит цепочек из списка А= (w;,w2, …,Wk}, а 1= {а/,а2, …, йк}— множество индексных символов. ДМПА Р, который по построению должен допускать LA , работает следующим образом.
Обозревая символ из £, Р записывает его в магазин. Поскольку все цепочки из X* принадлежат LA , Р допускает их по мере чтения.
При виде индексного символа из /, скажем, а„ Р просматривает магазин, чтобы проверить, образуют ли символы из его верхней части цепочку w,R, т.е. обращение соответствующей цепочки:
а) если это не так, то входная цепочка, а также всякое ее продолжение принадлежат . Поэтому Р переходит в допускающее состояние, в котором он дочитывает вход, не изменяя содержимое магазина;
б) если цепочка WiR была извлечена из верхней части магазина, но маркер дна магазина не показался на вершине, то Р допускает, но запоминает в своем состоянии, что он ищет только символы из / и может еще встретить цепочку из LA (которую не допустит). Р повторяет шаг 2 до тех пор, пока вопрос о принадлежности входа языку LA будет оставаться неразрешенным;
в) если vf;R была извлечена и показался маркер дна магазина, то Р прочитал вход, принадлежащий LA. Р не допускает этот вход. Однако, поскольку всякое продолжение этого входа уже не может содержаться в LA, Р переходит в такое состояние, в котором он допускает все последующие входы, не изменяя магазин.
- Если после того, как Р считал один или несколько символов из /, он встречает еще один символ из Z, то входная цепочка не может принадлежать LA, поскольку имеет неправильную форму. Поэтому Р переходит в состояние, в котором он допускает
этот и все последующие входы, не изменяя магазин.
□
Для получения результатов о неразрешимости КС-языков можно использовать La, Lb и их дополнения различными способами. Часть этих фактов собрана в следующей теореме.
Теорема 9.22. Пусть G/ и G2 — КС-грамматики, a R — регулярное выражение. Тогда неразрешимы следующие проблемы:
а) L(G,)f)L(G2) = 0?
б) L(Gi) — L(G2) ?
в) ЦО,) = ЦЯ)?
г) верно ли, что L(Gj) — 7* для некоторого алфавита Т1
д) L(G,)cL(G2)?
е) L(R) с L(Gi) ?
Доказательство. Каждое из доказательств представляет собой сведение ПСП. Покажем, как преобразовать экземпляр (А, В) ПСП в вопрос о КС-грамматиках и/или регулярных выражениях, который имеет ответ «да» тогда и только тогда, когда данный экземпляр ПСП имеет решение. В некоторых случаях ПСП сводится к самому вопросу, сформулированному в теореме, в других же случаях —■ к его дополнению. Это не имеет значения, поскольку, если показано, что дополнение проблемы неразрешимо, то сама проблема также не может быть разрешимой, так как рекурсивные языки замкнуты относительно дополнения (теорема 9.3).
Алфавит цепочек данного экземпляра ПСП обозначим Е, а алфавит индексных символов — I. В наших сведениях будем опираться на то, что LA, LB, LA и LB имеют КС-грамматики. КС-грамматики либо строятся непосредственно, как в разделе 9.5.2, либо вначале строятся МП-автоматы для языков-дополнений (см. теорему 9.21), а затем с помощью теоремы 6.14 они преобразуются в КС-грамматики.
Пусть L(Gj) = LK и L(G\) = LB. Тогда L(G/) f) L(G2) — множество решений данного экземпляра ПСП. Пересечение пусто тогда и только тогда, когда решений нет. Отметим, что технически мы свели ПСП к языку, который состоит из пар КС-грамматик с непустым пересечением их языков, т.е. показали, что проблема «является ли пересечение языков двух КС-грамматик непустым?» неразрешима. Однако, как указано во введении к доказательству, доказать неразрешимость дополнения проблемы — это то же самое, что доказать неразрешимость самой проблемы.
Поскольку КС-языки замкнуты относительно объединения, то можно построить КС- грамматику G; для La U LB . Поскольку (Е U /)* — регулярное множество, то для него, конечно же, можно построить КС-грамматику G2■ Далее, LA U LB — LA П LB ■ Таким образом, в L(Gi) отсутствуют лишь цепочки, которые представляют решения данного экземпляра ПСП. L(G2) содержит все цепочки из (Е U Г)’, так что эти языки совпадают тогда и только тогда, когда данный экземпляр ПСП не имеет решения.
Рассуждения точно такие же, как и в п. 2, но полагаем R регулярным выражением
(г U i)\
Достаточно рассуждений п. 3, поскольку Е U /— единственный алфавит, замыканием которого может быть LA U LB .
Пусть G/ — КС-грамматика для (2 U Г) и G2 — КС-грамматика для LA \J LB . Следовательно, L(Gj) с L(G2) тогда и только тогда, когда LA U LB = (Е U /)*, т.е. тогда и только тогда, когда данный экземпляр ПСП не имеет решения.
Рассуждения точно такие же, как и в п. 5, но полагаем R регулярным выражением
(Е UI)*, a L(Gi) — Гл U V □
9.5.4. Упражнения к разделу 9.5
9.5.1. (*) Пусть L— множество (кодов) КС-грамматик G, у которых L(G) содержит хотя бы один палиндром. Покажите неразрешимость L. Указание. Сведите ПСП к L путем построения по каждому экземпляру ПСП грамматики, содержащей палиндром тогда и только тогда, когда этот экземпляр ПСП имеет решение.
- (!) Покажите, что язык LA U LB является регулярным тогда и только тогда, когда он представляет собой множество всех цепочек над своим алфавитом, т.е. экземпляр (А, В) ПСП не имеет решения. Таким образом, докажите неразрешимость вопроса, порождает ли КС-грамматика регулярный язык. Указание. Допустим, решение ПСП существует; например, в LA U LB нет цепочки wx, где w — цепочка из алфавита экземпляра ПСП, ах — соответствующая цепочка индексных символов, записанная в обратном порядке. Определим гомоморфизм h(0) = w и h( l)=x. Тогда, что представляет собой LA U LB )? В доказательстве того, что язык La U LB нерегулярен, используйте замкнутость регулярных множеств относительно обратного гомоморфизма и дополнения, а также лемму о накачке для регулярных множеств.
- (!!) Вопрос о том, является ли дополнение КС-языка также КС-языком, неразрешим. С помощью упражнения 9.5.2 можно показать, что неразрешим вопрос о том, является ли дополнение КС-языка регулярным языком, но это не одно и то же. Чтобы доказать первое утверждение, нужно определить другой язык, который представляет цепочки, не являющиеся решениями экземпляра (А, В) ПСП. Пусть Lав есть множество цепочек вида wttxttyttz со следующими свойствами.
- w и х — цепочки над алфавитом £ данного экземпляра ПСП.
- у и z — цепочки над алфавитом индексов I данного экземпляра.
- # — символ, не принадлежащий ни X, ни /.
- w*xK.
- уФгя.
- jcr не совпадает с тем, что порождает цепочка индексов у в соответствии со списком В.
- w не совпадает с тем, что порождает цепочка индексов zR в соответствии со списком А.
Отметим, что LAB состоит из всех цепочек, принадлежащих £*#£*#/*#/*, если только экземпляр (А, В) ПСП не имеет решения, но независимо от этого LAB является КС-языком. Докажите, что ЬАВ является КС-языком тогда и только тогда, когда решения нет. Указание. Как и в упражнении 9.5.2, используйте прием с обратным гомоморфизмом, а для того, чтобы добиться равенства длин тех или иных подцепочек, воспользуйтесь леммой Огдена, как в указании к упражнению 7.2.5, б.
9.6. Резюме
Рекурсивные и рекурсивно-перечислимые языки. Языки, допускаемые машинами Тьюринга, называются рекурсивно-перечислимыми (РП), а РП-языки, допускаемые МТ, которые всегда останавливаются, — рекурсивными.
Дополнения рекурсивных и РП-языков. Множество рекурсивных языков замкнуто относительно дополнения, и если язык и его дополнение являются РП, то оба они рекурсивны. Поэтому дополнение языка, являющегося РП, но не рекурсивным, не может быть РП.
Разрешимость и неразрешимость. «Разрешимость» есть синоним «рекурсив- ности», однако языки чаще называются «рекурсивными», а проблемы (которые представляют собой языки, интерпретируемые как вопросы) — «разрешимыми». Если язык не является рекурсивным, то проблема, которую выражает этот язык, называется «неразрешимой».
Язык Lj. В этот язык входит каждая цепочка в алфавите {0, 1}, которая, будучи проинтерпретированной как код МТ, не принадлежит языку этой МТ. Язык ЬА является хорошим примером не РП-языка, т.е. его не допускает ни одна машина Тьюринга.
Универсальный язык. Язык La состоит из цепочек, интерпретируемых как код МТ, к которому дописан ее вход. Цепочка принадлежит Lu, если эта МТ допускает данный вход. Язык Lu — это пример РП-языка, который не является рекурсивным.
Теорема Райса. Всякое нетривиальное свойство языков, допускаемых МТ, является неразрешимым. Например, множество кодов машин Тьюринга, допускающих пустой язык, согласно теореме Райса является неразрешимым. В действительности этот язык не является РП, хотя его дополнение — множество кодов МТ, допускающих хотя бы одну цепочку, — является РП, но не рекурсивным.
Проблема соответствий Поста. Заданы два списка, содержащие одинаковое количество цепочек. Спрашивается, можно ли, выбирая последовательности соответствующих цепочек из этих двух списков, построить путем их конкатенации одну и ту же цепочку. ПСП является важным примером неразрешимой проблемы. Сводимость ПСП к ряду других проблем обеспечивает доказательство их неразрешимости.
Неразрешимые проблемы, связанные с контекстно-свободными языками. Посредством сведения ПСП можно доказать неразрешимость многих вопросов о КС- языках или их грамматиках. Так, например, неразрешимы вопросы о неоднозначности КС-грамматики, о включении одного КС-языка в другой или о пустоте пересечения двух КС-языков.
9.7. Литература
Результат о неразрешимости универсального языка фактически взят из работы Тьюринга [9], хотя там он выражен в терминах вычислений арифметических функций и останова, а не в терминах языков и допустимости по заключительному состоянию. Теорема Райса взята из [8].
Неразрешимость проблемы соответствий Поста была доказана в [7], но приведенное здесь доказательство, не вошедшее в печатные работы, принадлежит Р. В. Флойду (R. W. Floyd). Неразрешимость ТАГ-систем Поста (определенных в упражнении 9.4.4) доказывается в [6].
Основополагающими работами о неразрешимости вопросов, связанных с контекстно- свободными языками, являются [1] и [5]. Однако неразрешимость неоднозначных КС- грамматик была установлена независимо друг от друга Кантором [2], Флойдом [4], Хом- ским и Шютценберже [3].
- Bar-Hillel, М. Perles, and Е. Shamir, «On formal properties of simple phrase-structure grammars», Z. Phonetik. Sprachwiss. Kommunikations-forsch. 14 (1961), pp. 143-172.
- C. Cantor, «On the ambiguity problem in Backus systems», J. ACM 9:4 (1962), pp. 477-479.
- Chomsky and M. P. Schutzenberger, «The algebraic theory of context-free languages», Computer Programming and Formal Systems (1963), North Holland, Amsterdam, pp. 118-161. (Хомский H., Шютценберже M. Алгебраическая теория контекстно- свободных языков. — Кибернетический сборник, новая серия, вып. 3. — М.: Мир, 1966, С. 195-242.)
- W. Floyd, «On ambiguity in phrase structure languages», Communications of the ACM 5:10(1962), pp. 526-534.
- Ginsburg and G. F. Rose, «Some recursively unsolvable problems in ALGOL-like languages», J. ACM 10:1 (1963), pp. 29-47.
- L. Minsky, «Recursive unsolvability of Post’s problem of ‘tag’ and other topics in the theory of Turing machines», Annals of Mathematics 74:3 (1961), pp. 437-455.
- Post, «A variant of a recursively unsolvable problem», Bulletin of the AMS 52 (1946), pp. 264-268.
- G. Rice, «Classes of recursively enumerable sets and their decision problems», Transactions of the AMS 89 (1953), pp. 25-59.
- M. Turing, «On computable numbers with an application to the Entscheidungsprob- lem», Proc. London Math. Society 2:42 (1936), pp. 230-265.
[1] Заметим, что в действительности эта таблица выглядит совсем не так, как на рисунке. Ее верхние строки должны быть заполнены нулями, поскольку все небольшие целые числа не могут быть правильными кодами МТ.
[2] По существу, их всего три. — Прим. ред.