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

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

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

11

ЗамКР (m; u): если u код конфигурации, то эта функция выда¼т код конфигурации, полученной из конфигурации с кодом u заменой содержимого командного регистра на m.

Ðåã (u; i): если u код конфигурации, то значение этой функции равно содержимому регистра с кодом i в этой конфигурации.

ÊÐ (u): если u код конфигурации, то значение этой функции равно содержимому командного регистра в этой конфигурации.

Заметим, что если u код некоторой конфигурации, то по нему мож-

но определить тип команды, исполняемой в этой конфигурации. Он полностью определ¼н числом (Êîì (a; u))0 (если это 0, то команда имеет вид R:=m, åñëè 1, òî R:=H è ò.ä.).

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

дующим образом.

Код исполняемой команды будет равен Êîì (a; u). Если эта коман-

да является командой присваивания вида G:=m, ò.å., (Êîì (a; u))0 = 0, то в коде новой конфигурации нужно заменить содержимое регистра G, т.е., регистра с кодом (Êîì (a; u))1 íà (Êîì (a; u))2 (в результате получим ЗамРег ((Êîì (a; u))1; (Êîì (a; u))2; u)); кроме того, нужно будет прибавить к содержимому КР единицу. Учитывая устройство кодировки конфигураций, мы видим, что для этого достаточно умножить полученное выражение на p0. Итак, в случае (Êîì (a; u))0 = 0 значение функции Next(u; a) можно вычислить, как

p0 ЗамРег ((Êîì (a; u))1; (Êîì (a; u))2; u):

Аналогично, если эта команда является командой присваивания вида G:=H, ò.å., (Êîì (a; u))0 = 1, то в коде новой конфигурации нужно заменить содержимое регистра G, т.е., регистра с кодом (Êîì (a; u))1 íà содержимое регистра с кодом (Êîì (a; u))2, ò.å. íà Ðåã (u; (Êîì (a; u))2)

((u)1)(Êîì (a;u)2) (в результате получим ЗамРег ((Êîì (a; u))1; Ðåã (u; (Êîì (a; u))2); u)); прибавляя, как и раньше, единицу к КР, получим, что код конфигурации

после выполнения этого шага будет равен

p0 ЗамРег ((Êîì (a; u))1; Ðåã (u; (Êîì (a; u))2); u):

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

12

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

inc Q (ò.å., (Êîì (a; u))0

= 2)

dec Q (ò.å., (Êîì (a; u))0

= 3)

if F=0 goto m и при этом содержимое регистра F равно 0 (т.е.,

(Êîì (a; u))0 = 4 è Ðåã (u; (Êîì (a; u))1) = 0)

if F=0 goto m и при этом содержимое регистра F не равно 0 (т.е.,

(Êîì (a; u))0 = 4 è Ðåã (u; (Êîì (a; u))1) 6= 0) goto m (ò.å., (Êîì (a; u))0 =

5),

мы получим примерно следующее определение для функции Next (u; a)

методом разбора случаев (не следует пугаться конкретного вида данной функции, гораздо важнее то, что е¼ в принципе можно записать в таком виде):

Next(u; a) =

 

8 p0

 

ЗамРег ((Êîì (a; u))1

; Ðåã (u; (Êîì (a; u))2); u);

 

 

>

p0

 

ЗамРег ((Êîì (a; u))1

; (Êîì (a; u))2

; u);

 

åñëè (Êîì (a; u))0

= 0

 

 

 

 

 

 

 

 

 

åñëè

(

Êîì

(a; u))0

= 1

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

ЗамРег

((

Êîì

(a; u))1

;

Ðåã

(u; (

Êîì

(a; u))1) + 1; u);

 

 

> p0

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

åñëè

(

Êîì

(a; u))0

= 2

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

> p

0

 

ЗамРег ((Êîì (a; u))

; Ðåã (u; (Êîì (a; u)) )

 

1; u);

 

 

>

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

>

 

 

 

 

 

 

 

 

åñëè

(

Êîì

(

a; u

))0

= 3

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

ЗамКР

((

Êîì

(a; u))2

; u);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

åñëè (Êîì (a; u))0 = 4 ^ Ðåã (u; (Êîì (a; u))1) = 0

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

ЗамКР КР

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

( (u) + 1; u);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

åñëè

(

Êîì

(a; u))0

= 4

 

Ðåã

 

 

Êîì

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(u; ( (a; u))1) = 0

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

^

 

 

 

 

 

 

6

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

ЗамКР ((Êîì (a; u))

; u);

 

åñëè (Êîì (a; u))

0

= 5

 

 

 

>

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

0;

в остальных случаях.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

>

>

>

>

>

:

Привед¼нная запись гарантирует примитивную рекурсивность функции Next(u; a). Лемма доказана.

Если y код вычисления, то, просматривая определения, мы видим,

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

U(y) = (((y)`h (y) 1)1)0:

13

Таким образом, мы получаем, что если f(x1; : : : ; xn) вычисляется на ММ, то у этой ММ есть номер, скажем, m, и поэтому

f(x1; : : : ; xn) ' U( yT (m; hx1; : : : ; xni; y)):

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

Таким образом, классы ч.р.ф. и функций, вычислимых на ММ, совпадают.

Просматривая доказательство теоремы, с уч¼том этого мы получаем следующую теорему:

Теорема 1.0.9 (Теорема Клини о нормальной форме) Существуют примитивно рекурсивная функция U(y) и примитивно рекурсивное от-

ношение T (m; x; y) такие, что для любого n 2 N и любой ч.р.ф. f(x1; : : : ; xn) найд¼тся m 2 N такое, что

f(x1; : : : ; xn) ' U( yT (m; hx1; : : : ; xni; y)):

(1.1)

Теорема 1.0.10 (Теорема об универсальной функции) Для любого n 2 N существует n + 1 местная ч.р.ф. (m; x1; : : : ; xn) такая, что для любой ч.р.ф. f(x1; : : : ; xn) найд¼тся m 2 N такое, что

f(x1; : : : ; xn) ' (m; x1; : : : ; xn):

Доказательство. В качестве (m; x1; : : : ; xn) годится, например, функция U( yT (m; hx1; : : : ; xni; y)).

Таким образом, все ч.р.ф. с фиксированным числом аргументов можно ¾собрать¿ в одну единственную функцию с числом аргументов на 1 больше и получать из одной этой функции все функции, просто фиксируя первый аргумент. При этом естественно держать в уме аналогию, согласно которой эта функция является универсальным вычислительным устройством, в первый аргумент программой; изменяя программу, можно вычислять любую функцию.

Если m номер программы P , то положим

fmg(x1; : : : ; xn) ' AnP (x1; : : : ; xn);

14

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

если же m не является номером никакой программы, то fmg(x1; : : : ; xn) считаем неопредел¼нным. В любом случае, по данному m можно вычислить значение fmg(x1; : : : ; xn) следующим образом: перебираем по порядку натуральные числа y = 0; 1; : : : до тех пор, пока не выполнится T (m; hx1; : : : ; xni; y), и после этого находим результат в виде U(y). Если m не код какой либо ММ, то это тоже выполнено: в этом случае оба

значения fmg(x1; : : : ; xn) è T (m; hx1; : : : ; xni; y) не определены. Значит, имеет место равенство

fmg(x1; : : : ; xn) ' U ( yT (m; hx1; : : : ; xni; y)) :

Наряду с привед¼нными выше теоремами, следующая теорема также является одним из важнейших результатов о вычислимости.

Теорема 1.0.11 (Теорема о параметризации (s m n теорема)) Для любой вычислимой функции F (y1; : : : ; ym; x1; : : : ; xn) существует разнознач- ная примитивно рекурсивная функция s(y1; : : : ; ym) такая, что для любых y1; : : : ; ym выполнено fs(y1; : : : ; ym)g(x1; : : : ; xn) ' F (y1; : : : ; ym; x1; : : : ; xn).

Доказательство. Функция

F 0(x1; : : : ; xn; y1; : : : ; ym) ' F (y1; : : : ; ym; x1; : : : ; xn)

также вычислима, и она вычисляется на ММ некоторой программой P .

Зафиксировав произвольные y1; : : : ; ym, можно построить программу для вычисления функции F 0(x1; : : : ; xn; y1; : : : ; ym) от оставшихся переменных

x1; : : : ; xn следующим образом: сначала идут операторы

0:Rn+1:=y1

1:Rn+2:=y2

...

m-1:Rn+m := ym,

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

if ... goto k на команды if ... goto k+m и команд goto k на команды goto k+m и в получившемся списке команд расставим номера по порядку, начиная с 0. Нетрудно убедиться, что при любых y1; : : : ; ym, ïîëó-

ченная таким способом программа вычислит нам значение F 0(x1; : : : ; xn; y1; : : : ; ym).

15

Пусть P 0 последовательность команд c0; : : : ; cl (без номеров слева). То- гда с уч¼том определения кодов последовательностей, мы получаем, что код получившейся в результате программы будет равен

hh0; 2(n + 1); y1i ; h0; 2(n + 2); y2i ; : : : ; h0; 2(n + m); ymii p (c0)+1 : : : p (cl)+1

m m+l

Последнее выражение да¼т нам п.р. ф. s(y1; : : : ; ym) со свойством

F (x; y) ' F 0(y; x) ' fs(y)g(x):

Функция s разнозначна, т.к. по значению s(y1; : : : ; ym) можно легко восстановить исходные аргументы y1; : : : ; ym, например, y1 = ((s(y1; : : : ; ym))0)2, y2 = ((s(y1; : : : ; ym))1)2, y3 = ((s(y1; : : : ; ym))2)2, . . . Отсюда следует, что s обладает требуемыми свойствами.