
- •Дополнение
- •Наивная теория алгоритмов
- •4.4. Наивная теория алгоритмов
- •4.4.1. Вычислимые функции
- •4.4.2. Перечислимые множества
- •4.4.3. Разрешимые множества
- •4.4.4. Протокол выполнения алгоритма
- •4.4.5. Алгоритмы и программы
- •4.4.6. Невычислимые функции и неразрешимые множества
- •4.4.7. Истинность и доказуемость
- •4.4.8. Множество истин арифметики
4.4.6. Невычислимые функции и неразрешимые множества
Рассмотрим более подробно важное понятие универсальной функции, или универсального алгоритма. Рассмотрим произвольный класс F вычислимых функций f: XY. Функция U: FXY называется универсальной для класса F, если f x U(f, x) f(x). Другими словами, там, где исходная функция определена, универсальная функция вычисляет значение по функции и по аргументу, а там где функция не определена, универсальная функция также не определена.
Примеры. 1. Алгоритм 3.4. в п. 3.6.3 является универсальным алгоритмом в классе булевых функций n переменных.
2. Алгоритм 3.1. в п. 3.2.1 является универсальным алгоритмом в классе функций, заданных формулами в базисе F.
3. Интерпретатор I является универсальным алгоритмом в классе программ.
Множество программ, представляющих вычислимые функции перечислимо и их можно перенумеровать. Но тогда интуитивно ясно, что возможно построить программу (например, в форме «очень длинного» оператора switch), которая по номеру функции и значению аргумента будет вычислять значение этой функции. Таким образом, из аксиомы программы имеем
Следствие 1. Каков бы ни был класс вычислимых функций T1T2 существует вычислимая функция U: T1T2, универсальная в этом классе.
В данном разделе наибольший интерес представляют вычислимые функции с натуральными аргументами и результатами.
Следствие 2. Существует вычислимая функция U: , универсальная в классе вычислимых функций .
Доказательство. Положим T1:= и T2:= и по следствию 1. чтд
Следствие 3. Существует такая вычислимая функция , что никакая вычислимая функция не может отличаться от нее всюду.
Доказательство. Рассмотрим «диагональную» функцию d(n) := U(n, n). Пусть fn — функция, имеющая номер n. Если fn(n) определено, то fn(n) = d(n) и fn(n) d(n), если же fn(n) не определено, то и d(n) не определено, и все равно fn(n) d(n). чтд
Предыдущее доказательство кажется парадоксом: действительно, если у нас есть функция, которая претендует на то, что, неформально говоря, её график «пересекается» с графиками всех других функций, то, казалось бы, возьмем функцию, график которой «параллелен» графику «претендента», и получится контрпример к следствию 3. Но никакого парадокса и контрпримера нет! Дело в том, что мы рассматриваем все вычислимые функции, в том числе и частичные, и «пересечение» получается там, где функции не определены.
Но если вычислимая функция определена частично, то можно доопределить ее произвольным образом, назначив какие-то значения функции для тех значений аргументов, где функция не определена. Такое «доопределение» называется всюду определенным продолжением.
Следствие 4. Существует вычислимая функция , не имеющая всюду определённого вычислимого продолжения.
Доказательство. Рассмотрим «параллельную» функцию d1(n) := d(n)+1. Эта функция определена частично, потому что функция d(n) определена частично. Рассмотрим тогда D1(n) — всюду определенное продолжение d1(n). Эта функция всюду определена и всюду отличается от d(n). По следствию 3 заключаем, что функция D1(n) невычислима. чтд
Таким образом, построена всюду определенная, но невычислимая функция.
Следствие 5. Существует неразрешимое перечислимое подмножество натурального ряда.
Доказательство. Достаточно рассмотреть N:=Dom d1(n). N перечислимо по лемме 5. Допустим, что N разрешимо алгоритмом N. Тогда построим функцию d2(x) := if N(x) then d1(x) else 1 end if. Функция d2(x) оказывается всюду определенным вычислимым продолжением функции d1(n), что невозможно в силу следствия 4, а значит алгоритма N не существует. чтд
Таким образом, построено перечислимое, но неразрешимое множество.
Следствие 6. Существует перечислимое подмножество натурального ряда с неперечислимым дополнением.
Доказательство. Рассмотрим построенное перечислимое неразрешимое множество N. Его дополнение \N неперечислимо, в противном случае N было бы разрешимо по лемме 3. чтд
Таким образом, построено перечислимое множество с неперечислимым дополнением.
К данному моменту накоплен достаточный запас фактов, чтобы показать применимость и полезность наивной теории алгоритмов в форме доказательства первой теоремы Гёделя о неполноте.