Разрешимость и перечислимость множеств
Теперь, когда мы достаточно подробно изучили три различных формализации понятия алгоритма, установили их эквивалентность и сформулировали тезисы Тьюринга, Чёрча и Маркова, можно сделать некоторые общие выводы. Из наших рассмотрений следует, что любые утверждения о существовании или несуществовании алгоритмов, сделанные в одной из трех формализации, верны и в Другой. Это означает, что возможно развитие и изложение теории алгоритмов, инвариантное по отношению к способу формализации понятия "алгоритм". Это своего рода общая теория алгоритмов. Основные ее понятия — алгоритм и вычислимая функция.
При интерпретировании этой общей теории, например, в теории рекурсивных функций понятие алгоритм превращается в рекурсивное описание функции, понятие вычислимая функция — в понятие частично рекурсивная (или общерекурсивная) функция. (При этом следует всегда помнить, что алгоритм и вычисляемая им функция — это не одно и то же. Одна и та же функция может вычисляться с помощью разных алгоритмов.)
Будем рассматривать функции от одного или нескольких аргументов, заданные на множестве всех натуральных чисел или на некоторых его подмножествах (частичные функции) и принимающие значения в множестве . Таким образом, рассматриваются функции , являющиеся отображениями декартовой n-й степени в множество . Область определения функции есть подмножество множества — определено}. Область изменения (значений) есть подмножество множества 
Определение 35.1. Функция называется вычислимой, если существует алгоритм, позволяющий вычислять ее значения для тех наборов аргументов, для которых она определена, и работающий вечно, если функция для данного набора значений аргументов не определена.
Пусть .
Определение 35.2. Множество называется разрешимым, если существует алгоритм , который по любому объекту дает ответ, принадлежит множеству Мили нет. Алгоритм называется разрешающим алгоритмом для .
Известно понятие характеристической функции множества . Ею называется функция , заданная на множестве , принимающая значения в двухэлементном множестве и определяемая следующим образом:
Отсюда ясно, что множество разрешимо тогда и только тогда, когда его характеристическая функция вычислима.
Примером разрешимого множества может служить множество всех тавтологий логики высказываний. Разрешающий алгоритм состоит в прямом вычислении значений данной формулы на всевозможных наборах значений ее пропозициональных переменных (составление таблицы истинности формулы).
Пусть теперь .
Определение 35.3. Множество называется (рекурсивно, или эффективно, или алгоритмически) перечислимым, если либо пусто, либо есть область значений некоторой вычислимой функции или, другими словами, если существует алгоритм для последовательного порождения (перечисления) всех его элементов.
Другими словами, перечислимо, если существует такая вычислимая функция , что . Функция называется перечисляющей множество (или для множества ); соответственно алгоритм, вычисляющий , называется перечисляющим или порождающим для .
Пример 35.4. Рассмотрим множество квадратов натуральных чисел. Оно перечислимо: для получения его элементов нужно последовательно брать числа и возводить их в квадрат. Другими словами, есть область значений вычислимой функции . Более того, это множество является также и разрешимым: для проверки того, принадлежит или нет некоторое число данному множеству, нужно разложить число на простые множители, что позволит выяснить, является ли оно точным квадратом.
Далее, в теореме 35.6 будет показано, что любое разрешимое множество перечислимо, а в теореме 35.7 — что обратное утверждение неверно.
Важность понятий разрешимости и перечислимости множеств для оснований математики связана с тем, что язык теории множеств является в известном смысле универсальным языком математики. Всякому математическому утверждению можно придать вид утверждения о каких-либо множествах. В связи с этим к способам задания множеств предъявляются повышенные требования. Необходимо точное понимание таких понятий, как "конструктивный способ задания множества" и "множество, заданное эффективно". Это и достигается благодаря понятиям разрешимости и перечислимости множества. Язык разрешимых и перечислимых множеств является универсальным языком для утверждений о существовании (или отсутствии) алгоритмов решения математических проблем.
Теорема 35.5. Если множества и перечислимы, то перечислимы множества и .
Доказательство. Если имеются алгоритмы для порождения элементов множеств и , то алгоритм для порождения множества получается из исходных путем их одновременного применения. Следовательно, множество перечислимо.
Пусть теперь алгоритм последовательно порождает элементы множества , а алгоритм последовательно порождает элементы множества . Тогда алгоритм для перечисления элементов множества заключается в следующем.
Поочередно с помощью алгоритмов и порождаются элементы и т.д. Каждый вновь порожденный элемент сравнивается со всеми ранее порожденными элементами . Если совпадает с одним из них, то он включается во множество . В противном случае надо переходить к порождению элемента и сравнивать его со всеми ранее порожденными элементами , и т.д. Описанная процедура позволяет эффективно перечислить все элементы множества , что и требовалось доказать.
Теорема 35.6. Пусть . Множество разрешимо тогда и только тогда, когда оно само и его дополнение перечислимы.
Доказательство. Необходимость. Пусть — разрешимое множество. Можем считать, что , т. е. имеется элемент . Тогда характеристическая функция множества , как было отмечено выше, вычислима, т.е. имеется алгоритм для ее вычисления.
Строим алгоритм для перечисления множества . Рассмотрим функцию
Отсюда , то есть есть множество значений функции , которая, очевидно, вычислима ввиду вычислимости функции . Следовательно, множество перечислимо.
Аналогично, выбрав элемент , строим функцию:
которая также вычислима ввиду вычислимости функции . Кроме того, , т.е. есть множество значений вычислимой функции . Следовательно, множество также перечислимо.
Достаточность. Пусть множества и перечислимы, т. е. и , где и — некоторые вычислимые функции. Тогда алгоритм, выясняющий, принадлежит или нет произвольное число множеству , действует следующим образом. Последовательно порождаем элементы и на каждом шаге получаемый элемент сравниваем с . Поскольку должно принадлежать либо , либо , то на конечном шаге получим или . Если , то , а если , то и, значит, . Следовательно, множество разрешимо.
Прежде чем переходить к следующей теореме, отметим, что существует эффективное перечисление всех упорядоченных пар натуральных чисел, которое называется диагональным методом, или диагональным процессом:
Перечисление осуществляется последовательным прохождением по диагоналям, начиная с левого верхнего угла. Первыми парами этого перечисления являются:
Можно доказать, что в данной последовательности пара стоит на месте с номером
Теорема 35.7. Существует перечислимое, но неразрешимое множество натуральных чисел.
Доказательство. На основании предыдущей теоремы достаточно привести пример такого множества натуральных_чисел, которое само было бы перечислимо, а его дополнение перечислимым не было.
Ясно, что перечислимых множеств натуральных чисел (как и алгоритмов) имеется лишь счетное количество. Следовательно, все перечислимые множества можно расположить в последовательность (перенумеровать): . Более того, можно считать, что эта нумерация эффективна, т.е. по номеру множества можно восстановить само это множество.
Рассмотрим теперь алгоритм , который последовательно порождает все элементы следующего множества . На шаге с номером этот алгоритм вычисляет m-й элемент множества , и если элемент совпадает с , то он относит его в множестве . Таким образом,
Итак, порождается алгоритмом , т.е. перечислимо. Поскольку дополнение множества состоит из всех таких , что , то отличается от любого перечислимого множества хотя бы одним элементом. Поэтому не является перечислимым. Следовательно, на основании теоремы 35.6 множество неразрешимо, что и завершает доказательство.
Доказанная теорема фактически включает в себя в неявном виде теорему Гёделя о неполноте формальной арифметики, о которой мы подробно будем говорить в заключительном параграфе этой главы.
Подведем некоторые итоги. Итак, эффективно заданное множество — это множество, обладающее разрешающей или перечисляющей функцией (алгоритмом). Объединение и пересечение перечислимых множеств перечислимы. Непустое множество разрешимо тогда и только тогда, когда оно само и его дополнение перечислимы. В частности, отсюда следует, что всякое непустое разрешимое множество перечислимо. Тем не менее существует перечислимое, но неразрешимое множество натуральных чисел. В теореме 35.7 такое множество описано. Другим примером такого множества является множество определен}, т.е. множество номеров самоприменимых алгоритмов.
Таким образом, перечислимость — более слабый вид эффективности, нежели разрешимость. Хотя перечисляющая процедура и задает эффективно список элементов множества , поиск данного элемента а в этом списке может оказаться неэффективным: это неопределенно долгий процесс, который в конечном счете остановится, если , но не остановится, если . В случае же перечислимости и дополнения перечисляющая процедура для становится эффективной и гарантирует разрешимость множества .
Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.
|