1 Занятие 1 (для преподавателей)

advertisement
1
Занятие 1 (для преподавателей)
1.1
Грамматики
Пусть заданы два непересекающихся (конечных) алфавита: Σ (основной,
терминалные символы) и Ω (служебный, нетерминальные символы или
грамматические категории). Порождающая грамматика задается четверкой G = hΣ, Ω, Π, Si, где S ∈ Ω — начальный символ, а Π — конечный
набор правил замены вида u → v для некоторых u, v ∈ (Σ ∪ Ω)∗ . Применение правила u → v к слову w сводится к замене одного из вхождений
слова u в w на v (если слово u не входит в w, то правило неприменимо).
Выводом слова w в грамматике G называется такая конечная последовательность слов w0 , w1 , . . . , wn , wi ∈ (Σ ∪ Ω)∗ , для которой w0 = S,
wn = w, а каждое слово wi+1 получается из wi применением одного из
правил грамматики. Вывод слова w называется порождением слова w,
если w ∈ Σ∗ .
Произвольное подмножество множества Σ∗ всех слов в алфавите Σ
называется формальным языком. Множество всех слов, порожденных
грамматикой G, образует формальный язык L(G) ⊆ Σ∗ , порожденный
грамматикой G.
Задачи. Условимся в качестве служебных использовать заглавные буквы, а в качестве терминальных — строчные; S — начальный символ.
1. Отождествим натуральные числа с их унарными записями:
0 = Λ, 1 = |, 2 = ||, . . . . Построить грамматику, порождающую
а) натуральный ряд; б) все слова в алфавите {a, b, c}; с) все двоичные записи натуральных чисел.
а) S →
S → |S
b) S
S
S
S
→
→ aS
→ bS
→ cS
c) S
S
A
A
A
→
→
→
→
→
0
1A
0A
1A
2. Какой язык порождается грамматикой {S → aSb ; S → } ?
Построить грамматику, порождающую все слова в алфавите {a, b},
содержащие одинаковое количество букв a и b.
1
(Достаточно добавить правила перестановки: ab → ba и ba → ab.
Нужны ли оба правила?)
3. Построить грамматику, порождающую все двоичные дроби (конечные, со знаком, с дробной частью и без).
S
S
S
S
→
→
→
→
A →
A → A0
A → A1
0
Z1A
Z0.A1
Z1A.A1
Z →
Z → −
4. Построить грамматику, порождающую всевозможные пары вида
hнатуральное числоi#hего остаток от деления на 2i. Использовать
унарную запись.
S → N #E
N #E → |N #O
N #O → |N #E
N →
E →
O → |
На дом:
5. Построить грамматику, порождающую всевозможные термы, а) составленные из констант a, b и функциональных символов f (x, y)
и g(x) (без переменных); б) добавить счетный набор переменных
x, x|, x||, . . . .
a) S
S
S
S
→
→
→
→
a
b
f (S, S)
g(S)
b)
добавить:
S → xN
N →
N → N|
6. Построить грамматику, порождающую все арифметические выражения, правильно построенные из натуральных чисел с помощью
операций + , * и скобок. Правила опускания скобок не учитывать.
Числа представлять в двоичной записи.
S → N
S → (S + S)
S → (S ∗ S)
N → 0
N → 1A
2
A → 0A
A → 1A
A →
1.2
Алгоритмы Маркова (нормальные алгорифмы)
Программа (ориг. схема) алгоритма Маркова представляет собой конечный линейно упорядоченный набор редукций (правил) двух видов:
u → v (обыкновенное правило) и u → · v (заключительное правило),
где u, v — слова в алфавите Σ. Вычисление начинается с входного слова
P ∈ ∆∗ ⊆ Σ∗ . Применяется первая редукция, редекс которой u входит в
P . Применение редукции состоит в замене самого левого вхождения редекса на контрактум v. Затем те же действия производят с полученным
словом, и т.д. Процесс прерывается в двух случаях: когда применилась
заключительная редукция или когда ни одна из редукций не может быть
применена. В обоих случаях полученное слово считается результатом вычисления.
В следующих задачах требуется построить нормальные алгорифмы,
реализующие указанные преобразования слов. Ниже ξ, η — метапеременные в схемах редукций, обозначающие произвольные буквы указанного алфавита (одна схема представляет блок редукций, порядок которых
несущественен), α, β, γ — фиксированные различные буквы из Σ \ ∆.
1. Приписать заданное слово Q к входному слову а) слева, б) справа.
а)
→· Q
b) αξ → ξα (ξ ∈ ∆)
α →· Q
→ α
2. Отсортировать входное слово P ∈ {0, 1}∗ по возрастанию.
10 → 01
3. Извлечь из входного слова P ∈ {0, 1, #}∗ двоичное слово, расположенное между первым и вторым вхождением разделителя #.
γη
γ
βξ
β
ξα
α
#
→
→·
→
→
→
→
→
γ
(η ∈ {0, 1, #})
ξβ (ξ ∈ {0, 1})
γ
α (ξ ∈ {0, 1})
β
α
3
Преобразование таково:
u#v#w → uαv#w αv#w → βv#w vβw → vγw v.
4. Удвоить входное слово P ∈ {0, 1}. Использовать дополнительные
буквы-двойники — 0̄ и ¯0̄ для 0, а также 1̄ и ¯1̄ для 1:
P → αP P̄ P α P̄¯ P α P P α → P P .
ξ η̄
αξ
ξ¯
ξ̄¯
→
→
→
η̄ξ (ξ, η ∈ {0, 1})
¯
ξξα
(ξ ∈ {0, 1})
ξ̄¯
(ξ ∈ {0, 1})
→ ξ
α →·
→ α
(ξ ∈ {0, 1})
На дом:
5. Ниже натуральные числа представляются словами в унарном алфавите: n̄ = || . . . |. Реализовать сложение и вычисление модуля
| {z }
n раз
разности двух натуральных чисел:
m̄#n̄ |m − n|.
m̄#n̄ (m + n),
6. Преобразовать натуральное число n в пару [n/2] , n mod 2 (числа
— в унарной записи; выбрать произвольный разделитель).
7. Вычислить НОД двух натуральных чисел d = (x, y) с помощью
равенства (x, y) = (y, x − y) для x ≥ y > 0. Предполагаемая реализация использует три дополнительные буквы a, b, c; m = min{x, y},
M = max{x, y}:
. . }c ∗ | . . . | | . . . | ∗ | . . . | . . .
. . a} ∗ b| .{z
. . }b c| .{z
|...|∗|...| a
| .{z
| {z }
| {z } | {z }
| {z } | {z }
x
y
m
M −m
m
4
M −m
m
M −m
|a
|∗|
|∗
b
c
a
∗
→
→
→
→
→
→
→
a|
a∗
∗b
|
|
c
8. Адаптировать алгоритм удвоения из задачи 4 для n-буквенного алфавита (2n + 1 дополнительная буква). Модифицировать его так,
чтобы обойтись лишь тремя дополнительными символами. Доказать, что для программирования любой вычислимой по Маркову
функции типа Σ∗ → Σ∗ достаточно двух дополнительных букв.
9. Обратить входное слово P ∈ {0, 1}.
110 → α110 10α1 → α10α1 α0α1α1 βα0α1α1 011
αα
βα
βξ
β
αξη
→
→
→
→·
→
→
βα
β
ξβ
(ξ ∈ {0, 1})
ηαξ (ξ, η ∈ {0, 1})
α
5
2
Занятие 2 (для преподавателей)
2.1
Вычислимые функции и алгоритмы
Объем понятия «вычислимая функция» — это те функции, которые
можно запрограммировать.
Основной вопрос: какими средствами, какой язык программирования?
Желаемый ответ, который не удается формализовать, — следует допустить использование всех языков программирования, даже тех, которые
пока не придумали.
Наблюдение, которое несколько упрощает дело: все имеющиеся языки
допускают компиляцию в один, очень простой. В качестве такого простого языка можно выбрать, например, ассемблер, машины Тьюринга,
алгоритмы Маркова и др. . “Запас вычислимости” оказывается одним и
тем же! Но эти простые языки очень неудобны для реального программирования.
Выход: создать по возможности детальную (но, по необходимости, грубую и неполную) модель для программ в самом общем смысле — неформальное понятие алгоритма. Использовать эту модель совместно с тезисом Черча-Маркова-Тьюринга-. . . , утверждающим качественную эквивалентность модели формальному понятию программы в фиксированном простом языке программирования.
Неформальное понятие алгоритма как модель программы вычисления функции.
• Алгоритм — это точная инструкция, предназначенная для исполнителя. Исполнение инструкции не требует творческих способностей.
Это и есть процесс вычисления.
• Процесс вычисления начинается с исходного данного. Возможные
исходные данные образуют тип конструктивных объектов. В простом случае это слова в некотором алфавите. Возможны также
пары слов, тройки, и т.д. Натуральные числа обычно отождествляют с их унарными или двоичными записями. Характеристическим свойством типа конструктивных объектов является наличие
взаимно-однозначного вычислимого в обе стороны кодирования натуральными числами (примеры на лекции).
6
• Процесс вычисления — дискретный, состоит из последовательности
шагов. Предполагается элементарность шага: начавшись, шаг обязательно заканчивается (за конечное время). Сам процесс может
длиться вечно только за счет бесконечного числа шагов.
• Результатом каждого шага является вычисление очередного текущего состояния алгоритма, описываемого текущей конфигурацией
— конструктивным объектом (словом), однозначно определяющим
все дальнейшее вычисление (выбор следующего шага, излечение
результата, если шаг последний, и т.п.).
• Последовательность конфигураций доступна извне для параллельной обработки другими алгоритмами. В частности, возможны алгоритмы, прерывающие исходный процесс вычисления после заданного числа шагов или при выполнении некоторого условия на конфигурацию.
• Исходное данное представляет аргумент(ы) функции, результат —
ее значение. Функция может получиться частичной, т.к. на некоторых исходных данных процесс вычисления может никогда не закончиться.
Тезис Черча Каждая вычислимая словарная функция f : ∆∗ → ∆∗
вычислима некоторым нормальным алгоритмом в алфавите Σ ⊇ ∆.
Задачи. Вычислимы ли следующие функции? Обсудить алгоритмы
вычисления.
1. f (n) = πn , где πn есть n-я цифра в десятичном разложении числа
π.
Да. π = 4 − 43 + 45 − 47 + . . . . Для вычисления f (n) нужна оценка
остаточного члена ряда (по модулю меньше первого отброшенного
члена).
2.
f (n) =
1,
0
если πn = 7;
в противном случае.
Да.
7
3.
f (n) =

 1,

0
если в десятичном разложении π
имеется точно n цифр 7, идущих подряд;
в противном случае.
Неизвестно.
4.

 1, если в десятичном разложении π имеется
по крайней мере n цифр 7, идущих подряд;
f (n) =

0 в противном случае.
Да. Функция f совпадает с одной из функций ga (n), равной 1 при
n ≤ a и 0 при n > a, a ∈ N ∪ {∞}. Все они вычислимы. Алгоритм
вычисления f есть, но его никто не знает.
2.2
Элементы алгоритмической теории множеств
Ограничиваемся подмножествами множества Σ∗ всех слов в алфавите Σ
и вычислимыми частичными функциями из Σ∗ в Σ∗ . Натуральные числа
представляются двоичными записями.
На лекции выбраны Σ = {0, 1} и вычислимые в обе стороны биекции
между (Σ∗ )2 и Σ∗ , а также между N и Σ∗ .
Определение. Множество A ⊆ Σ∗ называется разрешимым, если вычислима его характеристическая функция
1, x ∈ A
χA (x) =
.
0, x ∈ Σ∗ \ A
Определение. Множество A ⊆ Σ∗ называется перечислимым, если
(Вариант 1) A есть область значений некоторой вычислимой
функции.
(Вариант 2) A есть область значений некоторой тотальной
вычислимой функции или A = ∅.
(Вариант 3) A есть область определения некоторой вычислимой функции.
На лекции доказана эквивалентность всех трех вариантов определения (см. slides2.pdf, p.11). В то же время соответствующие варианты
представления перечислимых множеств не эквивалентны: в случае 2 просто распознать пустоту множества, а в случаях 1, 3 — нет.
8
Задачи.
5. Проверить разрешимость множеств:
- всех нечетных чисел;
- данного конечного множества слов;
- множества всех обратимых 2 × 2-матриц с коэффициентами из
N . Уточнить постановку задачи a) переходом к трехбуквенному
алфавиту; б) без перехода; в) для n × n-матриц с переменным n.
а) Записывать матрицу одним словом с дополнительной буквой # в качестве разделителя. б) Добавить кодирование 0 7→ 00, 1 7→ 01, # 7→ 10.
в) Аналогично б).
6. Проверить перечислимость множеств:
(а) каждого разрешимого множества;
(б) множества всех пар простых чисел – близнецов;
(в) множества всех чисел, представимых в виде суммы квадратов
двух попарно различных нечетных чисел;
7. Перечислимые множества A и B являются областями значений заданных вычислимых функций f и g. Построить аналогичное представление для множеств A ∪ B, A ∩ B. Обосновать вычислимость
построенных функций.
A ∪ B. Положим h(0v) := f (v), h(1v) := g(v).
A ∩ B. Пусть σ — вычислимая биекция Σ∗ на (Σ∗ )2 , функция undef ()
нигде не определена.
h(v) := let hx, yi = σ(v) in {if f (x) = g(y) then f (x) else undef () } .
8. Множество A и его дополнение Ā перечислимы и являются областями определений заданных вычислимых функций f и g. Описать
алгоритм вычисления характеристической функции множества A.
(Теорема Черча-Поста.)
Запустить оба процесса вычисления f (v) и g(v) параллельно в пошаговом режиме, шаг первого процесса, шаг второго, потом опять шаг первого, и т.д. Один из процессов обязательно закончится успешно. Если это
первый, то результат 1, если второй — результат 0.
9
9. Решить аналог задачи 8 для перечислимых множеств, заданных
областями значений тотальных вычислимых функций f и g.
Воспользуемся вычислимой биекцией ν натурального ряда N на Σ∗ ,
ν(n) = xn . Для вычисления χA (v) надо для n = 0, 1, . . . вычислять значения f (xn ), g(xn ) и сравнивать их с v. Если v совпадет с f (xn ), то
χA (v) := 1; если с g(xn ), то χA (v) := 0.
10. Перечислимое множество A является областью значений заданной
вычислимой функции f . Построить вычислимую функцию g, у которой область определения совпадает с A. Как осуществить обратное преобразование представлений?
Вход v. Пользуясь вычислимой биекцией N на Σ∗ × N последовательно
перебираем всевозможные пары hx, ti ∈ Σ∗ × N . Для каждой из них
моделируем t шагов вычисления f (x). Если за это время значение f (x)
вычислилось и совпало с v, то g(v) := 1.
Обратный переход: {g(v); return v.}
На дом:
11. Пусть тотальная вычислимая функция f монотонна в следующем
смысле: если слово u является собственным началом слова v, то
f (u) — собственное начало слова f (v). Доказать разрешимость области значений функции f .
Для таких функций |f (v)| ≥ |v|, поэтому вычисление характеристической функции χE(f ) (x) сводится к проверке принадлежности x конечному множеству {f (v) | |v| ≤ |x|}.
12. Сформулировать и решить аналог задачи 7 для перечислимых множеств, представленных областями определения вычислимых функций.
A ∪ B. Запустить оба процесса вычисления f (v) и g(v) параллельно в
пошаговом режиме: шаг первого процесса, шаг второго, снова шаг первого, и т.д. Если хотя бы один из них успешно закончился, то остановить
второй и выдать результат 1.
A ∩ B. {f (v); g(v); return 1.}
10
13. Сформулировать и решить аналог задачи 7 для перечислимых множеств, представленных областями значений тотальных вычислимых функций.
A ∪ B. Положим h(0v) := f (v), h(1v) := g(v), h(Λ) := h(0).
A ∩ B. Для этого случая надо дополнительно потребовать непустоту пересечения. Фиксируем некоторое слово c ∈ A ∩ B и заменим в решении
задачи 7 функцию undef () на c.
14. Решить аналог задачи 8 для перечислимых множеств, заданных
областями значений частичных вычислимых функций f и g.
Пусть ν — вычислимая биекция натурального ряда N на Σ∗ , ν(n) = xn .
Алгоритм вычисления χA (v) оперирует с двумя конечными множествами
U и V . Для n = 0, 1, . . . следует сделать n шагов в каждом из вычислений
f (xk ), g(xl ) для всех k, l ≤ n. Все вычисленные за это время слова вида
f (xk ) добавить в U , а вида g(xl ) — в V . Остановить процесс, как только
слово v появится в одном из множеств. Если в U , то положить χA (v) := 1,
иначе χA (v) := 0.
15. Предложить определение перечислимости для подмножеств (Σ∗ )2 .
Доказать, что если график функции — перечислимое подмножество
(Σ∗ )2 , то функция вычислима. (На лекции было доказано обратное
утверждение).
Все варианты определения перечислимости нуждаются в доказательстве несущественности произвола: для областей определения функций —
несущественость выбора типа значений (просто), для областей значений
функций — типа аргументов (чуть сложнее, через биекции между (Σ∗ )2 .
Σ∗ и N ). В любом случае для каждого непустого перечислимого множества R ⊆ (Σ∗ )2 имеется тотальная вычислимая нумерация ν : N → R,
ν(n) = hxn , yn i. Если R есть график функции f , то вычисление f (x)
сводится к поиску пары hxn , yn i с xn = x. Тогда f (x) = yn .
11
3
Занятие 3 (для преподавателей)
3.1
Общее понятие исчисления, «породимые» множества
Исчисление в алфавите Σ задается двумя разрешимыми множествами
(разрешающими алгоритмами) R и F :
• R состоит из пар вида hΓ, vi, где Γ — конечное множество слов в
алфавите Σ, а v — слово в алфавите Σ. Пара соответствует правилу
вывода Γ ` v, а R перечисляет все правила, допустимые для данного исчисления. Случай Γ = ∅ соответствует аксиомам. Заметим,
что в логике вместо строчной записи правила h{v1 , . . . , vn }, vi часто
используют фигуру
v1 , . . . , v n
.
v
• F ⊆ Σ∗ состоит из тех слов, на которых вывод можно закончить
результативно.
Выводом в исчислении называется любая конечная последовательность
слов v0 , . . . , vn , в которой каждый ее член vi получен из предыдущих по
одному из допустимых правил hΓ, vi ∈ R, т.е. Γ ⊆ {vj | j < i} и v = vi .
Вывод v0 , . . . , vn порождает слово v, если vn ∈ F и v = vn . (Если vn 6∈ F ,
то вывод выводит слово vn , но ничего не порождает.)
Исчисление порождает множество (язык), состоящее из всех слов,
порожденных его выводами. Такие множества названы «породимыми»
(на лекции).
Задачи.
1. Представить грамматику в виде исчисления общего вида, т.е. определить алфавит исчисления Σ и множества R, F .
Грамматика задается набором h∆, Ω, Π, Si, где ∆ и Ω — основной и служебный алфавиты, S ∈ Ω — начальный символ, а Π — конечный набор
правил замены вида u → v для некоторых u, v ∈ (∆ ∪ Ω)∗ . Положим
Σ = ∆ ∪ Ω, R = {h∅, Si} ∪ { h{xuy}, xvyi | u → v ∈ Π, x, y ∈ Σ∗ }, F = ∆∗ .
12
2. Представить в формате исчисления определение замкнутых термов
сигнатуры {a, f 2 , g 1 }.
Алфавит Σ состоит из сигнатурных символов, а также скобок и запятой. К множеству R отнесем пару h∅, ai, а также все пары видов
h {x; y}, f (x, y) i и h {x}, g(x) i, где x, y ∈ Σ∗ . Условие завершения тривиально: F = Σ∗ . Более привычная запись правил:
a
x y
x
f (x, y)
g(x)
(x, y ∈ Σ∗ )
3. Дано исчисление, порождающее множество A. Построить вычислимую функцию f , область значения которой совпадает с A.
Пусть Σ — алфавит исчисления, A ⊆ Σ∗ , # 6∈ Σ. Вывод в исчислении
условимся записывать одним словом в алфавите {#} ∪ Σ. Алгоритм вычисления функции f получает на вход произвольное слово v расширенного алфавита и проверяет, является ли оно записью результативного
вывода (детализировать проверку). Если является, то f (v) полагается
равным последнему слову в выводе. В противном случае результат не
определен.
∗
На дом (уточнение лекции 2):
4. Перечислимое множество A представлено областью значений функции f , вычислимой с помощью алгоритма Маркова A без заключительных редукций (без u → ·v). Тогда A «породимо».
Пусть функция f : ∆∗ → ∆∗ вычисляется алгоритмом Маркова A в алфавите Σ ⊇ ∆, причем A не имеет заключительных редукций. Искомое
исчисление в алфавите Σ имеет множество правил
R = {h∅, vi | v ∈ ∆∗ } ∪ { h{u}, vi | A за 1 шаг преобразует u в v}
и условие результативного завершения
F = {v ∈ ∆∗ | ни одну редукцию A нельзя применить к v}.
Множества R и F разрешимы. Завершающиеся вычисления алгоритма
A на входных словах v ∈ ∆∗ соответствуют минимальным результативным выводам исчисления (тем, из которых нельзя выбросить ни одного
13
промежуточного слова). Каждый результативный вывод можно преобразовать в минимальный с тем же последним словом. Тем самым, исчисление допускает в точности те слова, которые принадлежат области
значений функции f .
5. В предыдущей задаче придумать способ избавиться от требования
отсутствия заключительных редукций.
Пусть соответствующая функция f : ∆∗ → ∆∗ вычисляется алгоритмом
Маркова A в алфавите Σ, ограничений на способы остановки алгоритма A нет. Рассмотрим некоторый шаг работы алгоритма A над входным словом. Текущей конфигурацией вычисления (перед шагом) назовем пару, составленную из текущего слова v и редукции (команды) c,
выполненной на предыдущем шаге. Текущую конфигурацию условимся
записывать в виде одного слова через разделитель: v# c. Для начальной
конфигурации c пусто. Пусть v# c ` v1 # c1 означает, что v ∈ Σ∗ , c —
незаключительная редукция алгоритма A или пустое слово и A за один
шаг преобразует слово v в v1 , причем использует при этом редукцию c1 .
Искомое исчисление задается следующим разрешимым набором правил
R:
v# c
(если v ∈ ∆∗ )
(если v# c ` v1 # c1 )
v#
v1 # c1
v# c
(если c — заключительная редукция
или нет редукций, применимых к v)
v
Условие завершения тривиально: Γ = ∆∗ .
3.2
Универсальная функция, примеры отрицательных результатов TA
Фиксируется алфавит Σ ⊃ {0, 1}, достаточный для вычисления алгоритмами Маркова всех вычислимых функций типа {0, 1}∗ → {0, 1}∗ (хватает
двух дополнительных букв, но для удобства можно взять больше). Cхемы таких алгоритмов являются словами в алфавите Σпрог = Σ∪{→, ·, ; }.
Фиксируем побуквенное кодирование всех слов в алфавите Σпрог двоичными словами. Код Code A алгоритма A это двоичный код его схемы.
Универсальный алгоритм (в абстрактном смысле) на вход получает
пару двоичных слов p, v, пытается по p восстановить алгоритм Маркова с кодом p и применить его к слову v. Если это удается и результат
применения — двоичное слово, то оно объявляется результатом работы
14
универсального алгоритма. Во всех остальных случаях результат его работы не определен.
Универсальная вычислимая функция — это частичная функция U (p, v),
вычислимая универсальным алгоритмом. Если алгоритм Маркова A вычисляет функцию типа {0, 1}∗ → {0, 1}∗ , то
U (Code A, v) ' A(v),
v ∈ {0, 1}∗ .
Функцию U можно вычислить алгоритмом Маркова рассматриваемого
класса, если ее аргументы p, v подать на вход алгоритму в виде двоичного
кода пары.
Универсальная в.ф. U задает свой язык программирования, отличный от языка алгоритмов Маркова: каждое двоичное слово p является программой для функции ϕp (v) := U (p, v), а универсальный алгоритм служит средой исполнения таких программ. Язык универсален,
т.е. позволяет запрограммировать любую вычислимую функцию типа
{0, 1}∗ → {0, 1}∗ .
Задачи.
1. а) Сравнить функции f (v) := A(v) и ϕp при p = Code A для произвольного алгоритма Маркова в алфавите Σ. б) Как ведет себя
функция ϕp при p отличном от кодов всех алгоритмов Маркова?
в) Показать, что каждая вычислимая функция f : {0, 1}∗ → {0, 1}∗
имеет бесконечно много программ, ее вычисляющих.
а) Обе функции вычислимы. Функция f — продолжение функции ϕp .
График f содержит «дополнительные» пары (v, f (v)), у которых по
крайней мере одна из компонент содержит буквы, отличные от 0 и 1.
б) Функция ϕp нигде неопределена.
в) В схеме алгоритма Маркова любую команду можно продублировать
любое количество раз. Пустую схему можно заменить на непустую.
2. Пусть f (v) := 1U (v, v), v ∈ {0, 1}∗ . а) Показать, что функцию f
можно представить в виде f = ϕp0 для некоторой программы p0 .
б) Доказать, что f (p0 ) не определено. в) Доказать, что каждое вычислимое продолжение g : {0, 1}∗ → {0, 1}∗ функции f не может
быть определено на собственной программе, поданной в качестве
аргумента. (В частности, у f нет тотальных вычислимых продолжений.)
15
а) Словарная функция f вычислима, ее аргументы и значения — двоичные слова. По тезису Черча, она вычислима некоторым алгоритмом
Маркова в алфавите Σ. Тогда p0 — код этого алгоритма.
б) Допустим, что f (p0 ) определено. Вычислим это значение двумя способами. f (p0 ) = ϕp0 (p0 ) = U (p0 , p0 ). С другой стороны, f (p0 ) = 1U (p0 , p0 ).
Длины различны. Противоречие. (В случае неопределенности противоречия не получается, т.к. все члены в цепочках равенств не определены,
поэтому невозможно сравнить их длины.)
в) Если g вычислима, то g = ϕp для некоторого p. Пусть ϕp продолжает
f , т.е. ϕp (v) = f (v) для тех v, для которых f (v) определено. Допустим,
что ϕp (p) определено. Тогда определено U (p, p) = ϕp (p), а вместе с ним
и f (p) = 1U (p, p) = 1ϕp (p). Равенство между ϕp (p) и f (p) невозможно
ввиду различия их длин. Противоречие.
3. Вывести следствия из предыдущей задачи. а) Область определения функции f из предыдущей задачи перечислима, но не является разрешимым подмножеством {0, 1}∗ , ее дополнение не является
перечислимым. б) Не существует алгоритма, который по паре слов
p, v ∈ {0, 1}∗ выяснял, определено значение ϕp (v) или нет.
а) Область определения K функции f перечислима, т.к. f вычислима.
Если она была бы разрешимой, то f имела бы вычислимое тотальное
продолжение
g(v) := if χK (v) = 1 then f (v) else 0.
Если бы дополнение множества K оказалось перечислимым, то K было
бы разрешимым по теореме Черча-Поста (см. предыдущее занятие), что
невозможно.
б) Если бы такой алгоритм существовал, то его можно было бы применить для распознавания принадлежности множеству K = {p ∈ {0, 1}∗ |
ϕp (p) определено}, что противоречит неразрешимости K.
4. Доказать, что для класса всех тотальных вычислимых функций
типа {0, 1}∗ → {0, 1}∗ не существует универсальной вычислимой
функции, т.е. такой вычислимой функции G(p, v), p, v ∈ {0, 1}∗ , что
среди одноместных функций вида ψp (v) := G(p, v) встречаются все
тотальные вычислимые функции указанного типа и только они.
Функция f (v) := 1G(v, v), v ∈ {0, 1}∗ , вычислима и тотальна, поэтому
имеет представление f = ψp0 для некоторого p0 . Значение f (p0 ) определено, что невозможно (см. выкладки в задаче 2).
16
На дом:
5. Проблема остановки для алгоритмов Маркова. Доказать невозможность алгоритма, который по схеме алгоритма Маркова A в алфавите Σ и слову v ∈ Σ∗ выясняет, закончится вычисление A на входе
v или нет. Доказать существование алгоритма Маркова A0 , для которого частный случай проблемы остановки (при A = A0 ) также
не имеет алгоритмического решения.
Рассмотрим какое-нибудь перечислимое неразрешимое множество D ⊆
{0, 1}∗ . Функция f с областью определения D, принимающая одно значение 1, вычислима некоторым алгоритмом Маркова A0 в алфавите Σ.
Имеем сведение:
v ∈ D ⇔ A0 (v) определено,
v ∈ Σ∗ .
С помощью алгоритма, решающего проблему остановки, можно было бы
вычислять характеристическую функцию множества D, что невозможно.
6. Доказать, что множество T всех схем алгоритмов Маркова в алфавите Σ, которые вычисляют тотальные функции типа {0, 1}∗ →
{0, 1}∗ , не является перечислимым.
Если бы T было перечислимым, то существовала бы вычислимая функция g с областью определения {0, 1}∗ и областью значений T . С ее помощью нетрудно построить вычислимую универсальную функцию для
класса всех тотальных вычислимых функций
G(p, v) := U (Code T (p), v),
что невозможно.
3.3
Добавление: св-во главности универсальной функции и технология сведения
Теорема. (Главность U .) Для каждой вычислимой функции G : (Σ∗ )2 →
Σ∗ существует тотальная вычислимая функция s : Σ∗ → Σ∗ такая, что
U (s(q), v) ' G(q, v)
17
q, v ∈ Σ∗ .
Замечание. Если G построена аналогично U , но с помощью другого,
отличного от алгоритмов Маркова, языка программирования, то функция s играет роль компилятора с этого языка в язык программирования
U . Теорема утверждает, что для каждого языка G такой компилятор
существует. Тем самым, это некоторый вариант формулировки тезиса
Черча. Однако для функций G, вычислимых алгоритмами Маркова, это
обычная теорема.
Набросок доказательства. Основная часть доказательства состоит в
явном построении схемы алгоритма Маркова Aq , который вычисляет
функцию f (v) := G(q, v) для фиксированного q (и G, заданного схемой алгоритма Маркова). Оказывается, что слово q имеет единственное
вхождение в схему Aq , а остальная часть схемы от q не зависит. Поэтому
цепочка отображений q 7→ Aq 7→ CodeAq реализуется простыми синтаксическими преобразованиями, обеспечивающими тотальность и вычислимость функции s(q) := CodeAq . Она — искомая:
U (s(q), v) ' U (CodeAq , v) ' Aq (v) ' f (v) ' G(q, v).
Задачи.
7. Доказать невозможность алгоритма, который по схеме алгоритма
Маркова A проверяет, закончится вычисление A на фиксированном
входе v0 = Λ или нет. (Выбор v0 несущественен.)
Рассмотрим какое-нибудь перечислимое неразрешимое множество D ⊆
{0, 1}∗ , представленное в виде области определения вычислимой функции f . Функция
Λ,
если q ∈ D,
G(q, v) :=
не определено, если q 6∈ D
вычислима алгоритмом {f (q); return Λ; }. По теореме, существует тотальная вычислимая функция s, для которой при всех q ∈ {0, 1}∗ выполнено:
q ∈ D ⇒ ϕs(q) (v) = Λ при всех v ∈ {0, 1}∗ ,
q 6∈ D ⇒ ϕs(q) нигде не определена.
Допустим, что указанный в условии задачи алгоритм существует. Тогда
распознать принадлежность произвольного слова q множеству D можно
следующим образом. По q надо вычислить s(q) и восстановить схему
18
алгоритма Маркова A, для которого Code A = s(q). Если восстановить
схему не удается, то q 6∈ D. Если схема A восстановлена, то достаточно
выяснить, закончится вычисление A на входе v0 или нет. В первом случае
q ∈ D, во втором — q 6∈ D.
8. Доказать невозможность алгоритма, который по схемам двух алгоритмов Маркова A и B проверяет, верно ли, что они вычисляют
одну и ту же функцию Σ∗ → Σ∗ , или нет.
Достаточно установить алгоритмическую неразрешимость частного случая указанной задачи для фиксированного алгоритма B, вычисляющего
функцию-константу g(v) = Λ при всех v ∈ {0, 1}∗ . Для этого можно
воспользоваться сведением, построенным для задачи 7.
9. Доказать невозможность алгоритма, который по схеме алгоритма
Маркова A проверяет, верно ли, что вычисление A на фиксированном входе v0 = Λ закончится с фиксированным результатом w0 = Λ,
или нет. (Выбор v0 , w0 несущественен.)
Достаточно воспользоваться сведением из задачи 7.
10. Доказать, что множество схем алгоритмов Маркова в алфавите Σ,
никогда не заканчивающих работу на входном слове v0 = Λ, не
является перечислимым.
Это множество неразрешимо (задача 7). Его дополнение до Σ∗ перечислимо (проверить), поэтому само оно перечислимым быть не может по
теореме Черча-Поста.
19
Download