Изменения

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

Теорема Карпа — Липтона

66 байт убрано, 16:52, 3 июня 2012
Нет описания правки
{{Лемма
|statement= Пусть <tex>SAT \in \mathrm{P}/poly </tex>, тогда для любой формулы <tex>\phi</tex> с <tex>n</tex> переменными, существует семейство такая последовательность схем полиномиального размера <tex>D_nC_n^1...C_n^n</tex> таких, что для любой формулы <tex>\phi \in SATC_n^i</tex> c возвращает значение <tex>ni</tex> переменными-й переменной в наборе переменных, удовлетворяющих <tex>D_{n}(\phi)</tex> выводит набор значений, удовлетворяющий формулеесли <tex>\phi \in SAT</tex>, или последовательность нулей <tex>0</tex> если <tex>\phi \not \in SAT</tex>
|proof=
Зададимся формулой <tex>\phi</tex>. Определим семейство схем <tex>C_n^1 ... C_n^n</tex> так: схема <tex>C_n^i</tex> будет принимать на вход формулу <tex>\phi</tex> и <tex>i-1</tex> бит <tex>b_1 ... b_{i-1}</tex>, и возвращать <tex>1</tex> тогда и только тогда, когда существует набор переменных, удовлетворяющий <tex>\phi</tex>, такой что <tex>x_1 = b_1 ... x_{i-1}=b_{i-1}</tex> и <tex>x_i=1</tex>. Так как задача определения выходного значения таких схем принадлежит <tex>NP</tex>, то такие схемы существуют и имеют полиномиальный размер. Очевидно, что если формула <tex>\phi</tex> удовлетворима, то схема <tex>C_n^i</tex> вернет значение <tex>i</tex>-й переменной удовлетворяющего набора, в противном случае схема вернет <tex>0</tex>. Теперь используем выходы схем <tex>C_n^1...C_n^{i-1}</tex> как вход <tex>b_1...b_{i-1}</tex> схемы <tex>C_n^i</tex> и получим схему с <tex>n</tex> выходами, возвращающую требуемые набор.
}}
Если <tex>\mathrm{NP} \subset \mathrm{P}/poly</tex>, то <tex>\Sigma_2 = \Pi_2</tex>.
|proof=
Так как Рассмотрим язык <tex>L \mathrm{NP} in \subset \mathrm{P}/polyPi_2</tex>, то <tex>SAT L = \in {x | \forall y_1 . \exists y_2 \phi(x, y_1, y_2)\mathrm{P}/poly</tex>. Тогда по лемме найдётся <br/>Рассмотрим семейство схем полиномиального размера <tex> D_nС_n^1...C_n^n</tex> таких, что для любой формулы из леммы. <br> Используем выходы схем <tex>\phi \in SATC_n^1...C_n^{i-1}</tex>, как вход <tex>D_b_1...b_{|\phi|i-1}(\phi)</tex> выводит набор значений, удовлетворяющий схемы <tex>\phiC_n^i</tex>. Рассмотрим язык , при этом заменяя те схемы <tex>L \in \Pi_2C_n^i</tex>, которые возвращают значения переменных <tex>L = \{z | \forall x </tex> и <tex>\exists y y_1</tex> на простые входы. Итого, получим схему <tex> C_n(\phi(, x, y, zy_1)\}</tex>.и возвращающую такое значение <tex>y_2<br/tex>Рассмотрим формулу , что <tex>\psiphi(x, zy_1, y_2) = \exists y1</tex> , если <tex>\phi(x, yy_1, zy_2)</tex> как экземпляр задачи удовлетворима для заданных <tex>SATx, y_1</tex>.<br/>Тогда Теперь определение языка <tex>L</tex> можно переписать так: <tex>L=\{z x | \forall x</tex> <tex> y_1 . \phi(x,D_{|\psi(xy_1, z)|}C_n(\psi(phi, x, zy_1)), z)\}</tex>.<br/>Покажем что <tex>(\forall x</tex> <tex> y_1 \phi(x,D_{|\psi(xy_1, z)|}C_n(\psi(phi, x, zy_1)), z)</tex> <tex>)\Leftrightarrow</tex> <tex>(\exists G : </tex> <tex> \forall x</tex> <tex>y_1 \phi(x, y_1, G(\psi(phi, x, z)y_1), z))</tex>.<br>Очевидно, что из первого следует второе, так как т.к. <tex>\exists G = D_{|\psi(x, z)|}D_n</tex>.<br> Если первое ложно, то <tex>\exists x y_1 = x_0 : </tex> <tex>y_1^0 . \forall y</tex> <tex>y_2 \phi(x, yy_1^0, zy_2) = 0</tex>, а значит следовательно не существует такого <tex>\forall G </tex> , что <tex>\exists x = x_0 : forall y_1\phi (x, y_1, G(\psi(phi, x, zy_1)), z)</tex>, то есть второе ложно.<br>Итого, язык Теперь определение исходного языка можно записать как <tex>L=\{z x| \exists G : </tex> <tex>\forall x</tex> <tex>y_1 \phi(x, y_1, G(\psi(phi, x, z)y_1), z)\}</tex>, значит <tex>L \in \Sigma_2</tex>.
}}
[[Категория: Теория сложности]]
69
правок

Навигация