Опубликован: 16.03.2007 | Уровень: профессионал | Доступ: платный
Лекция 7:

Вычисления с оракулом

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Аннотация: Посвящена проблеме сводимости по Тьюрингу (Т – сводимости) и относительной вычислимости (вычислимости относительно всюду определенной функции), релятивизации теории вычислимых функции, теореме Мучника-Фридберга о существовании несравнимых по Тьюрингу перечислимых множеств.

Машины с оракулом

Если множество B m -сводится к разрешимому множеству A, то и B разрешимо. Более того, если даже A и неразрешимо, но у нас есть доступ к "оракулу" для A, который отвечает на вопросы о принадлежности чисел множеству A, то мы можем с его помощью отвечать на вопросы о принадлежности чисел множеству B. В самом деле, если f сводящая функция и если мы хотим узнать, принадлежит ли некоторое число x множеству B, достаточно спросить у оракула, принадлежит ли f(x) множеству A.

Легко видеть, что m -сводимость использует возможности оракула довольно ограниченным образом: во-первых, оракулу задается только один вопрос, во-вторых, ответ на этот вопрос и считается ответом на исходный вопрос о принадлежности числа x множеству B. Вот пример, не укладывающийся в такую схему: имея оракул для множества A, мы можем отвечать на вопросы о принадлежности чисел множеству B=N \ A. Здесь вопрос по-прежнему один, но ответ на него заменяется на противоположный. Другой пример: имея оракул для множества A, можно отвечать на вопросы о принадлежности пары натуральных чисел множеству B=A x A. (Здесь оракулу надо задать уже два вопроса.)

Поэтому естественно желание отказаться от этих ограничений и дать общее определение сводимости множества B к множеству A. Наиболее общее и естественное определение таково: B сводится к A, если существует алгоритм, который разрешает множество B при условии, что ему предоставлен доступ к оракулу, отвечающему на вопросы про множество A. В более программистских терминах: есть алгоритм, содержащий вызовы внешней функции a(x:integer):boolean (не описанной внутри алгоритма); этот алгоритм разрешает множество B, если вызовы a(x) возвращают правильные ответы про множество A.

Этот вид сводимости называется сводимостью по Тьюрингу, или T -сводимостью. Обозначение: B <=T A означает, что B сводится по Тьюрингу к A. Вот несколько простых фактов про T -сводимость:

Теорема 43. (а) Если B <=m A, то B <=T A. (б) A <=T N \ A при любом A. (в) Если A <=T B и B <=T C, то A <=T C. (г) Если A <=T B и B разрешимо, то A разрешимо.

Все эти утверждения почти очевидны поясним, например, утверждение (в). Пусть у нас есть алгоритм для A, включающий вызовы внешней разрешающей процедуры для B, а также алгоритм для B, включающий вызовы внешней процедуры для C. Тогда можно заменить вызовы внешней B -процедуры на этот второй алгоритм и получится разрешающий алгоритм для A, использующий вызовы внешней процедуры для C.

Заметим, что (в отличие от m -сводимости) неперечислимое множество вполне может T -сводиться к перечислимому. Например, дополнение перечислимого неразрешимого множества K сводится к самому множеству K.

Можно говорить не только о сводимости к множеству A, но и вообще об алгоритмах, имеющих доступ к оракулу для множества A. Пусть такой алгоритм вычисляет некоторую функцию f. Это означает, напомним, что если f(x) определено, то на входе x алгоритм останавливается и дает ответ f(x), а если f(x) не определено, то не останавливается. (Предполагается, естественно, что оракул " не зависает" и выдает ответы, притом правильные, на все заданные ему вопросы.) В этом случае говорят, что (частичная) функция f вычислима относительно множества A.

В нашем определении сводимости вызываемая внешняя функция принимала только два значения (" да" и " нет"). Такое ограничение вовсе не обязательно. Пусть \alpha  : N \to  N произвольная всюду определенная функция. Тогда можно говорить о функциях, вычислимых относительно \alpha ; вычисляющие их алгоритмы включают в себя вызовы функции \alpha. Однако это обобщение не является существенным:

Теорема 44. Частичная функция f вычислима относительно всюду определенной функции \alpha тогда и только тогда, когда она вычислима относительно множества, являющегося графиком функции \alpha, то есть относительно множества \{\langle n, \alpha(n)\rangle\mid n\hm\in\bb N\}.

В самом деле, если мы можем вызывать функцию \alpha, то можем и отвечать на вопросы о принадлежности произвольной пары графику функции \alpha. Напротив, если мы можем разрешать график \alpha, то можем найти \alpha (x) для данного x, задавая по очереди вопросы о принадлежности графику пар \langle x,0\rangle,
\langle x,1\rangle,\dots, пока не получим положительный ответ.

Определяя вычислимость относительно функции \alpha, мы предполагали, что \alpha всюду определена. Это ограничение принципиально: для не всюду определенных функций механизм обращения к ним (как к внешним процедурам) требует уточнений. Допустим, мы вызвали \alpha (x), а оказалось, что функция \alpha не определена на x. Означает ли это, что алгоритм " зависает" и уже не может выдать результат? Или мы можем параллельно развернуть какие-то вычисления и в каких-то случаях выдать результат, не дожидаясь ответа от \alpha (x)? Можем ли мы параллельно запросить несколько значений функции \alpha? Скажем, является ли функция f(x), заданная формулой

f(x)=  \left\{
          \begin{aligned}
             &0, \text{ если $\alpha(2x)$ или $\alpha(2x+1)$ определено,}\\
             &\text{не определено в противном случае}
          \end{aligned}
       \right.

вычислимой относительно \alpha? Короче говоря, в отличие от случая всюду определенных функций, тут есть разные (и притом не эквивалентные) варианты определений, и всегда надо уточнять, какое именно понятие имеется в виду. Поэтому мы, говоря о вычислимости относительно некоторой функции \alpha, предполагаем, что функция \alpha всюду определена.

  59. Пусть есть два различных множества X и Y. Будем рассматривать программы, имеющие доступ к двум оракулам для X и для Y, и функции, которые можно вычислить с помощью таких программ. Покажите, что это определение не дает ничего существенно нового, указав такое множество Z, что X - Y -вычислимость совпадает с Z -вычислимостью.

Эквивалентное описание

Сейчас мы дадим эквивалентное определение вычислимости функции относительно \alpha, не апеллирующее к программам с вызовом оракула.

Мы называли образцом функцию с натуральными аргументами и значениями, определенную на конечном подмножестве натурального ряда. Такой образец задается списком пар \langle\text{аргумент},\text{значение}\rangle ; образцы можно вычислимо пронумеровать, после чего не различать образец и его номер и говорить о разрешимом множестве образцов, перечислимом множестве образцов и т.д.

Два образца называются совместными, если объединение их графиков есть по-прежнему график функции, то есть если нет такой точки, в которой оба они были бы определены и принимали разные значения.

Пусть имеется множество M троек вида \langle x,y,t\rangle, где x и y натуральные числа, а t образец. Будем говорить, что две тройки \langle x_1, y_1, t_1\rangle и \langle x_2, y_2, t_2\rangle противоречат друг другу, если x1=x2, y_{1} \ne  y_{2}, а образцы t1 и t2 совместны. Множество M будем называть корректным, если в нем нет противоречащих друг другу троек.

Пусть M корректное множество, а \alpha некоторая функция. Отберем в M все тройки вида \langle x,y,t\rangle, для которых t является частью \alpha (график t является подмножеством графика \alpha ). Входящие в них образцы совместны, поэтому (в силу корректности) среди отобранных троек нет двух, у которых первые члены равны, а вторые нет. Значит, отбросив третьи компоненты в отобранных тройках, мы получим график некоторой функции (вообще говоря, частичной). Будем обозначать эту функцию M[\alpha ].

Теорема 45. Частичная функция f : N -> N вычислима относительно всюду определенной функции \alpha  : N \to  N тогда и только тогда, когда существует перечислимое корректное множество троек M, для которого f = M[\alpha ].

Пусть имеется программа p, вычисляющая f и включающая в себя обращения к внешней процедуре \alpha. Будем для всех натуральных n моделировать работу этой программы на входе n по всем путям, то есть предусматривая все возможные значения \alpha (n) для каждого обращения к внешней процедуре. Для каждого n получается дерево вариантов каждому обращению к внешней процедуре соответствует развилка со счетным ветвлением. На некоторых ветвях этого дерева вычисления завершаются и программа выдает ответ. Как только мы обнаруживаем, что на входе x возможен ответ y (на некоторой ветви), мы образуем тройку \langle  x,y,t \rangle, где t образец, содержащий все аргументы и значения функции \alpha, использованные на этой ветви.

Полученное множество троек, которое мы обозначим M, будет перечислимым (описанная процедура позволяет выписывать все его элементы). В этом множестве нет противоречащих друг другу троек. В самом деле, если для одного и того же x в него вошли тройки \langle x, y_1, t_1\rangle и \langle x, y_2, t_2\rangle с y_{1} \ne  y_{2}, то они соответствуют разным путям в дереве вычислений на одном и том же входе x. Эти пути в каком-то месте разошлись, то есть на один и тот же вопрос в них были получены разные ответы. Эти ответы вошли в образцы t1 и t2, и потому эти образцы несовместны. Итак, множество M корректно.

Пусть \alpha всюду определенная функция. Присоединим ее к программе p. После этого программа p вычисляет функцию f. Покажем, что f=M[\alpha ]. В самом деле, пусть f(x)=y, то есть работа программы p на входе x дала ответ y. Эта работа включала в себя несколько вызовов функции \alpha и соответствовала некоторой ветви рассмотренного выше дерева. Пусть t образец, содержащий все заданные при этом вопросы и полученные на них ответы. Тогда t является частью \alpha. Кроме того, тройка \langle x, y, t\rangle входит в множество M. Следовательно, M[\alpha ](x) определено и равно y.

Напротив, если M[\alpha ](x)=y, то существует тройка \langle x,y,t\rangle\hm\in M, для которой t является частью \alpha. Эта тройка соответствует некоторой ветви дерева вычислений. Поскольку t является частью \alpha, присоединение к программе p внешней процедуры \alpha приведет к тому, что вычисления пойдут именно по этому пути, и программа даст ответ y.

Итак, для любой программы p мы построили корректное множество M, которое задает ту же функцию, что и программа p, и первая половина утверждения теоремы доказана.

Чтобы доказать вторую половину, предположим, что имеется корректное множество M, и построим эквивалентную ему программу p. Эта программа будет (после присоединения к ней оракула, вычисляющего \alpha ) вычислять функцию M[\alpha ]. Программа p действует так: получив вход x, она перечисляет множество M и отбирает в нем тройки, первым членом которых является x. Для каждой такой тройки \langle x, y, t\rangle, вызывая внешнюю процедуру (задавая вопросы оракулу) мы выясняем, является ли t частью функции \alpha. Если является, то вычисление заканчивается и выдается ответ y, если нет, перечисление множества M продолжается.

Очевидно, что построенная программа p вычисляет функцию M[\alpha ].

  60. Предположим, что мы провели это построение в обе стороны: сначала по корректному множеству M построили некоторую программу, как это описано во второй половине доказательства, а затем по программе построили некоторое корректное множество M'. Может ли M' отличаться от M?

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Жансерик Амзеев
Жансерик Амзеев
Казахстан, Алматы
Виталий Федоров
Виталий Федоров
Россия, Ярославская область