маткиб писал(а):
отсюда
epros писал(а):
Я не понял, чего ещё-то Вы хотите? Что такое "алгоритм
, перечисляющий аксиомы" мы с Вами вроде бы уже договорились: Это, если хотите, программа, принимающая на вход любое натуральное число
(порядковый номер аксиомы), а на выходе выдающая гёделевский номер
соответствующей формулы теории. "Выразить арифметической формулой" это значит записать в синтаксисе арифметики выражение, соответствующее равенству
.
вытекает, что формула называется выражающей функцию
, если
соответствует (т.е. семантически эквивалентна) равенству
.
Если под "функцией" Вы здесь имеете в виду результат выполнения алгоритма для заданных аргументов (т.е. слово "функция" употреблено в программистском смысле), то можно и так сказать. Хотя понятие "семантически эквивалентна" представляется мне довольно неопределённым.
маткиб писал(а):
1) Если
- элементарная формула (т.е. вида
), то
соответствует алгоритм, получающий на вход значения всех свободных переменных и тупо вычисляющий значение
на них.
Это я не вполне понял.
и
это и есть свободные переменные? Тогда это формула предиката равенства, которой может соответствовать алгоритм сравнения двух объектов.
маткиб писал(а):
2) Если
имеет вид
, то ей соответствует алгоритм, перебирающий значения
, и для каждого
запускающий алгоритм для
; если запускаемый сказал "да", то выдать "да".
Да. На всякий случай уточню, что для запуска
для следующего
не нужно дожидаться окончания выполнения для предыдущего
. Как только хотя бы один из запущенных алгоритмов для
скажет "да", алгоритм в целом считается завершившимся с результатом "да".
маткиб писал(а):
3) Если
имеет вид
, то соответствует зацикливающийся алгоритм;
Не совсем так, ибо результат "нет" тоже может приниматься. Если он получен хотя бы для одного из
, то весь алгоритм в целом считается завершившимся с результатом "нет".
Такой подход не позволяет алгоритмически доказывать формулы с квантором всеобщности (позволяет только опровергать). Но это не исключает возможность мета-теоретического доказательства.
маткиб писал(а):
4) Если
имеет вид
,
,
или
, то соответствующий алгоритм запускает алгоритмы для
и
(или только для
) и выдаёт результат соответствующей логической операции над их результатами.
С логическими операциями всё не так просто. Например, чтобы доказать отрицание, необходимо доказать неразрешимость алгоритма, доказывающего
. Обычно это выполняется путём сведения предположения
к противоречию. Что такое "противоречие" (или "абсурд") - это отдельная песня. Насколько я понимаю, большинство конструктивистов принимают его за базовое (неопределимое) понятие, т.е. полагают, что в любой формальной системе существует высказывание, которое считается очевидным образом неверным. Например, в арифметике таковым можно считать высказывание
. Вывод его из
означает доказательство
(т.е. опровержение
).
Но есть и варианты логики без отрицания и, соответственно, без понятия об абсурде.
маткиб писал(а):
1) Особая обработка нескольких подряд идущих кванторов существования: если
имеет вид
, то алгоритм перебирает
векторы , и для каждого запускает вычисление
.
2) При вычислении логических операций использовать "ленивые вычисления", т.е. если, например, в выражении
уже известно, что
истинно, то
можно не вычислять.
3) Если
есть
, то алгоритмы для
и
запускать
параллельно, и выдавать ответ "да" в случае, если какой-то из них скажет "да" (завершения другого не ждать). Аналогично для
.
В принципе тут всё правильно, хотя с импликацией тоже есть тонкости.
маткиб писал(а):
Все три модификации важны, поэтому прошу пояснить (если собираетесь использовать это определение).
Так какое определение правильное?
Как ни странно,
все правильные. Т.е. проблемы с использованием любого из этих определений могут возникнуть только в случае, если между результатами их применения обнаружатся принципиальные противоречия, а таковых, как я понимаю, быть не может.
Я вижу, что у нас с Вами здесь опять прорисовывается различие в базовых подходах. Вы, очевидно, считаете, что понятие "эквивалентности" между алгоритмами и формулами должно "объективно" существовать в некоем идеальном, независимом от нашего знания мире. И выражаться оно, судя по всему, должно
однозначным ответом на вопрос "эквивалентны ли они?" для любой пары алгоритм - формула. С моей же точки зрения такое понятие об "эквивалентности" не проходит, ибо мы имеем право оперировать только тем, что знаем, а в некоторых случаях мы не знаем как разрешится тот или иной алгоритм или та или иная формула. Это важно принимать во внимание не только при сопоставлении формулы с алгоритмом, но и при сопоставлении формулы с формулой или алгоритма с алгоритмом.
Здесь возможны несколько вариантов:
1. Формулы (или алгоритмы) несомненно равны тогда, когда посимвольно совпадают их коды.
2. Может оказаться так, что мы располагаем доказательством совпадения результатов выполнения алгоритмов или значений формул
для всех возможных значений аргументов. В этом случае формулы и алгоритмы тоже можно считать "эквивалентными". Но этот случай предполагает, что мы не столкнулись ни с одним случаем возможной неразрешимости алгоритма или недоказуемости формулы (ни при одном из значений аргументов).
3. Если мы пока не смогли достичь точки останова алгоритма или не смогли получить доказательство формулы для некоторых значений аргументов, то мы всё-таки можем считать их "эквивалентными" в том смысле, что для всех случаев, когда результаты (выполнения алгоритма или доказательства формулы) точно известны, между ними не возникает противоречий.
Все рассмотренные Вами способы построения формул арифметики, экивалентных алгоритмам, и алгоритмов, эквивалентных формулам арифметики, соответствуют по крайней мере 3-ему варианту интерпретации понятия эквивалентности. Это соответствует и конструктивному пониманию формулы
, где
- формула, а
- результат выполнения алгоритма. Т.е. эта формула доказана, если доказана
и алгоритм
сказал "да", а также если опровергнута
и
сказал "нет", и эта формула опровергнута, если доказана
и
сказал "нет", а также если опровергнута
и
сказал "да". Во всех остальных случаях, т.е. если либо
не разрешена, либо
не достиг точки останова, данная формула эквивалентности считается неразрешённой. Так вот, если мы докажем неопровержимость этой формулы эквивалентности (в конструктивной логике неопровержимость - это двойное отрицание, и из неё не всегда следует доказанность формулы), то мы спокойно можем считать эквивалентность в 3-ем смысле доказанной. Это к вопросу о том, что является арифметической формулой, "эквивалентной" алгоритму (как Вы выразились, "семантически"). Что касается вопроса о том, что является алгоритмом, "эквивалентным" арифметической формуле, то описанные способы построения алгоритмов по арифметическим формулам автоматически гарантируют эквивалентность в том же (т.е в 3-ем) смысле, хотя не всегда гарантируют разрешимость алгоритма даже там, где формула разрешима.
Вообще, аналогия между алгоритмами и формулами арифметики должна быть очевидна уже из того факта, что процедура доказательства формулы - это тоже алгоритм. Причём аксиомы арифметики как раз таковы, что процедура доказательства во многих случаях просто буквально следует тому способу построения алгоритма по арифметической формуле, который Вы здесь рассмотрели.
маткиб писал(а):
- это вообще функция, а не формула, поэтому она не может быть "уже записана" в синтаксисе теории.
Выше я рассматривал пример функции
. Разве эта функция не определяется формулой? Или Вы считаете, что "первоначально" функция существует не в виде формулы, а где-то в Вашем "воображаемом мире", и только иногда оказывается выраженной формулой? С моей точки зрения функция определена в теории только тогда, когда для неё указана формула. Если формулы нет, то нет и функции, а есть только абстрактные разговоры о ней.
маткиб писал(а):
epros писал(а):
То, что Вы написали там (и далее, где привели "код" процедуры
) содержит слишком много общих слов, которые не позволяют мне сделать однозначный вывод о том, что программа (одна), перечисляющая все аксиомы мета-доказуемостей действительно существует. Но я ещё подумаю. Вдруг из этого действительно что-то выйдет.
Подумайте. Ещё можете Беклемишева почитать (см.
здесь), у него эта проклятая мета(
)-доказуемость формализована для существенно бОльших ординалов, чем
(правда называется по-другому).
Вообще-то я постепенно прихожу к мысли, что в отношении мета(
)-доказуемости Вы правы. Т.е. алгоритмы
, перечисляющие аксиомы любого уровня мета(
)-доказуемости, можно записать одной рекурсивно вычислимой функцией двух переменных
и
.
Правда это похоже на какую-то логическую игру, поскольку, как я понимаю, чтобы реально вычислить эту функцию уже для очень небольших
и
(скажем, для
) не хватит вычислительных ресурсов всей Вселенной. Т.е. реально мы не только никогда не сможем воспользоваться какими-либо преимуществами мета(
)-доказуемости, мы вряд ли сможем даже мета(2)-доказать что-либо действительно интересное. Даже Гёделевское
для арифметики, доказуемое на мета(1)-уровне, "вживую" вроде бы никто ещё не выписал, да и вряд ли это кому-нибудь нужно, ибо в этом высказывании, кроме его доказуемости лишь на мета(1)-уровне, нет абсолютно ничего интересного. Так что если говорить не о логических играх, а о чём-то полезном, то лучше рассматривать на ближайших мета-уровнях только то, что действительно интересно, но вряд ли легко доказуемо в самой арифметике. Например, есть нерешённая математическая проблема существования нечётных совершенных чисел. Возможно, она и неразрешима в теории, зато может быть разрешится на мета-уровне.
В этом смысле мета(
)- и более высокие уровни доказуемости интересны разве что с точки зрения чистой логики. Кстати, как я понимаю, на мета(
)-уровне доказуемо только то, что доказуемо на каком-либо из мета(
)-уровней. Т.е. этот уровень (в отличие от уровней, соответствующих непредельным ординалам) не доказывает ничего нового.