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