Теорема Ладнера — различия между версиями
Kirelagin (обсуждение | вклад) |
Kirelagin (обсуждение | вклад) (Ой, зря я сломал программы. Починил.) |
||
| Строка 29: | Строка 29: | ||
* <tex>g(n) = 2i</tex>. | * <tex>g(n) = 2i</tex>. | ||
| − | for <tex>x</tex>: <tex>|x| \le \log_2 n</tex> | + | for <tex>x</tex> : <tex>|x| \le \log_2 n</tex> |
if <tex>M_i(x)</tex> and (<tex>g(|x|) \% 2 = 1</tex> or <tex>x \not \in \mathrm{SAT})</tex> | if <tex>M_i(x)</tex> and (<tex>g(|x|) \% 2 = 1</tex> or <tex>x \not \in \mathrm{SAT})</tex> | ||
<tex>g(n+1) := g(n)+1</tex> | <tex>g(n+1) := g(n)+1</tex> | ||
| − | + | return | |
| + | if <tex>! M_i(x)</tex> and (<tex>g(|x|) \% 2 = 0</tex> and <tex>x \in \mathrm{SAT})</tex> | ||
<tex>g(n+1) := g(n)+1</tex> | <tex>g(n+1) := g(n)+1</tex> | ||
| − | + | return | |
| − | + | <tex>g(n+1) := g(n)</tex> | |
* <tex>g(n) = 2i + 1</tex>. | * <tex>g(n) = 2i + 1</tex>. | ||
| − | for <tex>x</tex>: <tex>|x| \le \log_2 n, |f_i(x)| \le \log_2 n</tex> | + | for <tex>x</tex> : <tex>|x| \le \log_2 n, |f_i(x)| \le \log_2 n</tex> |
if <tex>x \in \mathrm{SAT}</tex> and (<tex>g(|f_i(x)|) \% 2 = 1</tex> or <tex>f_i(x) \not \in \mathrm{SAT})</tex> | if <tex>x \in \mathrm{SAT}</tex> and (<tex>g(|f_i(x)|) \% 2 = 1</tex> or <tex>f_i(x) \not \in \mathrm{SAT})</tex> | ||
| − | <tex>g(n+1) := g(n)+1</tex> | + | <tex>g(n+1) := g(n)+1</tex>, return |
| − | + | if <tex>x \not \in \mathrm{SAT}</tex> and (<tex>g(|f_i(x)|) \% 2 = 0</tex> and <tex>f_i(x) \in \mathrm{SAT})</tex> | |
| − | <tex>g(n+1) := g(n)+1</tex> | + | <tex>g(n+1) := g(n)+1</tex>, return |
| − | + | <tex>g(n+1) := g(n)</tex> | |
| − | |||
=== Корректность алгоритма === | === Корректность алгоритма === | ||
Версия 13:21, 2 июня 2012
Теорема Ладнера (Ladner's Theorem) утверждает, что если P не совпадает с NP, то существует язык, принадлежащий NP, но не являющийся ни полиномиальным, ни NP-полным.
Содержание
[убрать]Доказательство
Предположим, что . Из этого следует, что никакой -полный язык (например, ) нельзя свести по Карпу к полиномиальному. Будем искать язык , удовлетворяющий следующим условиям:
- (что влечёт за собой );
- ;
- .
Если такой язык существует, то является искомым примером множества из .
Пусть — все машины Тьюринга из , причём для любого .
Пусть — аналогичное множество полиномиальных функций: для любого .
Для простоты будем считать, что . Построим такую неубывающую функцию , что для выполняются три названных свойства.
Построение
Определим рекурсивно. Положим .
Для :
- Если , .
Иначе ; значения для уже известны.
- .
for : if and ( or return if and ( and return
- .
for : if and ( or , return if and ( and , return
Корректность алгоритма
Проверим выполнение второго и третьего свойств языка .
- Пусть не имеет предела при . Значит, для любой в существует элемент, на котором «ошибается»; аналогично, для любой полиномиальной функции существует элемент, на котором неверно сводит к . Оба свойства выполнены.
- Пусть . Значит, в нашем множестве существует машина Тьюринга , распознающая : . С одной стороны, работает за полином, и . С другой стороны, по определению , различается с в конечном числе элементов, значит, . Получено противоречие с предположением .
- Пусть . Тогда в нашем множестве полиномиальных функций существует : . С одной стороны, с помощью . С другой стороны, из определения выходит, что язык конечен, значит, . Снова получено противоречие с предположением.
Таким образом, при верности предположения второе и третье свойства выполнены.
Время работы алгоритма
Проверим первое свойство — полиномиальность языка .
Пусть — время вычисления .
Заметим, что по построению для .
Время выполнения шагов составляет:
- проверка неравенства:
,
где — время нахождения произведения чисел и
- :
// а не n^3 ли здесь в первом слагаемом?
- :
Таким образом,
Пусть . Существует константа , для которой при любом верно
Тогда, в силу и неравенства выше, по индукции легко доказать, что ограничено сверху , то есть , а, в свою очередь, .
Источник
- William Gasarch, Lance Fortnow. Two Proofs of Ladner’s Theorem