Перейду к конкретике:
Пусть Q(X) - функция определяющая останавливается ли X или зацикливается.
Тогда при попытки этой функции определить это свойство для самой себя возникает противоречие.
Но тут есть одно но!
Почему-то в доказательсте "забывают" про параметры функции.
Мне кажется, Вы как-то неправильно понимаете самоприменимость. Речь идёт не о том, что мы передаём функции
результат её работы, а о том, что функции передаётся её собственное
определение, записанное на каком-то алгоритмическом языке. Например, мы пытаемся откомпилировать компилятором исходный текст этого компилятора. И опять же, тут нет никакого парадокса, а есть обычное доказательство от противного: предположили, что существует функция, применимая только к несамоприменимым функциям, - пришли к противоречию - значит, нет такой функции.
Есть много вариантов "проблемы остановки" (как и "теорем о неполноте") ... но проанализировав каждую, во всех можно найти завуалированное применение бесконечных вложений.
Для примера могу разобрать тот вариант что в Википедии:
[url]http://ru.wikipedia.org/wiki/Проблема_остановки[/url]
Цитата:
Все конечные последовательности символов из некоторого алфавита можно пронумеровать. Выпишем сначала все символы из алфавита, потом все последовательности из двух символов, потом - из трех и т.д. Любая конечная последовательность когда-нибудь встретится в этом списке. Позиция, на которой она встретится - это и будет ее номер. Рассмотрим алгоритмы, которые принимают на вход натуральное число и на выходе тоже выдают натуральное число. Алгоритм может рано или поздно остановиться и выдать результат, или же не остановиться никогда (например, из-за бесконечного цикла или бесконечной рекурсии). Каждый алгоритм можно записать в виде конечной последовательности символов на некотором языке программирования, поэтому у каждого алгоритма есть номер. Все пары натуральных чисел тоже можно пронумеровать. Представим, что все пары выписаны в виде таблицы: на первой строке находятся все пары, первый элемент которых равен 1, на второй строке находятся все пары, первый элемент которых равен 2 и т.д. Мы можем обойти эту таблицу по диагоналям, выписывая все пары в ряд: (1,1),(1,2),(2,1),(1,3),(2,2),(3,1) и т.д. Позиция, на которой встретится некоторая пара - это и будет ее номер. И наоборот, каждому номеру соответствует какая-то пара чисел. Назовем Анализатором гипотетический алгоритм, который получает на вход номер пары натуральных чисел, интерпретируемых как номер алгоритма N и его входные данные X, и:
останавливается и возвращает 1, если алгоритм с номером N останавливается, получив на вход X
останавливается и возвращает 2, если алгоритм с номером N не останавливается, получив на вход X
А теперь найдём подвох:
Когда анализатору передаётся (в качестве параметра) номер другого алгоритма+параметры (m,n), то по одному номеру (номерам) наш анализатор ни за что не определит, остановится алгоритм или нет.
Сам номер ему ни о чем не скажет (поскольку назначался произвольно и независимо от алгоритма/параметров, который он нумерует)
Для работы анализатору надо получить конкретное описание алгоритма.
Т.е. он должен перейти по ссылке и извлечь это описание (где они там хранятся) и ... точно также получить описание параметров.
Предположим, что в качестве исследуемой функции (m) оказался сам же анализатор ... которому в качестве параметров (n) было некое число... также равное m (n=m).
Ну допустим, что описание алгоритма одинаково для всех пар чисел начинающихся на m , поэтому описание алгоритма можно получить без длительных поисков ... но вот про параметры этого сказать нельзя.
Поскольку число n - это всего лишь число, то мы должны отправится в ячейку под номером n и узнать - что там скрывается.
Если окажется что в этой ячейке находится очередная ссылка на другую ячейку (m1,n1) то следует пройти по ней и уже там попытатся узнать какие параметры все-же переданы нашему анализатору, и так до тех пор пока не упремся в тупиковую ветвь.
Для случая же n=m мы имеем ... зациклившуюся базу номеров с бесконечным переходом по ссылкам.
Т.е. тот самый случай бесконечного вложения: Q(Q(Q(Q(...
В нашем случае: (m,(m,(m,(m, ... здесь бесконечное число вложений...)))
Т.е. все тот-же вариант бесконечного зацикливания.
Естественно мы приходим к выводу о невозможности выполнения данной процедуры ... но означает ли это доказательство невозможности существования анализатора?
Нет!
Здесь дефект сидит в выбранной нумерации, а не алгоритме анализатора.
Т.е. рассмотрен только частный случай невозможности написания алгоритма, который бы корректно работал с некорректной базой данных (графом с циклическими ссылками).
Для бесконечных множеств мы просто составляем список элементов с бесконечно большой скоростью.
Поподробнее этот процесс опишите, пожалуйста (например, для
). Последовательно список составляете, элемент за элементом?
Нет, просто беру и пишу некое уравнение с признаком принадлежности к множеству ... с учетом того, что в этом уравнении не должно упоминаться само множество для которого составляется уравнение.
(Как в логическом выражении не должно присутствовать свободной переменной под знаком квантора , связывающего переменную с тем-же названием).
Назовем это уравнение: "уравнение порождения множества".
Т.е. составление множества - это такой-же квантор что и кванторы всеобщности и существования (не знаю как они на math пишутся поэтому - словами) и внутри этой процедуры не должно быть значка самого этого порождаемого множества.
И кроме того считается, что под этим "квантором порождения" (в списке проверяемых множеств), самого "порождаемого множества" не существует и ,следовательно, к нему не требуется применять нашего "порождающего признака".
Т.е. определение/создание множества m1 выглятит так:
m1=M|x(P(x)=1)
x-связаная переменная пробегающая все существующие множества (кроме m1)
P - порождающий признак, проверяющий x на удовлетворение условию.
К стати, если я поставлю перед ним тот-же самый "квантор порождения" ...
m2=M|y(P(y)=1) ; m1=M|x(P(x)=1)
то при "втором проходе" множество m1 (не m2) уже будет считатся созданым и существующим ... но это уже получим другое множество (с четной степенью порождающего квантора) в качестве элемента содержащее "похожее на него" (на m2) множество m1 ... однако созданное при помощи квантора нечётной степени (т.е. совершенно другого множества).
Получилось, что-то типа последовательного алгоритма действий.
Не такая уж и "особая" математика - небольшое расширение мат. логики.