Вычисления с оракулом
0'-вычисления
В этом разделе мы рассмотрим вычислимость относительно m -полного перечислимого множества. Любые два таких множества m -сводятся друг к другу, и тем более T -сводятся друг к другу. Поэтому если какая-то функция вычислима относительно одного из них, то она вычислима и относительно другого. Такие функции называют 0' -вычислимыми.
Вспоминая, что множество пар является одним из m -полных перечислимых множеств, можно сказать, что 0' -вычислимые функции вычисляются машинами, которым придан специальный оракул, решающий проблему остановки: этому оракулу посылают программу и вход, и он отвечает, останавливается ли эта программа на этом входе или не останавливается. (При этом посылаемая на экспертизу программа самая обычная, без обращений к оракулу.)
Ясно, что любое перечислимое множество является 0' -разрешимым, так как сводится к m -полному перечислимому множеству. (Обратное, очевидно, неверно дополнение к перечислимому неразрешимому множеству также 0' -разрешимо, но не перечислимо.)
Имеется следующее простое описание 0' -вычислимых функций:
Теорема 48. (а) Пусть T всюду определенная вычислимая функция двух натуральных аргументов. Перейдем к пределу по второму аргументу, рассмотрев функцию
(Эта функция уже не обязана быть всюду определенной, так как при некоторых x указанный предел может не существовать.) Функция t будет 0' -вычислимой. (б) Всякая 0' -вычислимая функция t может быть получена указанным образом из некоторой вычислимой всюду определенной функции T.
(a) Пусть T вычислимая всюду определенная функция двух аргументов. Назовем пару стабильной, если T(x,n)=T(x,m) для данного x и для всех m>n. Заметим, что множество нестабильных пар перечислимо (найдя две пары и с n<m и , мы включаем пару в перечисление всех нестабильных пар). Поэтому множество нестабильных пар 0' -разрешимо. Другими словами, 0' -алгоритм для любой пары может проверить, стабильна ли она.
Рассмотрим теперь следующий 0' -алгоритм вычисления предельной функции t. Получив вход x, мы рассматриваем по очереди пары . и для каждой из них проверяем, является ли она стабильной. Как только стабильная пара будет обнаружена, значение T(x,n) выдается в качестве результата. Очевидно, описанный 0' -алгоритм вычисляет функцию t.
(б) Докажем теперь обратное утверждение. Пусть t частичная 0' -вычислимая функция одного аргумента. Нам надо построить вычислимую (в обычном смысле) всюду определенную функцию двух аргументов T, для которой
при всех x (и обе части этого равенства определены одновременно). Прежде всего мы сделаем себе небольшое послабление, разрешив функции T принимать также и некоторое специальное значение, которое мы будем обозначать звездочкой. При этом
означает, что при всех достаточно больших n значение T(x,n) равно a (и, в частности, не равно ).Такое послабление на самом деле несущественно: если в последовательности, в которой есть звездочки, каждую из них заменить на два различных подряд идущих члена (все равно каких), то последовательность будет иметь прежний предел (или по-прежнему не иметь предела).
Теперь определим функцию T. По предположению функция t вычисляется некоторой программой p, имеющей доступ к характеристической функции некоторого перечислимого множества K. Обозначим через Kn конечное подмножество множества K, состоящее из тех его элементов, которые успели обнаружиться за n шагов перечисления множества K. Вычисляя T(x,n), мы сделаем n шагов работы программы p, при этом используя вместо K его конечное приближение Kn. Если за эти n шагов программа p не даст ответа (что может быть по разным причинам отведенное ей время может быть недостаточно, Kn может отличаться от K, да и вообще функция t на x может быть не определена), то . Если же за n шагов программа ответ даст, то этот ответ и будет значением T(x,n) (за одним исключением, о котором мы скажем позже).
Попробуем доказать, что
Пусть t(x) равно некоторому a. Тогда работа программы p (с правильным оракулом K ) через некоторое время завершается и дает ответ a. При этом вычислении используется лишь конечное число вопросов к оракулу. Поэтому при достаточно большом n множество Kn в этих местах уже будет совпадать с K. Увеличив n еще, если надо (чтобы оно превзошло время работы программы p ), мы можем гарантировать, что при этом n и при всех больших n значение T(x,n) будет равно a.Но нам надо еще доказать, что если предел существует и равен a, то t(x)=a. Здесь нас ожидает трудность, состоящая в следующем. Пусть при настоящем K работа программы p не завершается. Но тем не менее может получиться так, что при каждом n наше вычисление завершится за счет того, что множество Kn отличается от настоящего K, и даже случайно все эти вычисления дадут одинаковый ответ.
Чтобы справиться с этой трудностью, изменим определение функции T. А именно, договоримся, что если при вычислении T(x,n) и T(x,n-1) протоколы обращений к оракулу были разными (задавались разные вопросы или были получены разные ответы на одинаковые вопросы), то . Это не портит нашего предыдущего рассуждения, поскольку там при больших n задаваемые вопросы и даваемые ответы такие же, как в " настоящем" вычислении. Зато теперь мы можем быть уверены, что если последовательность T(x,0),T(x,1),... имеет предел, то и t(x) определено. В самом деле, если она имеет предел, то содержит конечное число звездочек. Значит, при всех достаточно больших n оракулу задаются одни и те же вопросы и получаются одни и те же ответы. Значит, эти ответы правильны, так как в пределе Kn стремится к K. Поэтому настоящее вычисление также завершается (с тем же ответом).
61. Приведенное в задаче 14 определение вычислимого действительного числа можно релятивизовать относительного любого множества A. Покажите, что число является 0' -вычислимым тогда и только тогда, когда оно является пределом вычислимой последовательности рациональных чисел.
Несравнимые множества
Определение сводимости по Тьюрингу (напомним, что A сводится по Тьюрингу к B, если множество A разрешимо с оракулом для B ) можно рассматривать как способ сравнивать задачи разрешения различных множеств " по трудности". (Если A <=T B, то задача разрешения множества A в некотором смысле проще, чем задача разрешения множества B.)
Возникает множество естественных вопросов, связанных с такой классификацией. Например, существует ли самая трудная в мире задача разрешения, то есть такое множество A, что B <=T A для любого множества B? Ответ, как легко понять, отрицательный: в релятивизованном относительно A мире есть свои неразрешимые множества (и даже A -перечислимые A -неразрешимые множества) поскольку там выполнены обычные теоремы теории алгоритмов. (Можно также заметить, что поскольку различных программ счетное число, то при любом множестве A семейство всех A -разрешимых множеств счетно.)
Другой, менее тривиальный вопрос такой: любые ли два множества сравнимы? Оказывается, что нет, как показывает следующая теорема, доказанная Клини и Постом.
Теорема 49. Существуют два множества A и B, для которых и . Эти множества можно взять 0' -разрешимыми.
Множества A и B должны удовлетворять таким требованиям: никакая программа, к которой присоединен B -оракул, не разрешает множества A, и никакая программа, к которой присоединен A -оракул, не разрешает множества B.
Таким образом, имеется счетное число требований (поскольку есть счетное число программ). Мы будем обслуживать их по очереди, каждое по одному разу обеспечив выполнение некоторого требования, мы уже к нему возвращаться не будем. После каждого шага будет фиксировано поведение множеств A и B на некоторых отрезках натурального ряда, гарантирующее выполнение уже рассмотренных требований. На следующем шаги эти отрезки будут больше, и так далее в пределе получатся два множества A и B, удовлетворяющие всем требованиям. Вся конструкция будет 0' -вычислимой, так что результирующие множества будут 0' -разрешимыми.