Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Морозов Лекции по дискретной математике и теории алгоритмов ч. 3 Минимашины

.pdf
Скачиваний:
71
Добавлен:
28.03.2016
Размер:
228.65 Кб
Скачать

Глава 1

Минимашины

Минимашина (ММ), иногда называемая здесь просто машиной, имеет

бесконечное семейство основных регистров R0, R1, R2 : : :,

бесконечное семейство вспомогательных регистров S0, S1, S2 : : :,

командный регистр (или регистр команд) КР

программу, представляющую собой (возможно пустой) список команд, пронумерованных последовательными числами, начиная с 0:

0:Команда0

1:Команда1

k: Командаk

Все вышеупомянутые регистры Ri, Si и КР предназначены для хра- нения натуральных чисел. В любой момент времени в каждом регистре записано ровно одно число.

Имеется шесть легко запоминаемых типов команд, естественно раздел¼нных на 3 группы, описание которых приведено в следующей таблице.

1

2

 

Глава 1. Минимашины

 

 

 

 

 

 

Команды присваивания

 

 

 

 

 

 

G:=m

записывает в регистр G натуральное число m и

 

 

 

увеличивает содержимое регистра команд на 1

 

 

 

(т.е., ММ переходит к исполнению следующей

 

 

 

по списку команды)

 

 

 

 

 

 

G:=H

записывает в регистр G значение, содержащееся

 

 

 

в регистре H, и увеличивает содержимое реги-

 

 

 

стра команд на 1

 

 

 

 

 

 

 

Арифметические команды

 

 

inc G

увеличивает содержимое регистра G íà 1 è óâå-

 

 

 

личивает содержимое регистра команд на 1

 

 

dec H

уменьшает содержимое регистра H íà 1, åñëè

 

 

 

оно больше нуля, и увеличивает содержимое ре-

 

 

 

гистра команд на 1

 

 

 

 

 

 

 

Команды перехода

 

 

 

 

 

 

if F=0 goto m

если содержимое регистра F равно 0, то заносит

 

 

 

в командный регистр число m, в противном слу-

 

 

 

чае увеличивает значение командного регистра

 

 

 

íà 1

 

 

 

 

 

 

goto m

заносит в регистр команд число m

 

 

 

 

 

Очевидно, что любая минимашина полностью зада¼тся своей программой, и поэтому имеет смысл просто отождествлять минимашины их с программами.

Перед началом работы минимашины в е¼ основные и вспомогательные регистры заносятся некоторые исходные данные натуральные числа, а в регистр КР заносится число 0. Минимашина работает, последовательно исполняя шаги. Шаг работы машины состоит в выполнении команды, номер которой в данный момент записан в КР в соответствии с вышеописанной инструкцией. Выполнив шаг, минимашина переходит к следующему шагу и т.д. В случае, когда в КР окажется число, не являющееся номером какой либо команды из программы, машина завершает свою работу и останавливается.

Отметим, что команды перехода могут осуществлять как переход к выполнению конкретных команд так и остановку работы машины в слу- чае, когда команда с соответствующим номером отсутствует.

Заметим, что каждая программа может изменять значения только в тех регистрах, которые явно упомянуты в е¼ тексте. Значения в осталь-

3

ных регистрах она изменить не может.

С каждой ММ P и натуральным числом n можно связать функцию

AnP : Nn ! N, значение которой на x1; : : : ; xn определяется следующим образом:

заносим в регистры R1; : : : ; Rn соответственно значения x1,

: : :, xn, во все остальные регистры заносим нули, в КР заносим 0 и запускаем программу P . Когда машина завершит свою работу (останавливается), значение функции AnP (x1; : : : ; xn) возьм¼м из регистра R0. Если машина никогда не завершит свою работу, то это значение считается неопредел¼нным.

Заметим, что содержимое регистров, не упомянутых в программе (за исключением R0), не используется этой программой и не влияет на результат работы этой программы содержимое регистра R0 в конце е¼ работы.

Определение 1.0.1 Частичная функция из Nn в N называется вычислимыой на минимашине, если она совпадает с функцией вида AnP , äëÿ подходящей программы P .

Привед¼м пример простой программы, вычисляющей сумму чисел (предлагаем читателю самостоятельно убедиться в этом):

0:R0:=R1

1:if R2=0 goto 5

2:dec R2

3:inc R0

4:goto 1

Таким образом, сложение натуральных чисел является бинарной функцией, вычислимой на ММ.

В дальнейшем для нас будет важнее доказывать существование программ для вычисления определенных функций, чем получать их конкретный текст. Для облегчения таких доказательств мы будем использовать так называемые расширенные минимашины (РММ). Они отлича- ются от минимашин только тем, что в программах для этих машин кроме обычных команд разрешено использовать дополнительные команды âèäà H:=f(H1,...,Hk), для произвольных (вообще говоря, частичных)

4

Глава 1. Минимашины

функций f. Исполнение такой команды состоит в вычислении значения

f на значениях регистров H1; : : : ; Hk, помещении результата в регистр H с последующим увеличением значения КР на 1. Значения всех остальных регистров расширенной машины при этом не изменяются. Если f

не определена на данных значениях, то считается, что вычисление зна- чения f продолжается бесконечно, и при этом, разумеется, расширенная

машина, выполняющая эту команду, никогда не завершит свою работу. Легко заметить, что минимашины являются частным случаем рас-

ширенных минимашин.

Определение 1.0.2 Две расширенных минимашины назов¼м эквивалентными, если, будучи запущеными с любыми одинаковыми наборами значений основных регистров и нулевыми значениями всех вспомогательных регистров, они либо обе никогда не завершат свою работу либо обе когда нибудь завершат свою работу и после этого значения во всех основных регистрах у них совпадут.

Определение функций, вычислимых на РММ формулируется аналогичным образом.

Предложение 1.0.3 (Элиминация1 дополнительных команд) Если все функции, участвующие в расширенных командах некоторой расширенной минимашины, вычислимы на минимашинах, то эта расширенная манимашина эквивалентна некоторой обычной минимашине.

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

Действительно пусть P программа для РММ, содержащая допол-

нительные команды. Зафиксируем в ней некоторую дополнительную команду H:=f(H1,...,Hk), где функция f вычисляется некоторой программой Pf , использующей попарно различные основные регистры R0, R1, : : :,

Rk, и дополнительные регистры S1, : : :, Sl. Выберем среди дополнитель-

ных регистров попарно различные регистры R0; R1; : : : ; Rk è S1 ; : : : ; Sl , не упоминаемые в программах P и Pf . Определим программу Pf êàê

результат одновременной замены в Pf всех регистров R0; R1; : : : ; Rk è S1; : : : ; Sl соответственно на R0; R1; : : : ; Rk è S1 ; : : : ; Sl . На место зафик- сированной нами команды H:=f(H1,...,Hk) вставим в программу P по- следовательность команд

5

R

1:=H1

R

2:=H2

...

R

k:=Hk P

f

H:=R

0,

заново пронумеруем получившийся список натуральными числами, на- чиная с 0, после чего как в части Pf так и в оставшейся части программы

P заменим во всех операторах перехода if . . . goto m и goto m числа m на другие числа так, чтобы они задавали

переход на те же команды, что и раньше в случае, если они задавали переход на конкретные команды,

переход на команду, следующую за всеми командами фрагмента P

f

в случае, когда команда перехода предназначена для выхода из P

f ,

переход на несуществующую команду, если команда перехода предназначена для завершение работы программы.

Нетрудно убедиться, что полученная таким способом программа эквивалентна исходной и при этом содержит на единицу меньше дополнительных команд.

Таким образом, для доказательства существования программ для ММ, вычисляющих некоторую функцию, достаточно доказать существование программ для РММ, вычисляющих ту же самую функцию, что, как правило, намного проще.

Теорема 1.0.4 Все частично рекурсивные функции вычислимы на ММ.

Доказательство. Нам достаточно сначала доказать вычислимость на ММ простейших функций, а потом доказать, что применение операторов S, R и M к вычислимым на ММ функциям снова приводит к функциям, вычислимым на ММ. Здесь мы будем пользоваться только что доказанным результатом об элиминации дополнительных команд для РММ.

Простейшие функции вычислимы на ММ. Действительно, функция s(x) = x+1 вычисляется программой из двух команд 0: R0:=R1 è 1: inc

6

Глава 1. Минимашины

R0, функция 0(x) =

0 вычисляется программой 0: R0:=0, а функция

Imn (x1; : : : ; xn) вычисляется программой 0: R0:=Rm.

Докажем вычислимость композиции функций, вычислимых на ММ, т.е., что применение оператора суперпозиции S к функциям, вычисли-

мым на ММ, снова дает функцию, вычислимую на ММ. Предположим, что функции h1(x1; : : : ; xn), . . . , hk(x1; : : : ; xn) è g(y1; : : : ; yk) вычислимы на ММ. Тогда их композиция вычислима на РММ при помощи следующей программы, в которой во всех расширенных операторах участвуют вычислимые на ММ функции:

0:S1:=h1(R1,...,Rn)

1:S2:=h2(R1,...,Rn)

k-1: Sk:=hk(R1,...,Rn)

k:R0:=g(S1,...,Sk).

Покажем, что функция, получающаяся из функций, вычислимых на ММ, с помощью оператора R примитивной рекурсии также вычислима

на ММ. Предположим, что функция f(y; x1; : : : ; xn) зада¼тся примитивно рекурсивной схемой

f(y + 1; x1; : : : ; xn) =

h(x1; : : : ; xn; y; f(y; x1; : : : ; xn));

f(0; x1; : : : ; xn)

=

g(x1; : : : ; xn)

и функции g и h вычислимы на ММ. Тогда, как нетрудно убедиться, функция f вычисляется следующей программой для РММ:

0:R0:=g(R2,...,Rn+1)

1:S0:=0

2:if R1=0 goto 7

3:R0:=h(R2,...,Rn+1,S0,R0)

4:inc S0

5:dec R1

6:goto 2

Покажем, что применение оператора минимизации M к функции,

вычислимой на ММ, снова приводит к функции, вычислимой на ММ. Предположим, что функция f получается при помощи оператора мини-

мизации из вычислимой на ММ функции g как

f(x1; : : : ; xn) = y(g(x1; : : : ; xn; y) = 0):

7

Тогда f можно вычислить при помощи следующей программы для РММ:

0:R0:=0

1:S0:=g(R1,...,Rn,R0)

2:if S0=0 goto 5

3:inc R0

4:goto 1

Таким образом, мы показали, что любая ч.р.ф. вычислима на ММ, и теорема доказана.

Теорема 1.0.5 Любая вычислимая на ММ функция является ч.р.ф.

Доказательство. Сначала мы определим кодировки некоторых объектов, относящихся к ММ, в том числе и самих ММ и установим их некоторые свойства. Фактически, мы докажем, что некоторые действия и понятия, относящиеся к ММ, можно выразить с помощью примитивно рекурсивных функций, откуда потом получим саму теорему.

Код объекта a любой природы (регистра, команды и пр.) соответствующее ему натуральное число будем обозначать через (a). Последовательно определим коды различных объектов следующим образом:

Кодирование регистров: (Ri) = 2i, (Si) = 2i + 1.

Кодирование команд:

(Q := m) = h0; (Q); mi;

(Q := H) = h1; (Q); (H)i;

(inc Q) = h2; (Q)i;

(dec Q) = h3; (Q)i;

(if F = 0 goto m) = h4; (F ); mi;

(goto m) = h5; mi:

Упражнение. Доказать, что множество кодов команд примитивно рекурсивно.

8

Глава 1. Минимашины

Кодирование машин: если 0:c0, 1:c1, . . . , k-1:ck 1 список команд некоторой ММ M, то кодом этой машины будем называть число

(M) = h (c0); : : : ; (ck 1)i:

Упражнение. Доказать, что множество всевозможных кодов минимашин примитивно рекурсивно.

Как уже отмечалось, если какой-либо регистр (за исключением R0) не упоминается в программе, то результат вычисления число, содержа- щееся в регистре R0 после завершения этой программы не зависит от содержимого этого регистра в начале работы программы. Поэтому при рассмотрении работы минимашины имеет смысл следить за значениями не всех е¼ регистров, а только тех, которые упомянуты в е¼ программе. Если регистр Ri èëè Si упомянут в программе, то, по свойствам кодирования конечных последовательностей, его код (соответственно 2i или

2i + 1) не превосходит кода команды, в которой он упомянут, а этот код,

в свою очередь, не превосходит код всей программы. Таким образом, максимальный номер регистра, содержимое которого нам вообще имеет смысл отслеживать, можно хоть и грубо, но зато просто оценить сверху кодом программы.

Это наблюдение объясняет следующее определение:

Определение 1.0.6 Конфигурацией машины c кодом a в некоторый

момент времени назов¼м пару, состоящую из содержимого командного регистра c и последовательности значений регистров R0; S0; : : : ; Ra; Sa, которые мы обозначим соответственно через [R0]; [S0]; : : : ; [Ra]; [Sa]. Если C такая конфигурация, то е¼ кодом назов¼м число

(C) = hc; h[R0]; [S0]; : : : ; [Ra]; [Sa]ii :

Если в процессе завершившегося вычисления минимашина последовательно находилась в конфигурациях C0; C1; : : : ; Ck 1, то такую после- довательность будем называть вычислением на этой ММ, а кодом этого вычисления назов¼м число h (C0); (C1); : : : ; (Ck 1)i.

Теперь все необходимые коды определены, и мы можем определить отношение T (a; x; y), играющее важнейшую роль в теории вычислимо-

ñòè.

9

Определение 1.0.7 Определим отношение T (a; x; y) как

T (a; x; y) , (a номер некоторой ММ) ^ (seq (x)) ^

(y код вычисления, начатого при содержимых

регистров Ri, 1 6 i 6 min(a; `h (x)) равных соответственно (x)0; (x)1; : : : и нулевых значениях во всех остальных регистрах)

Лемма 1.0.8 Отношение T (a; x; y), примитивно рекурсивно.

В определении этого отношения участвуют три конъюнктивных члена, прич¼м примитивная рекурсивность первых двух следует из уже доказанного. Оставшийся конъюнктивный член можно в свою очередь представить, как конъюнкцию следующих условий (сначала приводится неформальное описание, потом выписывается условие, гарантирующее его примитивную рекурсивность):

y код последовательности: seq (y),

(y)0 номер последовательности длины 2, второй элемент которой кодирует последовательность длины 2a + 2:

seq ((y)0) ^ `h ((y)0) = 2 ^ seq (((y)0)1) ^ `h (((y)0)1) = 2a + 2:

В начальной конфигурации все значения регистров Ri, кодирующие входные данные, равны соответственно (x)0; (x)1; : : ::

8i 6 min(a; `h (x))(i 6= 0 ! (((y)0)1)2i = (x)i 1):

В начальной конфигурации в остальных Ri содержатся нули:

(((y)0)1)0 = 0 ^ 8i 6 a(i > min(a; `h (x)) ! (((y)0)1)2i = 0):

В начальной конфигурации все вспомогательные регистры содержат

0:

8i 6 a((((y)0)1)2i+1 = 0):

Прежде, чем продолжить перечисление условий, предположим, что мы уже доказали примитивную рекурсивность функции Next (u; a), выдаю-

щей код конфигурации, получающейся из конфигурации с кодом u за один шаг вычисления на машине с кодом a, если a код машины и u

10

Глава 1. Минимашины

код конфигурации, и какое нибудь (неважно какое) число, в противном случае. Это мы сделаем чуть позже. Тогда к нашим условиям останется добавить еще следующие конъюнктивные члены:

Каждая следующая конфигурация получается из предыдущей в результате исполнения шага вычисления:

8i < `h (y)(i + 1 < `h (y) ! (y)i+1 = Next((y)i; a):

В самой последней конфигурации номер команды для исполнения не совпадает ни с одним номером команды в программе:

((y)`h (y) 1)0 > `h (a)

Привед¼нная выше запись отношения T (a; x; y) получается из отно-

шений и функций, примитивная рекурсивность которых уже доказана, с помощью логических связок ^, _, :, ! и навешивания ограниченных

кванторов. Это гарантирует примитивную рекурсивность этого отношения.

Осталось показать примитивную рекурсивность функции Next (u; a). Заметим, что код команды, исполняемой в конфигурации с кодом u (т.е.,

содержимое командного регистра), равен Êîì (a; u) = (a)(u)0 . Íàì ïîíà- добятся также описанные ниже примитивно рекурсивные функции.

ЗамРег (k; m; u): если k код регистра в конфигурации с кодом u, то эта

функция выда¼т код конфигурации, полученной из конфигурации с кодом u заменой содержимого регистра с кодом k на m.

Такую функцию можно определить, например, так: поскольку ((u)1)kсодержимое регистра с кодом k, для получения требуемого кода состояния регистров можно в разложении числа (u)1 (т.е., кода состояния регистров) на простые сомножители убрать всю степень простого pk, ò.å.,

сомножитель p

((u)1)k+1

 

p

m+1

k

и заменить его на

k , получив новый код состо-

 

 

 

 

 

(u)1 pm+1

яния регистров k а затем `собрать' код полученной конфигура-

p((k u)1)k+1

(u)1 pm+1

öèè â âèäå (u)0; k . Последнее выражение как раз годится в

p((k u)1)k+1

качестве определения для функции ЗамРег (k; m; u), гарантирующее е¼

примитивную рекурсивность.

Мы оставляем читателю несложные доказательства существования примитивно рекурсивных функций со следующими свойствами: