Перечислимые и разрешимые множества

Материал из synset
Перейти к: навигация, поиск
Проблемы остановки и тождественности << Оглавление >> Существуют ли несчетные множества?

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

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

Помимо принадлежности для множеств состоящих их одних и тех же элементов вводится предикат равенства . Если же множество состоит из тех же элементов, что и , но они не равны, говорят, что является подмножеством . Для выражения этого утверждения вводится третий предикат: .

Кроме предикатов, для образования новых множеств вводится три предметные функции:

Невозможно разобрать выражение (неизвестная функция «\begin{array}»): {\displaystyle \begin{array}{llll} объединение: & \mathcal A\cup \mathcal B \;\;= &\{ x | \;\; (x\in \mathcal A) \vee (x\in \mathcal B)\}\\ пересечение: & \mathcal A\cap \mathcal B \;\;= &\{ x | \;\; (x\in \mathcal A) \,\And\, (x\in \mathcal B)\}\\ дополнение: & \mathcal A - \mathcal B \;\;= &\{ x | \;\; (x\in \mathcal A)\,\And\, (x\not\in \mathcal B)\}\\ \end{array}}

Задание множества при помощи логического условия: Невозможно разобрать выражение (синтаксическая ошибка): {\displaystyle \textstyle \mathcal A =\{x|\;условие\}} иногда очень удобно. Например, натуральные числа от 1 до 5 можно задать так: , а можно и так . То, что элемент не принадлежит множеству обозначается как . Это сокращение записи отрицания при помощи логической связки: .

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

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

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

Sets.png

В такой форме теория множеств возвращается к своим наглядным истокам — куче камней на полу в пещере. Для того чтобы множественные функции были замкнутыми необходимо ввести объект — пустое множество . Например, .

Чтобы определить конкретное множество необходимо каким-то образом выразить факт принадлежности ему некоторого элемента. Другими словами, для всех задать логические значения функции . Множество может быть бесконечным, и нам необходим конечный способ его задания. Поэтому мы должны предложить алгоритм, который "разрешает" помещать число в множество . Например, если число не имеет делителей кроме 1 и себя, то оно является элементом множества простых чисел , т.е. . В данном случае существует функция которая на вход получает число , раскладывает его на множители и возвращает 1 для простых чисел или 0 для составных.

Другой способ состоит в том, чтобы при помощи некоторого алгоритма "перечислять" элементы множества. Так множество чётных чисел можно задать в перечислительном варианте как , где все натуральные числа (т.е. выразить одно множество через элементы другого в виде функции ). Ещё более "перечислительно" будет выглядеть определение при помощи рекурсии: , .

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

Разрешимым называется множество целых чисел для которого существует алгоритм определения принадлежности ему некоторого элемента. Для разрешимого множества задаётся вычислимая и всюду определённая функция :

Невозможно разобрать выражение (неизвестная функция «\begin{array}»): {\displaystyle \mathbf{is}(a) = \left\{ \begin{array}{ll} 1,\;\;\;\;& если\;a\in \mathcal A\\ 0,\;\;\;\;& если\;a\not \in \mathcal A.\\ \end{array} \right.}

Естественно, наличие внутри символа принадлежности не означает, что мы пользуемся кем то заданным предикатом (получился бы порочный круг). Вместо "" стоит конечная последовательность символов некоторой программы, которая должна выдать не нулевое значение, тогда . Если же эта программа, или другая "" выдаёт ноль, то . Функция называется характеристической.

Так как существует "Проблема Остановки", будем считать, что разрешимым будет только множество, для алгоритма которого доказано (!), что он останавливается при любых входах.

Можно ввести также понятие "частично разрешимое множество" для которого функция является частичной, т.е. определённой не для всех . Тогда для некоторых будет неизвестно принадлежат они множеству или нет. Это уже не очень "хорошее" множество.

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

Если алгоритм перечисления существует, то его можно переписать в виде выдачи -того элемента последовательности. Таким образом, для перечислимого множества существует вычислимая функция :

т.е. её значение равно -тому элементу множества.

Однако, в отличии от , Функция может быть частичной функций. Точнее, начиная с некоторого номера она не определена. Это означает, что породив несколько элементов множества, алгоритм перечисления может зациклиться и перестать выдавать элементы. Неприятность состоит в том, что мы не всегда можем распознать попадание алгоритма в подобный режим.

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

Понятно, что любое разрешимое множество перечислимо. Для построения алгоритма его перечисления можно в цикле вызывать функцию для , выдавая в память (перечисляя) только числа для которых . Этот пример ещё раз показывает, что перечислимое множество определяется, вообще говоря, частичным алгоритмом. Например, пусть разрешимое множество задано алгоритмом: " если . Тогда понятно, что после алгоритм перечисления начинает крутится неограничено долго.

Область определения любой вычислимой функции является перечислимым. Действительно, всегда можно реализовать алгоритм пошагового выполнения функции. Сделаем один шаг алгоритма для , затем по два шага алгоритма для и , затем по три шага для , , , и т.д. Если на некоторой итерации этого процесса одно из вычислений останавливается по return, то алгоритм перечисления выдаёт значение в множество определения функции. Таким образом, если при некоторых функция не определена, то они будут в списке пошагово выполняющихся функций "висеть" бесконечно долго, но процесс перечисления не заблокируют.

Далее. Пусть у нас есть подмножество натуральных чисел и его дополнение (т.е. все остальные натуральные числа не попавшие в ). Если и , и перечислимы, то множество разрешимо. Это утверждение носит название теорема Поста:

Невозможно разобрать выражение (неизвестная функция «\begin{array}»): {\displaystyle \begin{array}{clccl} \mathcal A &разрешимо &=>& \mathcal A,\bar{\mathcal A} & перечислимы\\ \mathcal A,\bar{\mathcal A} & перечислимы&=>& \mathcal A &разрешимо \end{array}}

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

Ещё раз подчеркнём: 1) алгоритм перечисления может никогда не остановиться, хотя и перестанет выдавать новые числа; 2) порядок перечисления не регламентируется, и числа могут быть не упорядочены, например по возрастанию; 3) алгоритм перечисляет все элементы, но зацикливается если множество конечно.

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

Естественно, тут же возникает вопрос — "а ограничены ли мы только конструктивными множествами?" Ответ на него очень непрост и существенно зависит от философской позиции математика, точнее тех правил Игры, которые он для себя считает приемлемыми. Неконструктивные множества существуют, если допустимо работать с "неясными" понятиями, по крайней мере до момента возникновения парадоксов.

Рассмотрим пример. Пусть фундаментальным множеством является множество всех алгоритмов. Это множество достаточно хорошо определено. Мы можем не только упорядочивать алгоритмы, перечисляя их, но и разрешать. В частности, всегда можно однозначным образом проверить что данная цепочка символов является синтаксически верным алгоритмом.

"Определим" теперь три подмножества :

: "множество всех алгоритмов не использующих оператор goto"

: "множество всех определённых при данном функций "

: "множество всех алгоритмов решающих проблему остановки"

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

Множество является уже неразрешимым, но перечислимым. Точнее для некоторых элементов предикат определён, тогда как для других не определён, и мы не можем сказать принадлежит ли к или нет. Это уже не так хорошо. У нас нет способа применять к такому объекту множественные операции. Например, мы не можем однозначно определить дополнение до всех алгоритмов .

Третье множество выглядит совсем плохим. Более того, в силу теоремы Тьюринга такого множества просто не существует. Но мы же его задали, причём такой однозначной фразой! Очень часто в математике рассматриваются множества определённые не алгоритмом, а некоторым общим описанием, например "возьмём множество всех множеств". Пока противоречия не возникают рассуждать о таких объектах конечно можно. Но где проходит грань неясности между "множеством всех множеств" и "множеством тех множеств которые не являются множествами" ?.

Многие математические задачи имеют алгоритмическое решение. Например, при помощи алгоритма мы всегда можем сложить два числа, или разложить любое число на простые множители. Однако, есть алгоритмически неразрешимые задачи. Примером такой задачи является "Проблема Остановки".

Ещё один хорошо известный пример связан с диафантовыми уравнениями. Они являются полиномами с целыми коэффициентами и несколькими неизвестными. Примеры таких уравнений:

В 10-проблеме Гильберта, сформулированной в 1901г. требуется найти алгоритм определяющий для любого диафантового уравнения, имеет ли оно целочисленные решения или нет. Более того, сами решения строить не обязательно, достаточно узнать что они есть в принципе. Таким образом, требуется построить разрешающий алгоритм на вход которого подаётся уравнение (или его номер), а на выходе получается 1, если уравнение имеет решения, и 0 — если нет.

Для некоторых классов уравнений подобные алгоритмы существуют. Например, решения уравнения находятся среди делителей свободного члена . Всегда имеет решение уравнение . Можно доказать, что уравнение не имеет решений, и т.д. Однако, как и в "Проблеме Остановки", стоит задача построения универсального алгоритма для любого диафантового уравнения. В 1970г. Юрий Владимирович Матиясевич доказал неразрешимость этой задачи.

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

Если считать проблему Гильберта решённую в таком отрицательном варианте, то понятно, что говорить о множестве : "всех диафантовых уравнений имеющих решения" можно, но "хорошим" его назвать трудно, хотя оно и является перечислимым. Заметим, что до 1970 г. подобные категории уточнения определения были просто не доступны. Еще хуже, когда не известно, является ли множество хотя бы перечислимым. Работа с такими объектами требует незаурядного мужества.


Проблемы остановки и тождественности << Оглавление >> Существуют ли несчетные множества?

Истинность и доказуемость - о конструктивной математике, Канторе и Гёделе