1. Нумерации алгоритмов

Множество всех алгоритмов счетно. Ведь любой алгоритм можно задать конечным описанием (например, в алфавите знаков, используемых при наборе математических книг), а множество всех конечных слов в фиксированном алфавите счетно. Счетность множества алгоритмов означает наличие взаимно-однозначного соответствия между алгоритмами и числами натурального ряда, т.е. функции типа , взаимно-однозначно отображающей слова в алфавите, выбранном для описания алгоритмов в числа натурального ряда. Такая функцияназываетсянумерациейалгоритмов, а ее аргумент- номером алгоритмапри нумерации. Из взаимной однозначности отображенияследует существование обратной функции, восстанавливающей по описанию алгоритмаего номер. Функциюможно назвать перечислением множества алгоритмов.

Нумерация всех алгоритмов является одновременно и нумерацией всех вычислимых функций в следующем смысле: номер функции - это номер некоторого алгоритма вычисляющего. В любой нумерации всякая функция будет иметь бесконечное множество различных номеров. Это ясно из того, что к любой машине Тьюринга можно добавить любое количество недостижимых состояний (т.е. состояний, не встречающихся в правых частях команд), все полученные машины имеют различные номера, но вычисляют одну и ту же функцию. Говоря о нумерации, будем считать, что она выбрана так, что алгоритми вычислимая им функциянигде не определена. Существование нумерации позволяет работать с алгоритмами как с числами. Это удобно при исследовании алгоритмов.

    1. Некоторые теоремы в теории алгоритмов.

Теорема 1. (о существовании универсального алгоритма). Существует универсальный алгоритм такой, что для любого алгоритмас номером; в других обозначениях,- номер алгоритма

Теорема 2. Не существует алгоритма, который по номеру любого алгоритма и исходным даннымопределял бы, остановится алгоритм при этих данных или нет; иначе говоря, не существует алгоритматакого, что для любого алгоритма(c номером ),

Теорема 2 – переформулировка в инвариантом виде теоремы 3 о неразрешимости проблемы остановки.

Теорема 3. (о неразрешимости проблемы остановки). Не существует машины Тьюринга , решающей проблему остановки для произвольной машины Тьюринга.

Теорема 4. (о самоприменимости алгоритмов). Проблема самоприменимости алгоритмов алгоритмически неразрешима: не существует алгоритма такого, что для любого алгоритма:

Самоприменимость – частный случай проблемы остановки и именно поэтому теорему 4 нельзя получить из теоремы 2 простой подстановкой вместов: частный случай алгоритмически неразрешимой проблемы может оказаться и разрешимым.

Теоремы 2, 4 являются мощным средством для доказательства различных неразрешимостей.

Теорема 5. Для любого перечисления семейства всюду определенных вычислимых (т.е. общерекурсивных) функций существует общерекурсивная функция, не входящая в это перечисление.

Доказательство. Пусть — перечисление, порождающее последовательность,,, … всюду определенных функций. Введем функцию. Так какобщерекурсивна, то иобщерекурсивна. Еслипринадлежит, тоимеет номери, следовательно,. (*)

Заметим, что – о.р.ф.,– п.р.ф.,– о.р.ф.

Тогда в точке по определению:, а в силу (*) :. Получаем противоречие, откуда следует, чтоне входит в перечисление, порождаемое.

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

Cледовательно теорема 5 для ч.р.ф. не имеет места, а верна только для о.р.ф.

Из теоремы 5 следует весьма важный результат.

Теорема 6. Проблема определения общерекурсивности алгоритмов неразрешима: не существует алгоритма такого, что для любого алгоритма:

Доказательство. Пусть алгоритм существует, тогда он определяет общерекурсивную функцию. Определим функциюследующим образом:

где – оператор минимизации.

Так как номеров всюду определенных функций (и, следовательно, точек , в которых) — бесконечное множество, товсюду определена. Очевидно, что функцияиз списка,,,… всех алгоритмов отбирает все всюду определенные алгоритмы, т.е. является перечислением множества всех общерекурсивных функций. Из теоремы 5 следует, что такое перечисление невозможно и, следовательно, алгоритма, определенного в условии теоремы 6, не существует.

Теоремы 4, 5, 6 проливают свет на роль понятия частичной определенности в теории алгоритмов. Еще вначале говорилось о желательности такого требования, как результативность алгоритма. (Отметим, что существенность такого требования проявляется в понятии неразрешимости: неразрешимость проблемы истолковывается как отсутствие всюду определенного алгоритма, решающего эту проблему).

Первым ударом по этому требованию была неразрешимость проблемы остановки, означающая, что если алгоритм может бытьчастичным, то по алгоритму и даннымнельзя узнать, дает лирезультат по данным. Возникает естественное желание:

1) либо вообще убрать частичные алгоритмы из общей теории алгоритмов, т.е. не считать их алгоритмами;

2) либо ввести стандартный метод доопределения частичных алгоритмов.

Однако ни первое, ни второе эффективными методами сделать нельзя. Первая идея не годится, из-за теоремы 6 — нет эффективного способа распознать частичные алгоритмы среди множества всех алгоритмов, и, следовательно, предлагаемый отбор невозможен. Что же касается второй идеи, то для нее имеется не менее убедительное опровержение.

Теорема 7. Существует такая частично рекурсивная функция , что никакая общерекурсивная функцияне является ее доопределением.

Доказательство. Определим следующим образом:

Как и прежде предполагается, что зафиксирована нумерация и. Очевидно, чтовычислима. Пусть теперь— произвольная общерекурсивная функция, и- ее номер:. Так каквсюду определена, то определена и, следовательно, . Таким образом, для любой общерекурсивной функций ,в точке.

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

Наконец, еще одна идея: построить язык, описывающий все всюду определенные алгоритмы, и только их — не может осуществиться потому, что описания в этом языке можно упорядочить (например, лексикографически) и, следовательно, наличие такого языка означало бы существование полного перечисления всех всюду определенных функций, что .противоречит теореме 5.

Таким образом, при формулировке общего понятия алгоритма неизбежно возникает дилемма — либо определение алгоритма должно быть достаточно общим, чтобы в число объектов, удовлетворяющих этому определению, заведомо вошли все объекты, которые естественно считать алгоритмами, либо требование об обязательной результативности алгоритма сохраняется. В первом случае этому определению будут удовлетворять частичные алгоритмы и избавиться от них конструктивными методами нельзя; во втором случае никакую процедуру нельзя назвать алгоритмом до тех пор, пока для нее не будет решена проблема остановки, а единого метода решения этой проблемы не существует. В обшей теории алгоритмов (для того, чтобы она действительно была общей) используется первый вариант. Впрочем, еще раз отметим, что, когда речь идет об алгоритме, решающем данную задачу, теория алгоритмов обязательно требует сходимости (результативности), и только в случае, когда алгоритм решения всюду определен, соответствующая задача считается разрешимой.