Мы хотим показать, что график всякой вычислимой функции является арифметическим множеством, то есть выразим формулой арифметики. Для этого удобно перейти от машин Тьюринга к другой модели, которую можно условно назвать машинами с конечным числом регистров.
Программа для такой машины использует конечное число переменных, значениями которых являются натуральные числа. Числа эти могут быть произвольного размера, так что машина реально имеет память неограниченного объема. Программа состоит из нумерованных по порядку команд. Каждая команда имеет один из следующих видов:
a:=0a:=ba:=b+1a:=b-1goto $$\langle$$ номер $$\rangle$$if a=0 then goto $$\langle$$ номер1 $$\rangle$$ else goto $$\langle$$ номер2 $$\rangle$$stopДля тех, кто не сталкивался с командой goto,
поясним, что имеется в виду в команде if: если
значение переменной a равно нулю, то далее исполняется
команда с номером, указанным после then (этот номер
конкретное натуральное число, не превосходящее числа команд в
программе); если a не равно нулю, то дальше выполняется
команда с номером, указанным после else.
Команда goto без условия всегда выполняет переход к
команде с указанным в ней номером.
Поскольку мы считаем, что значения переменных натуральные
(целые неотрицательные) числа, условимся считать
разность 0-1 равной 0 (впрочем, это не так
важно можно
было бы считать это аварией).
Дойдя до команды stop, программа заканчивает работу.
Как и для машин Тьюринга, полезна некоторая практика
программирования. Для тренировки напишем программу сложения
двух чисел. Она помещает в c сумму чисел, которые были в
переменных a и b. Такая программа на паскале имела бы
вид
c:=a;
{инвариант: ответ=сумма текущих значений c и b}
while b<>0 do begin
c:=c+1;
b:=b-1;
end;
Имитируя цикл с помощью операторов перехода, получаем программу для нашей машины:
1 c:=a 2 if b=0 then goto 6 else goto 3 3 c:=c+1 4 b:=b-1 5 goto 2 6 stop
Теперь легко понять, как написать программы для вычитания,
умножения (которое реализуется как цикл с повторным сложением),
деления с остатком (как учил еще Энгельс в забытой ныне книге
" Диалектика природы", деление есть сокращенное вычитание),
возведения в степень, проверки простоты, отыскания n -го
простого числа и т.п. Вообще по сравнению с машинами Тьюринга
этот язык более привычен и потому легче поверить, что на нем
можно запрограммировать все алгоритмы.
Единственное, чего в нем реально не хватает это массивов. Но это легко обойти, поскольку есть числа произвольного
размера и нас не интересует число операций (как это
принято в общей теории алгоритмов). Вместо массива битов мы
можем хранить число, двоичной записью которого он является, а
для массивов чисел воспользоваться, скажем, основной теоремой арифметики и хранить
последовательность $$\langle a,b,c,d,e\rangle$$ как
число 2a3b5c7d11e. При этом операции a[i]:=b
и b:=a[i] заменяются на небольшие программы, которые
содержат переменные a, b, i и еще несколько
переменных. (Частью этих программ является нахождение простого
числа с заданным порядковым номером.)
Легко определить понятие вычислимой (в этой модели) функции.
Пусть есть программа с двумя переменными x и y (и, возможно,
другими).
Поместим в x некоторое число n, а в
остальные переменные поместим нули. Запустим программу. Если она
не остановится, то вычисляемая ей функция в точке n
не определена. Если
остановится, то содержимое переменной y после остановки и
будет значением функции, вычисляемой нашей программой (в точке n ).
Функция называется вычислимой (в этой модели), если существует вычисляющая ее программа.
Как всегда, при определении мы фиксировали различные детали, большинство из которых не являются существенными. Можно было бы добавить некоторые команды (сложение, например) или даже исключить (например, без копирования можно обойтись с помощью небольшой хитрости).
83.
Покажите, что класс вычислимых функций не изменится, если
исключить из определения команду копирования a:=b.
Несколько более удивительно, что число переменных можно ограничить, скажем, сотней но и это не так уж странно, если вспомнить, что мы можем хранить в одной переменной целый массив.
84. Проверьте это.
Построенная
Теорема 65. Всякая функция, вычислимая на машинах Тьюринга, может быть вычислена с помощью программы описанного вида с конечным числом переменных.
Следует уточнить, однако, что мы имеем в виду, так как для
машин Тьюринга исходное данное и результат были двоичными словами,
а для программ натуральными числами. Мы отождествляем те и другие
по естественному правилу, при котором слова $$\Lambda$$ (пустое), 0, 1, 00, 01,... соответствуют
числам 0, 1, 2, 3, 4 ...(чтобы получить из числа слово, прибавим к
нему единицу, переведем в двоичную систему и отбросим единицу в
старшем разряде).
Как и раньше, мы приведем лишь приблизительное описание того, как по машине Тьюринга строится программа с конечным числом переменных, вычисляющая ту же функцию. Прежде всего конфигурации машины Тьюринга надо закодировать числами. Можно сделать это, например, поставив в соответствие каждой конфигурации четыре числа: номер текущего состояния, номер текущего символа (в ячейке, где стоит головка машины), код содержимого ленты слева от головки и код содержимого ленты справа от головки.
Чтобы решить, как удобнее кодировать содержимое ленты слева и
справа от головки, заметим, что машина Тьюринга обращается с
двумя половинами лентами слева и справа от головки как со стеками. (Стеком называется структура данных, напоминающая
стопку листов. В нее можно положить лист наверх, взять верхний
лист, а также проверить, есть ли еще листы.) В самом деле, при
движении головки направо из правого стека берется верхний
элемент, а в левый стек кладется; при движении налево
наоборот. Стеки легко моделировать с помощью чисел: например,
если в стеке хранятся символы 0 и 1, то добавление
нуля
соответствует операции x $$\mapsto$$ 2x, добавление единицы
операции x $$\mapsto$$ 2x+1, верхний элемент есть остаток при
делении на 2, а удаление верхнего элемента есть деление
на 2 (с отбрасыванием остатка). Другими словами, мы воспринимаем
двоичную запись числа как стек, вершина которого находится
справа, у младшего разряда. Точно так же можно использовать n -ичную систему счисления и представить стек с n
возможными
символами в каждой позиции.
Теперь основной цикл машины Тьюринга можно записать как программу, оперирующую с указанными четырьмя числами (символ, состояние, левый стек и правый стек) без особых хитростей. Но несколько вещей все-таки надо иметь в виду.
Во-первых, стеки конечны, а лента бесконечна мы должны договориться, что если стек опустошается, то в него автоматически добавляется символ пробела. Тем самым бесконечный пустой хвост ленты может присутствовать в стеке, как теперь говорят, виртуально.
Во-вторых, напомним, что мы договорились отождествлять двоичные слова (которые подаются на вход машины Тьюринга) и их коды (которые хранятся в переменных нашей программы). Поэтому, получив код входного слова, надо его разобрать по символам и положить эти символы один за другим в стек (основания систем счисления разные, так что просто так переписать это нельзя). Аналогичные проблемы возникают и при превращении выхода (части содержимого правого стека) в соответствующее число, но все они легко преодолимы, и мы не будем вдаваться в подробности.
Верно и обратное утверждение:
Теорема 66. Всякая функция, вычислимая программой с конечным числом переменных, вычислима на машине Тьюринга.
Нам надо моделировать поведение программы с помощью машины Тьюринга. Будем считать, что значения переменных записаны на ленте (в двоичной системе) и разделены специальным разделительным символом. Тогда машина может найти любую переменную, идя от начала ленты и считая разделительные символы, сделать что-то с этой переменной и затем вернуться обратно в начало. (Нет необходимости записывать на ленте номер исполняемой команды, поскольку команд конечное число и машина может помнить номер текущей команды как часть своего состояния.) Операции прибавления и вычитания единицы также легко выполнимы в двоичной записи (если идти справа налево). Надо только иметь в виду, что размер числа может увеличиться, и тогда нужно для него освободить место, сдвинув все символы справа от головки на одну позицию. (При уменьшении нужно сдвинуть влево.) Ясно, что это также легко выполнить с помощью машины Тьюринга.
Если мы записываем числа в двоичной системе, то проблемы с перекодированием при вводе-выводе минимальны (надо лишь дописать нули для значений остальных переменных в начале работы и встать в нужное место ленты в конце).
Сейчас мы докажем, что функции, вычислимые программами с конечным числом переменных, арифметичны, то есть их графики являются арифметическими множествами. В этом разделе мы вновь
предполагаем некоторое знакомство читателя с логическими
обозначениями, и будем рассматривать арифметические формулы, содержащие переменные по натуральным числам,
равенство, константы 0 и 1, операции сложения и
умножения,
логические связки (И, ИЛИ, НЕ) и кванторы " для всех" и "
существует". Формально говоря, мы рассматриваем сигнатуру,
содержащую единственный двуместный 0 и 1 и два двуместных
функциональных символа (сложение и умножение). Говоря об
истинности таких формул, мы имеем в виду их истинность в
стандартной интерпретации, носителем которой является множество N натуральных чисел.
Множество $$A \subset N^{k}$$ называется арифметическим, если существует арифметическая формула $$\alpha$$ с
параметрами x1,...,xk, которая его представляет в следующем смысле: $$\langle n_1,\dots,n_k\rangle\hm\in A$$ тогда и
только тогда, когда формула $$\alpha$$ истинна при значениях
параметров x1=n1,..., xk=nk.
Теорема 67. График любой функции, вычисляемой программой с конечным числом переменных, является арифметическим множеством.
Пусть f : N -> N функция, вычислимая
некоторой программой P с конечным числом
переменных k1,...,kN. Будем считать, что входной переменной
является k1, а выходной k2. Нам нужно написать
формулу с двумя
переменными x, y, которая была бы истинна тогда и
только
тогда, когда y=f(x). Состояние программы с конечным числом
переменных полностью описывается значениями переменных и
номером текущей команды (в процессорах соответствующий регистр часто называют
Step(s1,...,sN,p,s1',...,sN',p'),
с 2N+2 переменными,
которая утверждает, что данная программа P из состояния, где
переменные равны s1,...,sN, а счетчик команд
равен p, за
один шаг переходит в состояние, где переменные
равны s1',...,sn', а счетчик команд равен p'.
(Договоримся,
что значение p'=0 соответствует остановке программы.)
Такая формула является конъюнкцией отдельных утверждений,
соответствующих каждой строке программы. Пусть, например,
строка 7 программы
имеет вид k2:=k3. Тогда в
конъюнкции будет член вида
Для строки с условными переходами типа
3 if k5=0 then goto 17 else goto 33
в формуле будет два конъюнктивных члена (на два случая перехода)
$$((p=3) \wedge (s_{5}=0)) \Rightarrow ((s_{1}'=s_{1}) \wedge \dots \wedge (s_{N}'=s_{N}) \wedge (p'=17))$$и
$$((p=3) \wedge (s_{5} \ne 0)) \Rightarrow ((s_{1}'=s_{1})\wedge \dots \wedge (s_{N}'=s_{N})\wedge (p'=33)).$$Надо еще добавить утверждение о том, что при p=0 работа
прекращается, то есть что переменные на следующем шаге сохраняют
свои значения, и p' остается равным 0.
Таким образом, арифметичность одного шага работы программы доказать несложно. Остается главный вопрос: как записать в виде формулы тот факт, что существует последовательность шагов, которая начинается с исходного состояния, заканчивается в данном и в которой каждый шаг правилен. Трудность в том, что здесь нужно как бы написать переменное число кванторов существования или квантор " существует конечная последовательность натуральных чисел".
Это делается с помощью приема, традиционно называемого $$\beta$$ -функцией Геделя. Вот что имеется в виду.
Лемма 1. Для любого k можно найти сколь угодно большое
целое
положительное число b, при котором первые k членов
последовательности b+1, 2b+1, 3b+1,... попарно взаимно просты.
Доказательство. Любой общий простой делитель двух из этих чисел
будет делителем их разности, то есть
числа lb при 0<l<k ; взяв b
кратным k!, мы гарантируем,
что он будет делителем числа b, но все члены нашей
последовательности взаимно просты с b. Лемма доказана.
Лемма 2. Для любой
последовательности x0,x1,...,xn натуральных
чисел можно найти такие числа a и b, что xi есть остаток от
деления a на b(i+1)+1.
Доказательство. Согласно предыдущей лемме, делители b(i+1)+1 можно
взять взаимно простыми (и сколь угодно большими), остается
воспользоваться " китайской теоремой об остатках". Эта теорема утверждает, что если целые положительные числа d1,...,dk взаимно просты, то при делении целого u на них
может получиться любой заданный набор остатков. В самом деле,
таких наборов будет d1d2... dk (поскольку при делении
на di возможны остатки от 0 до di-1 ).
При делении чисел u=0,1,...,d1d2... dk-1 получаются разные наборы
остатков (если два числа u' и u'' дают одинаковые
остатки,
то их разность делится на все di, что невозможно в силу
взаимной простоты). Поэтому чисел столько же, сколько наборов
остатков, и должны появиться все наборы.
Лемма 2 доказана.
Эта лемма показывает, что последовательность
произвольной длины можно закодировать
тремя числами a, b и n (последнее
число
длина последовательности). Таким образом, условно говоря, можно
заменить " формулу"
(которая на самом деле не является арифметической формулой, так как содержит квантор по конечным последовательностям) на формулу
$$\exists a \exists b \exists n (\forall i \le n)[\dots (остаток\ от\ деления\ a\ на\ b(i+1)+1)\dots ].$$Мы будем записывать остаток от деления a
на b(i+1)+1
как $$\beta (a,b,i)$$ (отсюда и название " бета-функция").
Возвращаясь к нашей программе P с конечным числом
переменных k1,...,kN и вычисляемой ей функции f,
можно записать утверждение вида f(x)=y так: существуют такое
число
шагов n и такие числа a1,b1,a2,b2,...,aN,bN,a,b, что
x, остальные
равны 0 ); $$\beta (a,b,0)$$ есть правильное начальное
значения
счетчика команд, то есть 1 ;i от 0 до n-1 имеет
место$$Step(\beta (a_{1},b_{1},i),\dots ,\beta (a_{N},b_{N},i),\beta (a,b,i),\beta (a_{1},b_{1},i+1),\dots ,\beta (a_{N},b_{N},i+1),\beta (a,b,i+1)),$$
то есть каждый переход соответствует программе;k2
в конце вычисления равно y ) и $$\beta (a,b,n)=0$$
(значение счетчика команд в конце вычисления равно 0,
что по нашей договоренности соответствует остановке машины).Итак, арифметичность вычислимых (на машинах с конечным числом переменных) функций доказана.
Вспоминая теорему 65, мы заключаем, что всякая вычислимая на машине Тьюринга функция арифметична. Принимая тезис Тьюринга, можно сказать, что график любой вычислимой функции является арифметическим множеством.
Поскольку графики вычислимых функций арифметичны, очевидно, разрешимые и перечислимые множества тоже будут арифметическими. Тем самым мы можем оправдать название " арифметическая иерархия" для классов $$\Sigma _{n}$$ и $$\Pi _{n}$$:
Теорема 68. При любом n любое множество из класса $$\Sigma _{n}$$
или $$\Pi _{n}$$
арифметично (есть формула арифметики, выражающая
принадлежность этому множеству).
После того, как мы доказали арифметичность вычислимых функций,
все ясно множества из классов $$\Sigma _{n}$$ и $$\Pi _{n}$$
получаются навешиванием кванторов на
Верно и обратное:
Теорема 69. Всякое арифметическое множество лежит в классе $$\Sigma _{n}$$ или $$\Pi _{n}$$ для некоторого n (и, естественно, для всех
больших n ).
Формулу, задающую арифметическое множество, приведем к
предваренной нормальной форме (вынеся кванторы наружу).
Ясно, что бескванторная часть
задает
Можно и не использовать предваренной нормальной формы, а применить индукцию по длине формулы и сослаться на то, что пересечение, объединение и дополнение, а также проекция не выводят за пределы арифметической иерархии (объединения всех классов $$\Sigma _{n}$$ и $$\Pi _{n}$$ ).
Рассмотрим теперь множество T, элементами которого являются
все истинные арифметические формулы без параметров (точнее, их
номера в какой-то вычислимой нумерации всех формул это
значит, что по формуле можно алгоритмически получить ее номер и
наоборот).
Теорема 70. Любое арифметическое множество m -сводится к
множеству T.
Это утверждение почти очевидно. Пусть A произвольное
арифметическое множество. Пусть $$\alpha (x)$$ формула с одной переменной, которая выражает принадлежность множеству A. Это
означает, что $$\alpha (n)$$ истинно при тех и только
тех n,
которые принадлежат A. Тогда
вычислимая
функция n $$\mapsto$$ номер
формулы, которая является результатом подстановки
константы n в $$\alpha (x))$$ m -сводит A к T.
Теорема 71. Множество T не арифметично.
После проведенной нами подготовки это утверждение очевидно: если
бы T было арифметическим, то оно лежало бы в некотором
конкретном классе $$\Sigma _{n}$$. Поскольку всякое арифметическое
множество сводится к T, то по
теореме 53 все
арифметические
множества лежали бы в этом классе. Но мы знаем, что множества из
более высоких классов иерархии тоже арифметичны, но в $$\Sigma _{n}$$
не лежат.
Эта теорема называется теоремой Тарского. Ее можно прочесть так: множество арифметических истин не арифметично. Или: понятие арифметической истины невыразимо в арифметике.
Теорема 72. Множество T арифметических истин неперечислимо.
В самом деле, любое перечислимое множество арифметично.
Это утверждение называется теоремой Геделя о неполноте. Его можно переформулировать так: всякое исчисление, порождающее формулы арифметики (е алгоритм, перечисляющий некоторое множество таких формул) либо неадекватно (порождает некоторую ложную формулу), либо неполно (не порождает некоторой истинной формулы).
85.
Покажите, что для любого N множество всех истинных замкнутых
арифметических формул, содержащих не более N кванторов,
арифметично.
86. Сформулируйте и докажите аналогичное утверждения для формул ограниченной кванторной глубины (число вложенных кванторов) и для формул с ограниченным числом перемен кванторов в предваренной нормальной форме.
В нашем изложении теоремы Тарского и Геделя получились как простые следствия определений и фактов, связанных с теорией алгоритмов. С одной стороны, это позволяет лучше понять место этих теорем в общем контексте математической логики и теории алгоритмов. С другой стороны, возникает естественное желание развернуть цепочку и получить более прямые доказательства. Таковые мы сейчас и приведем.
Начиная доказывать теорему Тарского, предположим, что множество
номеров всех истинных арифметических формул (без параметров)
арифметично. Пусть T это множество, а $$\tau (x)$$
соответствующая формула. Перенумеруем также все формулы с одним
параметром x ; пусть Fn(x) формула, имеющая
номер n в
этой нумерации. Рассмотрим формулу с единственным
параметром x, утверждающую, что результат подстановки
константы x в x -ую формулу с параметром ложен. Эту формулу можно написать
так:
где Subst(p,q,r) формула с тремя параметрами, выражающая
такое свойство: " p есть номер (в нумерации всех формул без
параметров) той формулы, которая получится, если в q -ю формулу
с одним параметром подставить константу r вместо этого
параметра". Записанное в кавычках свойство описывает график
некоторой вычислимой функции (соответствующей простым
синтаксическим
Итак, мы написали некоторую формулу с единственным
параметром x.
Пусть она имеет некоторый номер N. Подставим этот
номер N
вместо ее параметра. Получится некоторая формула без параметров.
Из построения видно, что эта формула истинна тогда и только тогда,
когда результат подстановки числа N в формулу
номер N (то есть
сама эта формула!) ложен.
Полученное противоречие завершает прямое доказательство теоремы Тарского. Мы видим, что нам потребовалась выразимость в арифметике не любых вычислимых функций, а одной вполне конкретной. При достаточном терпении соответствующую формулу можно-таки написать, и тем самым доказательство станет совсем " осязаемым".
Теперь изложим в том же стиле доказательство теоремы Геделя.
Как мы уже говорили, исчисление это механизм
(алгоритм), который позволяет порождать некоторые формулы языка
арифметики (для простоты будем считать, что порождаются только
формулы без параметров). Таким образом, возникает некоторое
перечислимое множество, которое обычно задают как проекцию
x и y, которое
гласит, что x есть доказательство формулы y. Перенумеровав все
доказательства и формулы и выразив указанные разрешимые свойства
в языке арифметики, мы приходим к формуле , которая истинна, когда x есть номер
доказательства формулы с номером y.
Теперь напишем формулу с одним параметром x, которая говорит,
что результат подстановки числа x вместо параметра в x -ую
формулу с одним параметром не имеет доказательства:
Эта формула имеет единственный параметр ( x ); пусть ее номер в
нумерации таких формул равен N. Подставим N вместо
параметра. Получится формула без параметров $$\phi.$$ По
построению формула $$\phi$$ истинна, когда результат
подстановки N в N -ю формулу с одним параметром
недоказуем. А
этот результат есть сама формула $$\phi,$$ так что она истинна
тогда и только тогда, когда недоказуема. Значит, наше исчисление
либо позволяет доказать ложную формулу $$\phi$$ (если $$\phi$$ ложна;
в таком случае его называют неадекватным), либо не
позволяет доказать
Заметим, что оба этих доказательства напоминают как построение неподвижной точки, так и классический парадокс лжеца:
$$\fbox{\hbox{\textsc{утверждение в рамке ложно}}}$$
Более тонкий анализ позволяет установить, что для любой
достаточно богатой формальной системы (скажем, для формальной
арифметики или теории множеств) множество доказуемых формул
(теорем) и множество опровержимых формул (отрицания которых
являются теоремам) являются перечислимыми эффективно
неотделимыми множествами. Это
делается
примерно так. Рассмотрим два произвольных непересекающихся
перечислимых множества A и B и вычислимую функцию f,
которая на всех элементах множества A равна нулю, а на всех
элементах множества B равна 1. Поскольку наша
формальная
система " достаточно богата", в ней (для любого данного
числа n ) можно написать формулу Fn, утверждающую,
что f(n)=0. При этом для $$n\in A$$ формула Fn
будет доказуемой
(протокол работы f на данном числе n, завершающийся
получением ответа 0, можно превратить в доказательство того,
что f(n)=0 ), а при $$n\in B$$ формула Fn
будет опровержимой
(поскольку можно доказать, что f(n)=1 ). Следовательно, пара $$\langle A,B\rangle$$ m -сводится к паре $$\langle $доказуемые
формулы, опровержимые формулы$\rangle$$, и потому последняя пара
является эффективно неотделимой.
Еще одно любопытное утверждение, связывающее теорию алгоритмов с формальными системами, таково. Будем говорить, что две программы доказуемо различны, если можно формально доказать (скажем, в формальной арифметике), что существует вход, на котором они дают разные результаты.
Оказывается, что можно построить программу p с таким странным
свойством: никакая программа q не является доказуемо различной с p. Программу p можно было бы назвать
абсолютно
непознаваемой: ведь формально доказав любое свойство $$\alpha$$
этой программы, можно было бы доказуемо отличить p от
программы q, не обладающей этим свойством. (Мы предполагаем,
что можно предъявить некоторую программу q, про которую можно
формально доказать, что она не обладает свойством $$\alpha.$$ )
Существование непознаваемой программы p легко следует из
теоремы о неподвижной точке. В самом деле, рассмотрим следующий
преобразователь программ: получив на вход программу u, мы
перебираем все программы v и все доказательства в формальной
теории, пока не найдем некоторую программу v, доказуемо
различную с u. Эта программа v и будет результатом
преобразования. Если бы непознаваемой программы не существовало,
то этот преобразователь был бы вычислимой функцией, не имеющей
неподвижной точки.
(Конечно, это рассуждение неявно использует многочисленные свойства формальной теории, которые мы не только не доказали, но даже и не сформулировали. Например, мы неявно использовали, что доказуемо различные программы действительно различны, то есть что выводимые в нашей теории утверждения о различии программ истинны, а также многое другое.)
Можно отметить еще, что " на самом деле" наша непознаваемая программа нигде не определена, поскольку если бы она давала результат на каком-то входе, то была бы доказуемо отлична от программы, дающей другой результат на том же входе. Получается парадокс: мы вроде бы доказали, что наша функция отличается от (скажем) всюду нулевой функции, в то время как непознаваемость как раз и означает невозможность такого доказательства. Разгадка этого парадокса состоит в анализе тех самых неявно сделанных предположений (в частности, о корректности формальной системы: известная " вторая теорема Геделя" говорит, что средствами формальной системы нельзя доказать ее непротиворечивость).
Мы установили, что класс арифметических множеств есть объединение всех классов $$\Sigma _{n}$$ и $$\Pi _{n}$$. Посмотрим подробнее, как связан номер класса с числом перемен кванторов в арифметической формуле.
Чтобы сделать это, надо уточнить, какие формулы мы считаем
бескванторными. Если представлять сложение и умножение
xi + xj = xk и xi
x xj=xk ; при этом уже для записи
формулы a+b+c=d нам понадобится квантор: она
записывается как $$\exists u ((a+b=u) \wedge (u+c=d))$$.
Мы же, как это обычно делается, будем считать сложение и умножение
функциональными символами и тем самым разрешим использовать
произвольные многочлены с целыми коэффициентами в бескванторных
формулах. При этом бескванторными формулами будут логические
комбинации выражений вида P=Q, где P
и Q произвольные
многочлены с целыми коэффициентами. Тогда верна такая теорема:
Теорема 73. Множество $$A \subset N$$ принадлежит
классу $$\Sigma _{n}$$ ( n >= 1 ) тогда и только тогда, когда принадлежность ему выражается
формулой в предваренной нормальной форме, начинающейся с
квантора существования и содержащей n групп одноименных
кванторов.
(Переходя к дополнению, видим, что множество принадлежит классу $$\Pi _{n}$$ тогда и только тогда, когда принадлежность ему
выражается в предваренной нормальной форме с n группами
одноименных
кванторов, начинающейся с квантора всеобщности.)
Мы докажем эту теорему лишь отчасти. Во-первых, если множество
задается формулой в предваренной нормальной форме с n группами
кванторов, то оно принадлежит
классу $$\Sigma _{n}$$ (или $$\Pi _{n}$$ в зависимости от того,
какой
квантор первый) напомним, что k подряд идущих одноименных
кванторов можно заменить на один с помощью вычислимой биекции
между Nk и N.
Более сложно доказать обратное утверждение. Основную трудность
представляет случай n=1. В 1970 году Ю.В.Матиясевич, решая 10-ю проблему Гильберта,
показал, что всякое перечислимое множество есть множество неотрицательных значений многочлена от нескольких
переменных с целыми коэффициентами при натуральных значениях
переменных. А это свойство, очевидно, записывается в виде
формулы с кванторной приставкой из кванторов существования. Тем
самым случай n=1 был разобран.
Если считать результат Матиясевича известным, то доказательство заканчивается, поскольку каждый следующий класс получается из предыдущего навешиванием очередного квантора.
Посмотрим, однако, что можно извлечь из приведенного нами доказательства арифметичности вычислимых функций. Пусть дано произвольное перечислимое множество. Его можно представить как область определения вычислимой функции, все значения которой равны нулю, и применить описанную нами процедуру. Тогда получится формула, начинающаяся с кванторов существования (существуют числа, кодирующие последовательности значений каждой переменной в смысле $$\beta$$ -кодирования по Геделю). Затем идет квантор всеобщности (по номеру шага работы программы: на каждом шаге переход должен соответствовать программе). Затем идет формула, которая была бы бескванторной, если бы не содержала в себе остатков от деления одного выражения на другое. Но их можно устранить, добавив еще кванторы всеобщности: утверждение типа
$$\forall i [\dots остаток\ от\ деления\ P\ на\ Q \dots ],$$где P и Q некоторые выражения, содержащие переменные (из определения \beta -кодирования) можно заменить по определению остатка на
Следовательно, мы можем представить любое перечислимое множество
в виде $$\exists \dots \exists \forall \dots \forall$$ -формулы. Тем
самым любое множество из класса $$\Sigma _{n}$$ можно представить
формулой в предваренной нормальной форме
с n+1 группами кванторов, начинающейся с кванторов
существования, а любое множество из класса $$\Pi _{n}$$ можно
представить формулой с n+1 группами кванторов, начинающейся с
квантора всеобщности.
Мы хотим показать, что график всякой вычислимой функции является арифметическим множеством, то есть выразим формулой арифметики. Для этого удобно перейти от машин Тьюринга к другой модели, которую можно условно назвать машинами с конечным числом регистров.
Программа для такой машины использует конечное число переменных, значениями которых являются натуральные числа. Числа эти могут быть произвольного размера, так что машина реально имеет память неограниченного объема. Программа состоит из нумерованных по порядку команд. Каждая команда имеет один из следующих видов:
a:=0a:=ba:=b+1a:=b-1goto $$\langle$$ номер $$\rangle$$if a=0 then goto $$\langle$$ номер1 $$\rangle$$ else goto $$\langle$$ номер2 $$\rangle$$stopДля тех, кто не сталкивался с командой goto,
поясним, что имеется в виду в команде if: если
значение переменной a равно нулю, то далее исполняется
команда с номером, указанным после then (этот номер
конкретное натуральное число, не превосходящее числа команд в
программе); если a не равно нулю, то дальше выполняется
команда с номером, указанным после else.
Команда goto без условия всегда выполняет переход к
команде с указанным в ней номером.
Поскольку мы считаем, что значения переменных натуральные
(целые неотрицательные) числа, условимся считать
разность 0-1 равной 0 (впрочем, это не так
важно можно
было бы считать это аварией).
Дойдя до команды stop, программа заканчивает работу.
Как и для машин Тьюринга, полезна некоторая практика
программирования. Для тренировки напишем программу сложения
двух чисел. Она помещает в c сумму чисел, которые были в
переменных a и b. Такая программа на паскале имела бы
вид
c:=a;
{инвариант: ответ=сумма текущих значений c и b}
while b<>0 do begin
c:=c+1;
b:=b-1;
end;
Имитируя цикл с помощью операторов перехода, получаем программу для нашей машины:
1 c:=a 2 if b=0 then goto 6 else goto 3 3 c:=c+1 4 b:=b-1 5 goto 2 6 stop
Теперь легко понять, как написать программы для вычитания,
умножения (которое реализуется как цикл с повторным сложением),
деления с остатком (как учил еще Энгельс в забытой ныне книге
" Диалектика природы", деление есть сокращенное вычитание),
возведения в степень, проверки простоты, отыскания n -го
простого числа и т.п. Вообще по сравнению с машинами Тьюринга
этот язык более привычен и потому легче поверить, что на нем
можно запрограммировать все алгоритмы.
Единственное, чего в нем реально не хватает это массивов. Но это легко обойти, поскольку есть числа произвольного
размера и нас не интересует число операций (как это
принято в общей теории алгоритмов). Вместо массива битов мы
можем хранить число, двоичной записью которого он является, а
для массивов чисел воспользоваться, скажем, основной теоремой арифметики и хранить
последовательность $$\langle a,b,c,d,e\rangle$$ как
число 2a3b5c7d11e. При этом операции a[i]:=b
и b:=a[i] заменяются на небольшие программы, которые
содержат переменные a, b, i и еще несколько
переменных. (Частью этих программ является нахождение простого
числа с заданным порядковым номером.)
Легко определить понятие вычислимой (в этой модели) функции.
Пусть есть программа с двумя переменными x и y (и, возможно,
другими).
Поместим в x некоторое число n, а в
остальные переменные поместим нули. Запустим программу. Если она
не остановится, то вычисляемая ей функция в точке n
не определена. Если
остановится, то содержимое переменной y после остановки и
будет значением функции, вычисляемой нашей программой (в точке n ).
Функция называется вычислимой (в этой модели), если существует вычисляющая ее программа.
Как всегда, при определении мы фиксировали различные детали, большинство из которых не являются существенными. Можно было бы добавить некоторые команды (сложение, например) или даже исключить (например, без копирования можно обойтись с помощью небольшой хитрости).
83.
Покажите, что класс вычислимых функций не изменится, если
исключить из определения команду копирования a:=b.
Несколько более удивительно, что число переменных можно ограничить, скажем, сотней но и это не так уж странно, если вспомнить, что мы можем хранить в одной переменной целый массив.
84. Проверьте это.
Построенная
Теорема 65. Всякая функция, вычислимая на машинах Тьюринга, может быть вычислена с помощью программы описанного вида с конечным числом переменных.
Следует уточнить, однако, что мы имеем в виду, так как для
машин Тьюринга исходное данное и результат были двоичными словами,
а для программ натуральными числами. Мы отождествляем те и другие
по естественному правилу, при котором слова $$\Lambda$$ (пустое), 0, 1, 00, 01,... соответствуют
числам 0, 1, 2, 3, 4 ...(чтобы получить из числа слово, прибавим к
нему единицу, переведем в двоичную систему и отбросим единицу в
старшем разряде).
Как и раньше, мы приведем лишь приблизительное описание того, как по машине Тьюринга строится программа с конечным числом переменных, вычисляющая ту же функцию. Прежде всего конфигурации машины Тьюринга надо закодировать числами. Можно сделать это, например, поставив в соответствие каждой конфигурации четыре числа: номер текущего состояния, номер текущего символа (в ячейке, где стоит головка машины), код содержимого ленты слева от головки и код содержимого ленты справа от головки.
Чтобы решить, как удобнее кодировать содержимое ленты слева и
справа от головки, заметим, что машина Тьюринга обращается с
двумя половинами лентами слева и справа от головки как со стеками. (Стеком называется структура данных, напоминающая
стопку листов. В нее можно положить лист наверх, взять верхний
лист, а также проверить, есть ли еще листы.) В самом деле, при
движении головки направо из правого стека берется верхний
элемент, а в левый стек кладется; при движении налево
наоборот. Стеки легко моделировать с помощью чисел: например,
если в стеке хранятся символы 0 и 1, то добавление
нуля
соответствует операции x $$\mapsto$$ 2x, добавление единицы
операции x $$\mapsto$$ 2x+1, верхний элемент есть остаток при
делении на 2, а удаление верхнего элемента есть деление
на 2 (с отбрасыванием остатка). Другими словами, мы воспринимаем
двоичную запись числа как стек, вершина которого находится
справа, у младшего разряда. Точно так же можно использовать n -ичную систему счисления и представить стек с n
возможными
символами в каждой позиции.
Теперь основной цикл машины Тьюринга можно записать как программу, оперирующую с указанными четырьмя числами (символ, состояние, левый стек и правый стек) без особых хитростей. Но несколько вещей все-таки надо иметь в виду.
Во-первых, стеки конечны, а лента бесконечна мы должны договориться, что если стек опустошается, то в него автоматически добавляется символ пробела. Тем самым бесконечный пустой хвост ленты может присутствовать в стеке, как теперь говорят, виртуально.
Во-вторых, напомним, что мы договорились отождествлять двоичные слова (которые подаются на вход машины Тьюринга) и их коды (которые хранятся в переменных нашей программы). Поэтому, получив код входного слова, надо его разобрать по символам и положить эти символы один за другим в стек (основания систем счисления разные, так что просто так переписать это нельзя). Аналогичные проблемы возникают и при превращении выхода (части содержимого правого стека) в соответствующее число, но все они легко преодолимы, и мы не будем вдаваться в подробности.
Верно и обратное утверждение:
Теорема 66. Всякая функция, вычислимая программой с конечным числом переменных, вычислима на машине Тьюринга.
Нам надо моделировать поведение программы с помощью машины Тьюринга. Будем считать, что значения переменных записаны на ленте (в двоичной системе) и разделены специальным разделительным символом. Тогда машина может найти любую переменную, идя от начала ленты и считая разделительные символы, сделать что-то с этой переменной и затем вернуться обратно в начало. (Нет необходимости записывать на ленте номер исполняемой команды, поскольку команд конечное число и машина может помнить номер текущей команды как часть своего состояния.) Операции прибавления и вычитания единицы также легко выполнимы в двоичной записи (если идти справа налево). Надо только иметь в виду, что размер числа может увеличиться, и тогда нужно для него освободить место, сдвинув все символы справа от головки на одну позицию. (При уменьшении нужно сдвинуть влево.) Ясно, что это также легко выполнить с помощью машины Тьюринга.
Если мы записываем числа в двоичной системе, то проблемы с перекодированием при вводе-выводе минимальны (надо лишь дописать нули для значений остальных переменных в начале работы и встать в нужное место ленты в конце).
Сейчас мы докажем, что функции, вычислимые программами с конечным числом переменных, арифметичны, то есть их графики являются арифметическими множествами. В этом разделе мы вновь
предполагаем некоторое знакомство читателя с логическими
обозначениями, и будем рассматривать арифметические формулы, содержащие переменные по натуральным числам,
равенство, константы 0 и 1, операции сложения и
умножения,
логические связки (И, ИЛИ, НЕ) и кванторы " для всех" и "
существует". Формально говоря, мы рассматриваем сигнатуру,
содержащую единственный двуместный 0 и 1 и два двуместных
функциональных символа (сложение и умножение). Говоря об
истинности таких формул, мы имеем в виду их истинность в
стандартной интерпретации, носителем которой является множество N натуральных чисел.
Множество $$A \subset N^{k}$$ называется арифметическим, если существует арифметическая формула $$\alpha$$ с
параметрами x1,...,xk, которая его представляет в следующем смысле: $$\langle n_1,\dots,n_k\rangle\hm\in A$$ тогда и
только тогда, когда формула $$\alpha$$ истинна при значениях
параметров x1=n1,..., xk=nk.
Теорема 67. График любой функции, вычисляемой программой с конечным числом переменных, является арифметическим множеством.
Пусть f : N -> N функция, вычислимая
некоторой программой P с конечным числом
переменных k1,...,kN. Будем считать, что входной переменной
является k1, а выходной k2. Нам нужно написать
формулу с двумя
переменными x, y, которая была бы истинна тогда и
только
тогда, когда y=f(x). Состояние программы с конечным числом
переменных полностью описывается значениями переменных и
номером текущей команды (в процессорах соответствующий регистр часто называют
Step(s1,...,sN,p,s1',...,sN',p'),
с 2N+2 переменными,
которая утверждает, что данная программа P из состояния, где
переменные равны s1,...,sN, а счетчик команд
равен p, за
один шаг переходит в состояние, где переменные
равны s1',...,sn', а счетчик команд равен p'.
(Договоримся,
что значение p'=0 соответствует остановке программы.)
Такая формула является конъюнкцией отдельных утверждений,
соответствующих каждой строке программы. Пусть, например,
строка 7 программы
имеет вид k2:=k3. Тогда в
конъюнкции будет член вида
Для строки с условными переходами типа
3 if k5=0 then goto 17 else goto 33
в формуле будет два конъюнктивных члена (на два случая перехода)
$$((p=3) \wedge (s_{5}=0)) \Rightarrow ((s_{1}'=s_{1}) \wedge \dots \wedge (s_{N}'=s_{N}) \wedge (p'=17))$$и
$$((p=3) \wedge (s_{5} \ne 0)) \Rightarrow ((s_{1}'=s_{1})\wedge \dots \wedge (s_{N}'=s_{N})\wedge (p'=33)).$$Надо еще добавить утверждение о том, что при p=0 работа
прекращается, то есть что переменные на следующем шаге сохраняют
свои значения, и p' остается равным 0.
Таким образом, арифметичность одного шага работы программы доказать несложно. Остается главный вопрос: как записать в виде формулы тот факт, что существует последовательность шагов, которая начинается с исходного состояния, заканчивается в данном и в которой каждый шаг правилен. Трудность в том, что здесь нужно как бы написать переменное число кванторов существования или квантор " существует конечная последовательность натуральных чисел".
Это делается с помощью приема, традиционно называемого $$\beta$$ -функцией Геделя. Вот что имеется в виду.
Лемма 1. Для любого k можно найти сколь угодно большое
целое
положительное число b, при котором первые k членов
последовательности b+1, 2b+1, 3b+1,... попарно взаимно просты.
Доказательство. Любой общий простой делитель двух из этих чисел
будет делителем их разности, то есть
числа lb при 0<l<k ; взяв b
кратным k!, мы гарантируем,
что он будет делителем числа b, но все члены нашей
последовательности взаимно просты с b. Лемма доказана.
Лемма 2. Для любой
последовательности x0,x1,...,xn натуральных
чисел можно найти такие числа a и b, что xi есть остаток от
деления a на b(i+1)+1.
Доказательство. Согласно предыдущей лемме, делители b(i+1)+1 можно
взять взаимно простыми (и сколь угодно большими), остается
воспользоваться " китайской теоремой об остатках". Эта теорема утверждает, что если целые положительные числа d1,...,dk взаимно просты, то при делении целого u на них
может получиться любой заданный набор остатков. В самом деле,
таких наборов будет d1d2... dk (поскольку при делении
на di возможны остатки от 0 до di-1 ).
При делении чисел u=0,1,...,d1d2... dk-1 получаются разные наборы
остатков (если два числа u' и u'' дают одинаковые
остатки,
то их разность делится на все di, что невозможно в силу
взаимной простоты). Поэтому чисел столько же, сколько наборов
остатков, и должны появиться все наборы.
Лемма 2 доказана.
Эта лемма показывает, что последовательность
произвольной длины можно закодировать
тремя числами a, b и n (последнее
число
длина последовательности). Таким образом, условно говоря, можно
заменить " формулу"
(которая на самом деле не является арифметической формулой, так как содержит квантор по конечным последовательностям) на формулу
$$\exists a \exists b \exists n (\forall i \le n)[\dots (остаток\ от\ деления\ a\ на\ b(i+1)+1)\dots ].$$Мы будем записывать остаток от деления a
на b(i+1)+1
как $$\beta (a,b,i)$$ (отсюда и название " бета-функция").
Возвращаясь к нашей программе P с конечным числом
переменных k1,...,kN и вычисляемой ей функции f,
можно записать утверждение вида f(x)=y так: существуют такое
число
шагов n и такие числа a1,b1,a2,b2,...,aN,bN,a,b, что
x, остальные
равны 0 ); $$\beta (a,b,0)$$ есть правильное начальное
значения
счетчика команд, то есть 1 ;i от 0 до n-1 имеет
место$$Step(\beta (a_{1},b_{1},i),\dots ,\beta (a_{N},b_{N},i),\beta (a,b,i),\beta (a_{1},b_{1},i+1),\dots ,\beta (a_{N},b_{N},i+1),\beta (a,b,i+1)),$$
то есть каждый переход соответствует программе;k2
в конце вычисления равно y ) и $$\beta (a,b,n)=0$$
(значение счетчика команд в конце вычисления равно 0,
что по нашей договоренности соответствует остановке машины).Итак, арифметичность вычислимых (на машинах с конечным числом переменных) функций доказана.
Вспоминая теорему 65, мы заключаем, что всякая вычислимая на машине Тьюринга функция арифметична. Принимая тезис Тьюринга, можно сказать, что график любой вычислимой функции является арифметическим множеством.
Поскольку графики вычислимых функций арифметичны, очевидно, разрешимые и перечислимые множества тоже будут арифметическими. Тем самым мы можем оправдать название " арифметическая иерархия" для классов $$\Sigma _{n}$$ и $$\Pi _{n}$$:
Теорема 68. При любом n любое множество из класса $$\Sigma _{n}$$
или $$\Pi _{n}$$
арифметично (есть формула арифметики, выражающая
принадлежность этому множеству).
После того, как мы доказали арифметичность вычислимых функций,
все ясно множества из классов $$\Sigma _{n}$$ и $$\Pi _{n}$$
получаются навешиванием кванторов на
Верно и обратное:
Теорема 69. Всякое арифметическое множество лежит в классе $$\Sigma _{n}$$ или $$\Pi _{n}$$ для некоторого n (и, естественно, для всех
больших n ).
Формулу, задающую арифметическое множество, приведем к
предваренной нормальной форме (вынеся кванторы наружу).
Ясно, что бескванторная часть
задает
Можно и не использовать предваренной нормальной формы, а применить индукцию по длине формулы и сослаться на то, что пересечение, объединение и дополнение, а также проекция не выводят за пределы арифметической иерархии (объединения всех классов $$\Sigma _{n}$$ и $$\Pi _{n}$$ ).
Рассмотрим теперь множество T, элементами которого являются
все истинные арифметические формулы без параметров (точнее, их
номера в какой-то вычислимой нумерации всех формул это
значит, что по формуле можно алгоритмически получить ее номер и
наоборот).
Теорема 70. Любое арифметическое множество m -сводится к
множеству T.
Это утверждение почти очевидно. Пусть A произвольное
арифметическое множество. Пусть $$\alpha (x)$$ формула с одной переменной, которая выражает принадлежность множеству A. Это
означает, что $$\alpha (n)$$ истинно при тех и только
тех n,
которые принадлежат A. Тогда
вычислимая
функция n $$\mapsto$$ номер
формулы, которая является результатом подстановки
константы n в $$\alpha (x))$$ m -сводит A к T.
Теорема 71. Множество T не арифметично.
После проведенной нами подготовки это утверждение очевидно: если
бы T было арифметическим, то оно лежало бы в некотором
конкретном классе $$\Sigma _{n}$$. Поскольку всякое арифметическое
множество сводится к T, то по
теореме 53 все
арифметические
множества лежали бы в этом классе. Но мы знаем, что множества из
более высоких классов иерархии тоже арифметичны, но в $$\Sigma _{n}$$
не лежат.
Эта теорема называется теоремой Тарского. Ее можно прочесть так: множество арифметических истин не арифметично. Или: понятие арифметической истины невыразимо в арифметике.
Теорема 72. Множество T арифметических истин неперечислимо.
В самом деле, любое перечислимое множество арифметично.
Это утверждение называется теоремой Геделя о неполноте. Его можно переформулировать так: всякое исчисление, порождающее формулы арифметики (е алгоритм, перечисляющий некоторое множество таких формул) либо неадекватно (порождает некоторую ложную формулу), либо неполно (не порождает некоторой истинной формулы).
85.
Покажите, что для любого N множество всех истинных замкнутых
арифметических формул, содержащих не более N кванторов,
арифметично.
86. Сформулируйте и докажите аналогичное утверждения для формул ограниченной кванторной глубины (число вложенных кванторов) и для формул с ограниченным числом перемен кванторов в предваренной нормальной форме.
В нашем изложении теоремы Тарского и Геделя получились как простые следствия определений и фактов, связанных с теорией алгоритмов. С одной стороны, это позволяет лучше понять место этих теорем в общем контексте математической логики и теории алгоритмов. С другой стороны, возникает естественное желание развернуть цепочку и получить более прямые доказательства. Таковые мы сейчас и приведем.
Начиная доказывать теорему Тарского, предположим, что множество
номеров всех истинных арифметических формул (без параметров)
арифметично. Пусть T это множество, а $$\tau (x)$$
соответствующая формула. Перенумеруем также все формулы с одним
параметром x ; пусть Fn(x) формула, имеющая
номер n в
этой нумерации. Рассмотрим формулу с единственным
параметром x, утверждающую, что результат подстановки
константы x в x -ую формулу с параметром ложен. Эту формулу можно написать
так:
где Subst(p,q,r) формула с тремя параметрами, выражающая
такое свойство: " p есть номер (в нумерации всех формул без
параметров) той формулы, которая получится, если в q -ю формулу
с одним параметром подставить константу r вместо этого
параметра". Записанное в кавычках свойство описывает график
некоторой вычислимой функции (соответствующей простым
синтаксическим
Итак, мы написали некоторую формулу с единственным
параметром x.
Пусть она имеет некоторый номер N. Подставим этот
номер N
вместо ее параметра. Получится некоторая формула без параметров.
Из построения видно, что эта формула истинна тогда и только тогда,
когда результат подстановки числа N в формулу
номер N (то есть
сама эта формула!) ложен.
Полученное противоречие завершает прямое доказательство теоремы Тарского. Мы видим, что нам потребовалась выразимость в арифметике не любых вычислимых функций, а одной вполне конкретной. При достаточном терпении соответствующую формулу можно-таки написать, и тем самым доказательство станет совсем " осязаемым".
Теперь изложим в том же стиле доказательство теоремы Геделя.
Как мы уже говорили, исчисление это механизм
(алгоритм), который позволяет порождать некоторые формулы языка
арифметики (для простоты будем считать, что порождаются только
формулы без параметров). Таким образом, возникает некоторое
перечислимое множество, которое обычно задают как проекцию
x и y, которое
гласит, что x есть доказательство формулы y. Перенумеровав все
доказательства и формулы и выразив указанные разрешимые свойства
в языке арифметики, мы приходим к формуле , которая истинна, когда x есть номер
доказательства формулы с номером y.
Теперь напишем формулу с одним параметром x, которая говорит,
что результат подстановки числа x вместо параметра в x -ую
формулу с одним параметром не имеет доказательства:
Эта формула имеет единственный параметр ( x ); пусть ее номер в
нумерации таких формул равен N. Подставим N вместо
параметра. Получится формула без параметров $$\phi.$$ По
построению формула $$\phi$$ истинна, когда результат
подстановки N в N -ю формулу с одним параметром
недоказуем. А
этот результат есть сама формула $$\phi,$$ так что она истинна
тогда и только тогда, когда недоказуема. Значит, наше исчисление
либо позволяет доказать ложную формулу $$\phi$$ (если $$\phi$$ ложна;
в таком случае его называют неадекватным), либо не
позволяет доказать
Заметим, что оба этих доказательства напоминают как построение неподвижной точки, так и классический парадокс лжеца:
$$\fbox{\hbox{\textsc{утверждение в рамке ложно}}}$$
Более тонкий анализ позволяет установить, что для любой
достаточно богатой формальной системы (скажем, для формальной
арифметики или теории множеств) множество доказуемых формул
(теорем) и множество опровержимых формул (отрицания которых
являются теоремам) являются перечислимыми эффективно
неотделимыми множествами. Это
делается
примерно так. Рассмотрим два произвольных непересекающихся
перечислимых множества A и B и вычислимую функцию f,
которая на всех элементах множества A равна нулю, а на всех
элементах множества B равна 1. Поскольку наша
формальная
система " достаточно богата", в ней (для любого данного
числа n ) можно написать формулу Fn, утверждающую,
что f(n)=0. При этом для $$n\in A$$ формула Fn
будет доказуемой
(протокол работы f на данном числе n, завершающийся
получением ответа 0, можно превратить в доказательство того,
что f(n)=0 ), а при $$n\in B$$ формула Fn
будет опровержимой
(поскольку можно доказать, что f(n)=1 ). Следовательно, пара $$\langle A,B\rangle$$ m -сводится к паре $$\langle $доказуемые
формулы, опровержимые формулы$\rangle$$, и потому последняя пара
является эффективно неотделимой.
Еще одно любопытное утверждение, связывающее теорию алгоритмов с формальными системами, таково. Будем говорить, что две программы доказуемо различны, если можно формально доказать (скажем, в формальной арифметике), что существует вход, на котором они дают разные результаты.
Оказывается, что можно построить программу p с таким странным
свойством: никакая программа q не является доказуемо различной с p. Программу p можно было бы назвать
абсолютно
непознаваемой: ведь формально доказав любое свойство $$\alpha$$
этой программы, можно было бы доказуемо отличить p от
программы q, не обладающей этим свойством. (Мы предполагаем,
что можно предъявить некоторую программу q, про которую можно
формально доказать, что она не обладает свойством $$\alpha.$$ )
Существование непознаваемой программы p легко следует из
теоремы о неподвижной точке. В самом деле, рассмотрим следующий
преобразователь программ: получив на вход программу u, мы
перебираем все программы v и все доказательства в формальной
теории, пока не найдем некоторую программу v, доказуемо
различную с u. Эта программа v и будет результатом
преобразования. Если бы непознаваемой программы не существовало,
то этот преобразователь был бы вычислимой функцией, не имеющей
неподвижной точки.
(Конечно, это рассуждение неявно использует многочисленные свойства формальной теории, которые мы не только не доказали, но даже и не сформулировали. Например, мы неявно использовали, что доказуемо различные программы действительно различны, то есть что выводимые в нашей теории утверждения о различии программ истинны, а также многое другое.)
Можно отметить еще, что " на самом деле" наша непознаваемая программа нигде не определена, поскольку если бы она давала результат на каком-то входе, то была бы доказуемо отлична от программы, дающей другой результат на том же входе. Получается парадокс: мы вроде бы доказали, что наша функция отличается от (скажем) всюду нулевой функции, в то время как непознаваемость как раз и означает невозможность такого доказательства. Разгадка этого парадокса состоит в анализе тех самых неявно сделанных предположений (в частности, о корректности формальной системы: известная " вторая теорема Геделя" говорит, что средствами формальной системы нельзя доказать ее непротиворечивость).
Мы установили, что класс арифметических множеств есть объединение всех классов $$\Sigma _{n}$$ и $$\Pi _{n}$$. Посмотрим подробнее, как связан номер класса с числом перемен кванторов в арифметической формуле.
Чтобы сделать это, надо уточнить, какие формулы мы считаем
бескванторными. Если представлять сложение и умножение
xi + xj = xk и xi
x xj=xk ; при этом уже для записи
формулы a+b+c=d нам понадобится квантор: она
записывается как $$\exists u ((a+b=u) \wedge (u+c=d))$$.
Мы же, как это обычно делается, будем считать сложение и умножение
функциональными символами и тем самым разрешим использовать
произвольные многочлены с целыми коэффициентами в бескванторных
формулах. При этом бескванторными формулами будут логические
комбинации выражений вида P=Q, где P
и Q произвольные
многочлены с целыми коэффициентами. Тогда верна такая теорема:
Теорема 73. Множество $$A \subset N$$ принадлежит
классу $$\Sigma _{n}$$ ( n >= 1 ) тогда и только тогда, когда принадлежность ему выражается
формулой в предваренной нормальной форме, начинающейся с
квантора существования и содержащей n групп одноименных
кванторов.
(Переходя к дополнению, видим, что множество принадлежит классу $$\Pi _{n}$$ тогда и только тогда, когда принадлежность ему
выражается в предваренной нормальной форме с n группами
одноименных
кванторов, начинающейся с квантора всеобщности.)
Мы докажем эту теорему лишь отчасти. Во-первых, если множество
задается формулой в предваренной нормальной форме с n группами
кванторов, то оно принадлежит
классу $$\Sigma _{n}$$ (или $$\Pi _{n}$$ в зависимости от того,
какой
квантор первый) напомним, что k подряд идущих одноименных
кванторов можно заменить на один с помощью вычислимой биекции
между Nk и N.
Более сложно доказать обратное утверждение. Основную трудность
представляет случай n=1. В 1970 году Ю.В.Матиясевич, решая 10-ю проблему Гильберта,
показал, что всякое перечислимое множество есть множество неотрицательных значений многочлена от нескольких
переменных с целыми коэффициентами при натуральных значениях
переменных. А это свойство, очевидно, записывается в виде
формулы с кванторной приставкой из кванторов существования. Тем
самым случай n=1 был разобран.
Если считать результат Матиясевича известным, то доказательство заканчивается, поскольку каждый следующий класс получается из предыдущего навешиванием очередного квантора.
Посмотрим, однако, что можно извлечь из приведенного нами доказательства арифметичности вычислимых функций. Пусть дано произвольное перечислимое множество. Его можно представить как область определения вычислимой функции, все значения которой равны нулю, и применить описанную нами процедуру. Тогда получится формула, начинающаяся с кванторов существования (существуют числа, кодирующие последовательности значений каждой переменной в смысле $$\beta$$ -кодирования по Геделю). Затем идет квантор всеобщности (по номеру шага работы программы: на каждом шаге переход должен соответствовать программе). Затем идет формула, которая была бы бескванторной, если бы не содержала в себе остатков от деления одного выражения на другое. Но их можно устранить, добавив еще кванторы всеобщности: утверждение типа
$$\forall i [\dots остаток\ от\ деления\ P\ на\ Q \dots ],$$где P и Q некоторые выражения, содержащие переменные (из определения \beta -кодирования) можно заменить по определению остатка на
Следовательно, мы можем представить любое перечислимое множество
в виде $$\exists \dots \exists \forall \dots \forall$$ -формулы. Тем
самым любое множество из класса $$\Sigma _{n}$$ можно представить
формулой в предваренной нормальной форме
с n+1 группами кванторов, начинающейся с кванторов
существования, а любое множество из класса $$\Pi _{n}$$ можно
представить формулой с n+1 группами кванторов, начинающейся с
квантора всеобщности.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.