Изменения

Перейти к: навигация, поиск

Теорема Левина

3 байта убрано, 21:56, 8 мая 2012
м
Нет описания правки
Пронумеруем все программы <tex>p_i</tex>. Поместим их в различные потоки, подадим на вход слово <tex>x</tex> и будем исполнять по одной инструкции в следующем порядке: на шаге с номером <tex>j</tex> запустим программу <tex>p_k</tex>, где <tex>k</tex> таково, что <tex>j</tex> делится на <tex>2^k</tex> и не делится на <tex>2^{k+1}</tex>. Таким образом, программа <tex>p_k</tex> будет исполняться на каждом <tex>2^k</tex>-м шаге. Следовательно, если <tex>p_k</tex> завершит работу за <tex>T(p_k, x)</tex> инструкций, то к этому времени нами будет сделано <tex>T(P_k, x) \cdot 2^k</tex> шагов.
Как только <tex>p_k</tex>, выдав некоторое значение, завершит работу , запустим в том же потоке проверку сертификата слова <tex>x</tex>, использовав используя вывод <tex>p_k</tex> в качестве сертификата. Если результат проверки положителен, искомый сертификат найден, иначе — продолжим работу больше ничего не запуская в этом потоке.
Таким образом, если некоторая программа <tex>p_k</tex> генерирует верные сертификаты, то наша программа <tex>p</tex> завершит работу не более, чем за <tex>(T(p_k,x) + T(R, \langle x,p_k(x) \rangle)) \cdot 2^k</tex> шагов. <tex>R \in P</tex> и <tex>|y| \le poly(|x|)</tex> из определения <tex>\Sigma_1</tex>, значит это равно <tex>(T(p_k,x) + poly(|x|)) \cdot 2^k = 2^k \cdot T(p_k,x) + poly(|x|)</tex>.

Навигация