EDIT: Аргумент, на який я відповів, не був помилковим, але був трохи оманливим, оскільки він лише показав, що верхня межа повинна бути щільною для певного (що насправді є тривіальним, оскільки воно повинно бути жорстким, коли а зв'язана дорівнює 1).нn = 2
Ось більш точний аргумент. Звідси видно, що якщо верхня межа
є вільною для будь-якого конкретного , то для всіх кількість необхідних викликів Oracle становить .журнал2нн нO ( 1 )
(Безумовно, це не , тому верхня межа ніколи не розпущена! Але я насправді не доводжу, що тут, і з огляду на іншу відповідь на проблему, це, здається, не варто шукати.)O ( 1 )
Розглянемо проблему обчислення максимального результату :
Враховуючи -tuple машин Тьюрінга, обчисліть максимальний вихід (із машин Тьюрінга, які зупиняються, якщо працювати на ). Якщо жодна з них не зупиниться, поверніть 0.н(М1, … ,Мн)ϵ
Як функція , найгірше число викликів Oracle, необхідне для обчислення цієї функції, те саме, що число, необхідне для вирішення, яка з машин зупиниться. (Якщо я знаю, які машини зупиняються, я можу легко обчислити максимальний вихід. І навпаки, якщо я хочу знати, які машини зупиняються, після побудови в постановці проблеми я можу побудувати машини
де запускає всі заданих машин, то зупиняє та виводить якщо з них коли-небудь зупиняється. Максимальний вихід підкаже мені число, яке зупиняється. З цього я можу обчислити що саме зупинити.)нн{М'i} ( i = 1 , 2 , … , n )М'iнii
Тепер нехай - найменше ціле число (якщо воно є) таким, що має місце наступне:н0н
Використовуючи виклики , можна обчислити максимальний вихід заданих машин. (Тобто верхня межа не туга для .)С( n ) = max { k ∈ Z :2к< n }нн
Чітко , тому що . Насправді, також, тому що , але не можна визначити максимальний вихід заданих машин (без викликів Oracle). Тепер розглянемо більші :н0> 1С( 1 ) = - 1н0> 2С( 2 ) = 02н
Заява: Якщо є кінцевим, то для будь-якого можна обчислити максимальний вихід заданих машин при викликах оракула . н0ннС(н0)(Зверніть увагу, що якщо кінцевий, то .)н0С(н0) = O ( 1 )
Доказ. . Доводимо це індукцією на . Базові випадки , які тримають по визначенню і .нn ≤н0н0С
Нехай - ТМ, який, враховуючи будь-які машини Тьюрінга, обчислює максимальний вихід, використовуючи лише виклики до оракула.Q0н0С(н0)
Виправте будь-який . З урахуванням будь-яких машин , обчислюйте максимальний вихід таким чином.n >н0нМ1, … ,Мн
Зосередьтеся на перших машинах . Розглянемо виконання на цих машинах. Зауважте, що робить дзвінки до оракула, і є лише можливих відповідей оракула на ці дзвінки. Зауважимо, що за визначенням . Нехай позначає му можливу відповідь. Для кожного машину
яка імітує на цих машинах так:М1, … ,Мн0Q0н0Q0С(н0)н'=2С(н0)н'=2С(н0)<н0оiii = 1 , … ,н'М'iQ0
TM (на вході ):М'iϵ
- Імітувати на машинах , але замість того , щоб викликати оракул, припустимо оракула реагує згідно .Q0н0(М1, … ,Мн0)оi
- Таке моделювання може не припинитися (наприклад, якщо - це не те, що оракул насправді поверне).оi
- Якщо моделювання зупиниться, нехай буде максимальним результатом, про говорить .годiQ0
- Обріжте всі машини . Якщо хтось із них коли-небудь видає , зупиніть та виведіть .н0(М1, … ,Мн0)годiгодi
Тепер у заданій послідовності машин замініть перші машини цими машинами . Повертайте обчислене значення, повторюючи цю послідовність машин. (Зверніть увагу, що оракул не викликається перед повторним повторенням, так що оракул викликається лише після досягнення базового випадку.)нн0М1, … ,Мн0н'<н0М'1, … ,М'н'n - (н0-н') < n
Ось чому це обчислення правильне. Для такого, що є `` правильною '' відповіддю оракула на запити, зупинить і дасть правильний максимальний вихід оригінальних машин . Таким чином, максимальний вихід машин
є щонайменше максимальним виходом машин . З іншого боку, на кроці 4 жоден не
може дати вихід, який перевищує максимальний вихід . Таким чином, максимальний вихід машинiоiQ0М'iн0н'(М'1, … ,М'н')н0(М1, … ,Мн0)М'i(М1, … ,Мн0)н'(М'1, … ,М'н')
дорівнює максимальній потужності машин, які вони замінюють. QEDн0