Опубликован: 26.09.2006 | Доступ: свободный | Студентов: 1800 / 484 | Оценка: 4.25 / 4.12 | Длительность: 17:09:00
ISBN: 978-5-9556-0066-6
Специальности: Программист, Математик
Лекция 11:

Машины Тьюринга

Частично-рекурсивные функции

Пытаясь выяснить содержание интуитивного понятия вычислимой функции, А.Черч в 1936 году рассмотрел класс так называемых рекурсивных функций, а Клини расширил его до класса частично-рекурсивных функций. В то же время впервые была высказана естественно-научная гипотеза о том, что интуитивное понятие вычислимой частичной функции совпадает с понятием частично рекурсивной функции. Эту гипотезу называют тезисом Черча. Здесь мы напомним понятие частично-рекурсивной функции и покажем, что любая частично-рекурсивная функция вычислима по Тьюрингу. Набор аргументов x_1, x_2\dts x_m обозначим через {\bs x}.

Функция f({\bs x}) называется суперпозицией n -местных функций g_1, g_2\dts g_m и m -местной функции h, если \eq*{
f({\bs x}) = h (g_1({\bs x}), g_2({\bs x})\dts g_m({\bs x})).
}

Говорят, что (n + 1) -местная функция f({\bs x},y) получена примитивной рекурсией из (n + 2) -местной функции g и n -местной функции h, если

\eq*{
f({\bs x},y)=\left\{\begin{aligned} & h({\bs x}) && \t{при}\ y=0; \\ &
g(f({\bs x},y-1),{\bs x},y-1), && \t{при}\ y>0.
\end{aligned}
\right.
}

Говорят, что n -местная функция f({\bs x}) получена минимизацией из {(n + 1)} -местной функции g, если

\eqa*{
f({\bs x})=\left\{\begin{aligned} & k,\ \t{если}\ g(k,{\bs x}) = 0\ \t{и
при всех}\ k' < k\ g(k',\bs x)\
\t{определена}\\ & \qq \t{и не равна}\ 0,\\ & \t{не определена в
противном случае}
\end{aligned}\right.
}

Часто обозначают f({\bs x}) через \mu y(g(y, {\bs x}) =
0).

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

Числовая функция f\colon N^n \to N называется частично рекурсивной, если она является одной из базисных функций:

а) O(y) = 0 (при всех y \in N ),

б) S(y) = y + 1 (при всех y \in N ),

в) I_m^n (x_1, x_2\dts x_n) = x_m(n = 1, 2,\ldots;\ 1 \le m \le
n)

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

Теорема. Любая частично-рекурсивная функция вычислима по Тьюрингу.

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

Лемма 1 (о базисных функциях). Базисные функции O(y), S(y), I_m^n(x_1,
x_2 \dts x_n) вычислимы по Тьюрингу.

Действительно, функцию S(y) вычисляет программа [K_m, 1,
r], функцию O(y)программа [r], функцию I_m^n(x_1, x_2\dts x_n)программа K_m.

Лемма 2 (о суперпозиции). Если функции g_1 ({\bs x}),
g_2 ({\bs x})\dts g_m({\bs x}) и h(y_1, y_2\dts
y_m) вычислимы, соответственно, программами G_1, G_2,\ldots, G_m и H, то функцию

\eq*{
f({\bs x})=h(g_1({\bs x}), g_2 ({\bs x})\dts g_m ({\bs x}))
}

вычисляет программа:

\eq*{
[G_m, (Z_{n + 1})^n, G_{{m}-1}, (Z_{n + 1})^n\dts
G_1, (Z_{n + 1})^n, (Z_{n + m})^{n}, H, (\Lambda_2)^m].
}

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

\eq*{
\ast x_n \ast x_{{n}-1} \ast \ldots \ast x_1 \ovs{\ast}{\downarrow},
}

после выполнения G_m на ленте будет

\eq*{
\ast x_n \ast x_{{n}-1} \ast \ldots \ast x_1 \ast g_m \ovs{\ast}{\downarrow},
}

после [G_m, (Z_{n + 1})^n]

\eq*{
\ast g_m\ast x_n \ast x_{{n}-1} \ast \ldots \ast x_1
\ovs{\ast}{\downarrow},
}

после [G_m, (Z_{n + 1})^n, G_{{m}-1}]

\eq*{
\ast g_m \ast x_n \ast x_{n-1} \ast \ldots \ast x_1 \ast
g_{m-1}\ovs{\ast}{\downarrow},
}

и т.д.

После [G_m, (Z_{n + 1})^n, G_{{m}-1}, (Z_{n + 1})^n\dts
G_1, (Z_{n + 1})^n]

\eq*{
\ast g_m \ast g_{{m}-1} \ast \ldots \ast g_1 \ast x_n \ast x_{{n}-1}\ast
\ldots \ast x_1 \ovs{\ast}{\downarrow},
}
после [G_m, (Z_{n + 1})^n, G_{m-1}, (Z_{n+1})^n \dts G_1,
(Z_{n+1})^n, (Z_{n+m})^n, H]
\eq*{
\ast x_n \ast x_{n-1}\ast \ldots \ast x_1 \ast g_m \ast g_{m-1} \ast
\ldots \ast g_1 \ast f \ovs{\ast}{\downarrow},
}

и, наконец, после выполнения всей программы получим

\eq*{
\ast x_n \ast x_{n-1}\ast \ldots \ast x_1 \ast f \ovs{\ast}{\downarrow}.
}

Лемма 3 (о примитивной рекурсии). Если функции h (x_1, x_2 \dts x_n) и g (y_1, y_2\dts y_{n+2}) вычислимы соответственно программами H и G, то функция f(x_1, x_2\dts x_n, y), полученная по схеме примитивной рекурсии, вычислима программой

\eq*{
[H, L^{n+1}, l, (\t{пока}\ 1)[\ast, R_{n+2}, G, \Lambda_2,
L_{n+2},1, l], R^{n+2}].
}

Доказательство. Представим программу, предлагаемую для вычисления функции f(x_1, x_2\dts x_n, y), блок-схемой, изображенной на рисунке.


Пунктирными стрелками показаны контрольные дуги, для которых будут сформированы соответствующие индуктивные утверждения P_1, P_2, P_3.

Утверждение P_1 соответствует входной дуге и поэтому должно описывать содержимое ленты в начальный момент. Утверждение P_3 соответствует выходной дуге и должно описывать содержимое ленты в момент завершения работы программы. Утверждение P_2 относится к дуге, разрезающей единственный имеющейся в блок-схеме цикл, поэтому должно быть сформулировано так, чтобы ему удовлетворяло содержимое ленты каждый раз, когда в программе реализуется переход по рассматриваемой дуге.

Напомним, что основное требование, предъявляемое к утверждениям P_1,
P_2, P_3, заключается в том, чтобы была возможность доказательства индуктивных шагов:

\eqa*{ & P_1 \to P_2,\ \t{если реализуется путь}\ [H; L^{n+1}; l; \ast;
R^{n+2}; G];\\ & P_1 \to P_3,\ \t{если реализуется путь}\ [H; L_{n+1}; l;
R^{n+2}];\\ & P_2 \to P_2,\ \t{если реализуется путь}\ [\Lambda_2;
L^{n+2}; 1; l; \ast; R^{n+2}; G];\\ & P_2 \to P_3,\ \t{если реализуется
путь}\
[\Lambda_2; L_{n+2}; 1; l; R_{n+2}].
}

Пусть x_1, x_2\dts x_n, y — исходные значения аргументов из множества N, тогда требуемые утверждения можно сформулировать следующим образом:

P_1 — содержимое ленты равно

\eq*{
\ast 1^{y}\ast 1^{x_{n}} \ast 1^{x_{n-1}} \ast \ldots \ast 1^{x_{1}}
\ovs{\ast}{\downarrow},
}

P_2 — существует y_1 \ge 1, y_2,
g_1, g_2 \ge 0 такие, что содержимое ленты равно

\begin{gather*}
\ast 1^{y_{2}} \ast 1^{y_{2}} \ast 1^{x_{n}} \ast 1^{x_{n-1}} \ast
\ldots \ast 1^{x_{1}} \, 1^{g_{1}} \, 1^{g_{2}}\ \t{и}\\
y_1 + y_2 + 1  =  y,\\
g_1  = g(f(x_1, x_2\dts x_n, y_1 - 1), x_1, x_2 \dts x_n, y_1 - 1),\\
g_2 = g(f(x_1, x_2\dts x_n, y_1), x_1, x_2\dts x_n, y_1),
\end{gather*}

P_3 — содержимое ленты равно

\eq*{
\ast 1^{y} \ast 1^{x_{n}} \ast 1^{x_{n-1}} \ast \ldots \ast 1^{x_{1}}
\ast 1^{z} \ovs{\ast}{\downarrow}\ \t{и}\ z = f(x_1, x_2\dts x_n, y).
}

Доказательство индуктивных шагов легко получить, выписывая содержимое ленты после каждого оператора в соответствующем пути. Читателю предоставляется возможность проделать это самостоятельно и убедиться в правильности программы, предлагаемой в формулировке леммы 3. Не забудьте доказать завершаемость исследуемой программы.

Лемма 4 (о минимизации). Если функция g(y, x_1, x_2\dts x_n) вычислима программой G, то функция f(x_1, x_2\dts x_n), полученная из нее по схеме минимизации, вычисляется программой

\eq*{
[r, G, l, (\t{пока}\ 1)[r, \Lambda_1, 1, r, G, l].
}

Доказательство. Представим программу, предлагаемую для вычисления функции f(x_1, x_2\dts x_n), блок-схемой c указанными контрольными точками P_1, P_2, P_3.


Пусть x_1, x_2\dts x_n — исходные значения аргументов, тогда для доказательства частичной корректности предлагаемой программы можно воспользоваться следующими индуктивными утверждениями:

P_1 — содержимое ленты равно

\eq*{
\ast 1^{x_{n}} \ast 1^{x_{n-1}} \ast \ldots \ast 1^{x_{1}}
\ovs{\ast}{\downarrow},
}

P_2 — существуют k, z \ge 0, такие, что содержимое ленты равно

\eq*{
\ast 1^{x_{n}}  \ast  1^{x_{n-1}} \ast \ldots \ast
1^{x_{1}} \ast 1^{k} \ast 1^{z} \ovs{\ast}{\downarrow},\ \t{где}\
z = g (k, x_1, x_2\dts x_n),
}

P_3 — содержимое ленты равно

\eq*{
\ast 1^{x_{n}}  \ast 1^{x_{n-1}}  \ast \ldots \ast 1^{x_{1}}  \ast 1^{z}
\ovs{\ast}{\downarrow},\ \t{где}\ z = f(x_1, x_2\dts x_n).
}
Требуется доказать следующие индуктивные шаги.
\eqa*{ & P_1 \to P_2,\ \t{если реализуется путь}\ [r, G];\\ & P_2 \to
P_2,\ \t{если реализуется путь}\ [l; r; \Lambda_1; 1; r; G];\\ & P_2 \to
P_3,\ \t{если реализуется путь}\ [l],\ \t{и головка
остановится на}\\ & \qq \t{символе}\ \ast.
}

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

Заметим, что в доказательствах лемм 3 и 4 при рисовании блок-схемы мы несущественно отступили от текстов программ, данных в их формулировках, а при доказательстве леммы 2 не выписывали индуктивных утверждений, так как в представлении программы блок-схемой нет циклов. Обращаем внимание на то, что правильность блоков, из которых составлены программы, мы не подвергаем сомнению.

Антон Сиротинкин
Антон Сиротинкин

на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно...