Морозов Лекции по дискретной математике и теории алгоритмов ч. 3 Минимашины
.pdf11
ЗамКР (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 обладает требуемыми свойствами.