Структуры данных и модели вычислений

       

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


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

обозначим через .

Функция называется суперпозицией -местных функций , и -местной функции , если

Говорят, что -местная функция

получена примитивной рекурсией из -местной функции

и -местной функции , если

Говорят, что -местная функция

получена минимизацией из -местной функции , если

Часто обозначают через .

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

Числовая функция называется частично рекурсивной, если она является одной из базисных функций:

а) (при всех ),

б) (при всех ),

в)

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

Теорема.

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

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

Лемма 1 (о базисных функциях).

Базисные функции , , вычислимы по Тьюрингу.

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

Лемма 2 (о суперпозиции).

Если функции и

вычислимы, соответственно, программами , и , то функцию

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

Доказательство.

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


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

после —

после —

и т.д.

После — после —


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

Лемма 3 (о примитивной рекурсии).

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

Доказательство.

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

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

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

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

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

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

— существует

такие, что содержимое ленты равно


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

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

Лемма 4 (о минимизации).

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

Доказательство.

Представим программу, предлагаемую для вычисления функции , блок-схемой c указанными контрольными точками , , .

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

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

— существуют , такие, что содержимое ленты равно

— содержимое ленты равно Требуется доказать следующие индуктивные шаги.


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

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


Содержание раздела