Теорема Карпа — Липтона — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
{{Лемма
 
{{Лемма
|statement= Пусть <tex>SAT \in \mathrm{P}/poly </tex>, тогда существует семейство схем полиномиального размера <tex>D_n</tex> таких, что для любой формулы <tex>\phi \in SAT</tex> c <tex>n</tex> переменными, <tex>D_{n}(\phi)</tex> выводит набор значений, удовлетворяющий формуле, или последовательность нулей если <tex>\phi \not \in SAT</tex>
+
|statement= Пусть <tex>SAT \in \mathrm{P}/poly </tex>, тогда для любой формулы <tex>\phi</tex> с <tex>n</tex> переменными, существует такая последовательность схем полиномиального размера <tex>C_n^1...C_n^n</tex>, что <tex>C_n^i</tex> возвращает значение <tex>i</tex>-й переменной в наборе переменных, удовлетворяющих <tex>\phi</tex>, если <tex>\phi \in SAT</tex>, или <tex>0</tex> если <tex>\phi \not \in SAT</tex>
 
|proof=
 
|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>\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>.  
 
}}
 
}}
  
Строка 11: Строка 11:
 
Если <tex>\mathrm{NP} \subset \mathrm{P}/poly</tex>, то <tex>\Sigma_2 = \Pi_2</tex>.
 
Если <tex>\mathrm{NP} \subset \mathrm{P}/poly</tex>, то <tex>\Sigma_2 = \Pi_2</tex>.
 
|proof=
 
|proof=
Так как <tex>\mathrm{NP} \subset \mathrm{P}/poly</tex>, то <tex>SAT \in \mathrm{P}/poly</tex>. Тогда по лемме найдётся семейство схем полиномиального размера <tex> D_n</tex> таких, что для любой формулы <tex>\phi \in SAT</tex>, <tex>D_{|\phi|}(\phi)</tex> выводит набор значений, удовлетворяющий <tex>\phi</tex>.
+
Рассмотрим язык <tex>L \in \Pi_2</tex>, <tex>L = \{x | \forall y_1 . \exists y_2 \phi(x, y_1, y_2)\}</tex>.<br/>
 
+
Рассмотрим семейство схем <tex>С_n^1...C_n^n</tex>из леммы. <br> Используем выходы схем <tex>C_n^1...C_n^{i-1}</tex> как вход <tex>b_1...b_{i-1}</tex> схемы <tex>C_n^i</tex>, при этом заменяя те схемы <tex>C_n^i</tex>, которые возвращают значения переменных <tex>x</tex> и <tex>y_1</tex> на простые входы. Итого, получим схему <tex>C_n(\phi, x, y_1)</tex> и возвращающую такое значение <tex>y_2</tex>, что <tex> \phi(x, y_1, y_2) = 1</tex>, если <tex>\phi(x, y_1, y_2)</tex> удовлетворима для заданных <tex>x, y_1</tex>. <br> Теперь определение языка можно переписать так: <tex>L = \{x | \forall y_1 . \phi(x, y_1, C_n(\phi, x, y_1))\}</tex>. <br> Покажем что <tex>(\forall y_1 \phi(x, y_1, C_n(\phi, x, y_1)))</tex> <tex>\Leftrightarrow</tex> <tex>(\exists G \forall y_1 \phi(x, y_1, G(\phi, x, y_1)) )</tex>. <br> Очевидно, что из первого следует второе, т.к. <tex>\exists G = D_n</tex>. <br> Если первое ложно, то <tex>\exists y_1 = y_1^0 . \forall y_2 \phi(x, y_1^0, y_2) = 0</tex>, следовательно не существует такого <tex>G</tex>, что <tex>\forall y_1\phi(x, y_1, G(\phi, x, y_1)) )</tex>. <br>
Рассмотрим язык <tex>L \in \Pi_2</tex>, <tex>L = \{z | \forall x </tex> <tex>\exists y </tex> <tex> \phi(x, y, z)\}</tex>.<br/>
+
Теперь определение исходного языка можно записать как <tex>L = \{x|\exists G \forall y_1 \phi(x, y_1, G(\phi, x, y_1))\}</tex>, значит <tex>L \in \Sigma_2</tex>
Рассмотрим формулу <tex>\psi(x, z) = \exists y</tex> <tex>\phi(x, y, z)</tex> как экземпляр задачи <tex>SAT</tex>.<br/>
 
Тогда определение языка <tex>L</tex> можно переписать так: <tex>L=\{z | \forall x</tex> <tex> \phi(x,D_{|\psi(x, z)|}(\psi(x, z)), z)\}</tex>.<br/>
 
Покажем что <tex>(\forall x</tex> <tex> \phi(x,D_{|\psi(x, z)|}(\psi(x, z)), z)</tex> <tex>)\Leftrightarrow</tex> <tex>(\exists G : </tex> <tex> \forall x</tex> <tex>\phi(x, G(\psi(x, z)), z))</tex>.
 
<br>Очевидно, из первого следует второе, так как <tex>\exists G = D_{|\psi(x, z)|}</tex>.
 
Если первое ложно, то <tex>\exists x = x_0 : </tex> <tex>\forall y</tex> <tex>\phi(x, y, z) = 0</tex>, а значит <tex>\forall G </tex> <tex>\exists x = x_0 : \phi (x, G(\psi(x, z)), z)</tex>, то есть второе ложно.
 
Итого, язык <tex>L=\{z | \exists G : </tex> <tex>\forall x</tex> <tex>\phi(x, G(\psi(x, z)), z)\}</tex>, значит <tex>L \in \Sigma_2</tex>.
 
 
}}
 
}}
  
 
[[Категория: Теория сложности]]
 
[[Категория: Теория сложности]]

Версия 16:52, 3 июня 2012

Лемма:
Пусть [math]SAT \in \mathrm{P}/poly [/math], тогда для любой формулы [math]\phi[/math] с [math]n[/math] переменными, существует такая последовательность схем полиномиального размера [math]C_n^1...C_n^n[/math], что [math]C_n^i[/math] возвращает значение [math]i[/math]-й переменной в наборе переменных, удовлетворяющих [math]\phi[/math], если [math]\phi \in SAT[/math], или [math]0[/math] если [math]\phi \not \in SAT[/math]
Доказательство:
[math]\triangleright[/math]
Зададимся формулой [math]\phi[/math]. Определим семейство схем [math]C_n^1 ... C_n^n[/math] так: схема [math]C_n^i[/math] будет принимать на вход формулу [math]\phi[/math] и [math]i-1[/math] бит [math]b_1 ... b_{i-1}[/math], и возвращать [math]1[/math] тогда и только тогда, когда существует набор переменных, удовлетворяющий [math]\phi[/math], такой что [math]x_1 = b_1 ... x_{i-1}=b_{i-1}[/math] и [math]x_i=1[/math]. Так как задача определения выходного значения таких схем принадлежит [math]NP[/math], то такие схемы существуют и имеют полиномиальный размер. Очевидно, что если формула [math]\phi[/math] удовлетворима, то схема [math]C_n^i[/math] вернет значение [math]i[/math]-й переменной удовлетворяющего набора, в противном случае схема вернет [math]0[/math].
[math]\triangleleft[/math]


Теорема (Карп, Липтон):
Если [math]\mathrm{NP} \subset \mathrm{P}/poly[/math], то [math]\Sigma_2 = \Pi_2[/math].
Доказательство:
[math]\triangleright[/math]

Рассмотрим язык [math]L \in \Pi_2[/math], [math]L = \{x | \forall y_1 . \exists y_2 \phi(x, y_1, y_2)\}[/math].
Рассмотрим семейство схем [math]С_n^1...C_n^n[/math]из леммы.
Используем выходы схем [math]C_n^1...C_n^{i-1}[/math] как вход [math]b_1...b_{i-1}[/math] схемы [math]C_n^i[/math], при этом заменяя те схемы [math]C_n^i[/math], которые возвращают значения переменных [math]x[/math] и [math]y_1[/math] на простые входы. Итого, получим схему [math]C_n(\phi, x, y_1)[/math] и возвращающую такое значение [math]y_2[/math], что [math] \phi(x, y_1, y_2) = 1[/math], если [math]\phi(x, y_1, y_2)[/math] удовлетворима для заданных [math]x, y_1[/math].
Теперь определение языка можно переписать так: [math]L = \{x | \forall y_1 . \phi(x, y_1, C_n(\phi, x, y_1))\}[/math].
Покажем что [math](\forall y_1 \phi(x, y_1, C_n(\phi, x, y_1)))[/math] [math]\Leftrightarrow[/math] [math](\exists G \forall y_1 \phi(x, y_1, G(\phi, x, y_1)) )[/math].
Очевидно, что из первого следует второе, т.к. [math]\exists G = D_n[/math].
Если первое ложно, то [math]\exists y_1 = y_1^0 . \forall y_2 \phi(x, y_1^0, y_2) = 0[/math], следовательно не существует такого [math]G[/math], что [math]\forall y_1\phi(x, y_1, G(\phi, x, y_1)) )[/math].

Теперь определение исходного языка можно записать как [math]L = \{x|\exists G \forall y_1 \phi(x, y_1, G(\phi, x, y_1))\}[/math], значит [math]L \in \Sigma_2[/math]
[math]\triangleleft[/math]