Частично-рекурсивные функции
Пытаясь выяснить содержание интуитивного понятия вычислимой функции, А.Черч в 1936 году рассмотрел класс так называемых рекурсивных функций, а Клини расширил его до класса частично-рекурсивных функций. В то же время впервые была высказана естественно-научная гипотеза о том, что интуитивное понятие вычислимой частичной функции совпадает с понятием частично рекурсивной функции. Эту гипотезу называют тезисом Черча. Здесь мы напомним понятие частично-рекурсивной функции и покажем, что любая частично-рекурсивная функция вычислима по Тьюрингу. Набор аргументов
обозначим через .
Функция называется суперпозицией -местных функций , и -местной функции , если
Говорят, что -местная функция
получена примитивной рекурсией из -местной функции
и -местной функции , если
Говорят, что -местная функция
получена минимизацией из -местной функции , если
Часто обозначают через .
Заметим, что суперпозиция и примитивная рекурсия, примененные к всюду определенным функциям, дают всюду определенные функции, тогда как минимизация, примененная к всюду определенной функции, может дать частичную функцию.
Числовая функция называется частично рекурсивной, если она является одной из базисных функций:
а) (при всех ),
б) (при всех ),
в)
или получена из них с помощью конечного числа применений суперпозиции, примитивной рекурсии и минимизации.
Теорема.
Любая частично-рекурсивная функция вычислима по Тьюрингу.
Доказательство теоремы заключено в следующих четырех леммах, с использованием унарного кодирования чисел.
Лемма 1 (о базисных функциях).
Базисные функции , , вычислимы по Тьюрингу.
Действительно, функцию вычисляет программа , функцию — программа , функцию — программа .
Лемма 2 (о суперпозиции).
Если функции и
вычислимы, соответственно, программами , и , то функцию
вычисляет программа:
Доказательство.
Чтобы убедиться в справедливости этого утверждения, достаточно выписать псевдослова, которые появляются на ленте после выполнения отдельных частей программы. Сначала на ленте находится псевдослово
после выполнения на ленте будет
после —
после —
и т.д.
После — после —
и, наконец, после выполнения всей программы получим
Лемма 3 (о примитивной рекурсии).
Если функции , и вычислимы соответственно программами и , то функция , полученная по схеме примитивной рекурсии, вычислима программой
Доказательство.
Представим программу, предлагаемую для вычисления функции , блок-схемой, изображенной на рисунке.
Пунктирными стрелками показаны контрольные дуги, для которых будут сформированы соответствующие индуктивные утверждения .
Утверждение соответствует входной дуге и поэтому должно описывать содержимое ленты в начальный момент. Утверждение соответствует выходной дуге и должно описывать содержимое ленты в момент завершения работы программы. Утверждение относится к дуге, разрезающей единственный имеющейся в блок-схеме цикл, поэтому должно быть сформулировано так, чтобы ему удовлетворяло содержимое ленты каждый раз, когда в программе реализуется переход по рассматриваемой дуге.
Напомним, что основное требование, предъявляемое к утверждениям , заключается в том, чтобы была возможность доказательства индуктивных шагов:
Пусть , — исходные значения аргументов из множества , тогда требуемые утверждения можно сформулировать следующим образом:
P_1 — содержимое ленты равно
— существует
такие, что содержимое ленты равно
— содержимое ленты равно
Доказательство индуктивных шагов легко получить, выписывая содержимое ленты после каждого оператора в соответствующем пути. Читателю предоставляется возможность проделать это самостоятельно и убедиться в правильности программы, предлагаемой в формулировке леммы 3. Не забудьте доказать завершаемость исследуемой программы.
Лемма 4 (о минимизации).
Если функция вычислима программой , то функция , полученная из нее по схеме минимизации, вычисляется программой
Доказательство.
Представим программу, предлагаемую для вычисления функции , блок-схемой c указанными контрольными точками , , .
Пусть — исходные значения аргументов, тогда для доказательства частичной корректности предлагаемой программы можно воспользоваться следующими индуктивными утверждениями:
— содержимое ленты равно
— существуют , такие, что содержимое ленты равно
— содержимое ленты равно Требуется доказать следующие индуктивные шаги.
Доказательство индуктивных утверждений и завершаемости программы мы оставляем читателю в качестве упражнений.
Заметим, что в доказательствах лемм 3 и 4 при рисовании блок-схемы мы несущественно отступили от текстов программ, данных в их формулировках, а при доказательстве леммы 2 не выписывали индуктивных утверждений, так как в представлении программы блок-схемой нет циклов. Обращаем внимание на то, что правильность блоков, из которых составлены программы, мы не подвергаем сомнению.