Теорема Карпа-Липтона — различия между версиями
м (rollbackEdits.php mass rollback) |
|||
(не показано 35 промежуточных версий 3 участников) | |||
Строка 2: | Строка 2: | ||
'''Теорема Карпа-Липтона''' | '''Теорема Карпа-Липтона''' | ||
− | <math>NP \subset P/poly</math> то <math>\Sigma_2=\Pi_2</math> | + | Если <math>NP \subset P/poly</math> то <math>\Sigma_2=\Pi_2</math> |
== Доказательство == | == Доказательство == | ||
− | Пусть есть логические схемы для <tex>NP</tex> (для любой задачи из NP). Зафиксируем любую задачу из <tex>NP</tex>. Например пусть <tex>SAT</tex> разрешается логическими схемами <tex> C_1...C_n... </tex> (<tex>SAT</tex> с одним битом разрешается логической схемой <tex>C_1</tex>, <tex>SAT</tex> с двумя переменными логической схемой <tex>C_2</tex> и | + | Пусть есть логические схемы для <tex>NP</tex> (для любой задачи из NP). Зафиксируем любую задачу из <tex>NP</tex>. Например пусть <tex>SAT</tex> разрешается логическими схемами <tex> C_1...C_n... </tex> (<tex>SAT</tex> с одним битом разрешается логической схемой <tex>C_1</tex>, <tex>SAT</tex> с двумя переменными логической схемой <tex>C_2</tex> и т.д.). |
− | |||
− | + | '''Что значит "разрешается логической схемой"?''' | |
− | + | Это значит что если на вход логической схеме подать каким-то логичным образом закодированную формулу, то на выходе получется логичным образом в виде 0 и 1 закодированный ответ - имеется разложение или нет. И причем размер этой логической схемы <tex>|C_n|\le p(n) </tex>, где <tex>p(n)</tex> - какой-то полином. | |
− | <tex> | + | Здесь не утверждается, что эти логические схемы можно как-то конструктивно построить. Если бы их было возможно построить за полином, то это бы означало, что <tex>SAT_2=\Pi_2</tex> и значит <tex>P = NP</tex>. |
+ | Итак, получается, что если зафиксировать <tex>n</tex>, то для этого фиксированного <tex>n</tex> будет | ||
+ | <tex>\exists{C_n}\forall{} формулы \varphi{} (\varphi{} \in{} SAT |\varphi{}|=n \Leftrightarrow C_n(\varphi{})=1)</tex> | ||
+ | <tex> \exists{C_n} \forall{\varphi{}} (\forall{x} \varphi{(x)}=0 \Leftrightarrow C_n(\varphi{})=0)</tex>, где <tex>x</tex> - вход длины <tex>n</tex> | ||
Рассмотрим язык <tex>L\in \Pi_2</tex>. Это означает, что <tex>x\in L \Leftrightarrow \forall{y} \exists{z}: \psi{(x,y,x)}</tex> | Рассмотрим язык <tex>L\in \Pi_2</tex>. Это означает, что <tex>x\in L \Leftrightarrow \forall{y} \exists{z}: \psi{(x,y,x)}</tex> | ||
− | |||
− | <tex>L_1 = \{<x,y>|\exists{z}: \psi{(x,y,z)}\}</tex>. | + | '''Что такое <tex>\exists{z}:\psi{(x,y,z)}</tex>?''' |
+ | |||
+ | ---- | ||
+ | |||
+ | Обозначим пары <tex><x,y></tex>, для которых такой <tex>z</tex> существует как какой нибудь язык <tex>L_1</tex>. | ||
+ | <tex>L_1 = \{<x,y>|\exists{z}: \psi{(x,y,z)}\}</tex>. | ||
Заметим что <tex>L_1 \in NP</tex> по определению <tex>NP</tex> | Заметим что <tex>L_1 \in NP</tex> по определению <tex>NP</tex> | ||
− | + | ||
+ | Таким образом получается, что | ||
+ | <tex>L=\{x|\forall{y} <x,y>\in{L_1}\}</tex> | ||
+ | |||
+ | ---- | ||
− | + | '''Требуется доказать, что <tex>L\in \Sigma_1</tex>''' | |
− | + | Если <tex>L_1\in{} NP</tex> то <tex>L_1 \le{}_m SAT</tex> с помощью <tex>f</tex>, т.е. | |
− | + | <tex>L=\{x|\forall{y} f(<x,y>)\in{SAT}\}</tex> | |
− | |||
− | <tex>f(<x,y>)\subset{SAT}</tex> - для некоторого набора логических схем это означает выполнимость всего этого набора. Если предположить, что набор этих схем | + | '''Что такое "<tex>f(<x,y>)\subset{SAT}</tex>"?''' |
+ | |||
+ | <tex>f(<x,y>)\subset{SAT}</tex> <tex>--</tex> для некоторого набора логических схем это означает выполнимость всего этого набора. Если предположить, что набор этих схем известен, то получится, что | ||
+ | <tex>L=\{x|\forall{y} C_n(f(<x,y>))=1\}</tex>, | ||
+ | где <tex>n</tex>- длина входа <tex><x,y></tex>. | ||
+ | |||
Требуется откуда то взять этот набор. Его можно угадать, используя квантор "<tex>\exists{}</tex>" снаружи. | Требуется откуда то взять этот набор. Его можно угадать, используя квантор "<tex>\exists{}</tex>" снаружи. | ||
+ | <tex>C_n</tex> существует по предположению, что <tex>NP \subset{P/poly}</tex> т.е. | ||
+ | <tex>L=\{x|\exists{C_n}: C_n</tex> решает <tex>SAT</tex> и <tex>\forall{y} C_n(f(<x,y>))=1\}</tex> | ||
− | |||
− | |||
− | Что такое | + | '''Что такое <tex>C_n</tex> Решает <tex>SAT</tex>?''' |
− | <tex>C_n</tex> решает <tex>SAT</tex> <tex>\Leftrightarrow</tex> если <tex>\forall{\varphi} \forall{x} (fi(x)=1 \Rightarrow C_n(fi)=1)</tex> | + | |
+ | Запишем это используя квантор "<tex>\forall{}</tex>". | ||
+ | |||
+ | <tex>C_n</tex> решает <tex>SAT</tex> <tex>\Leftrightarrow</tex> если <tex>\forall{\varphi} \forall{x} (fi(x)=1 \Rightarrow C_n(fi)=1)</tex> | ||
+ | |||
+ | Воспользуемся самосведением <tex>SAT</tex>: | ||
+ | <tex>L=\{x|\exists{C1,C2,..,Cn} \forall{y} C_n(f(<x,y>))=1\}</tex>, | ||
+ | где - <tex>C1,C2,..,Cn</tex> набор логических схем для <tex>SAT</tex>. | ||
− | |||
Внутри будем проверять используемый набор | Внутри будем проверять используемый набор | ||
− | < | + | <tex>\forall{\varphi{}} (C_{|\varphi{}|}(\varphi{})=0 \Rightarrow \forall{x} \varphi{}(x)=0) |
− | + | \vee{}</tex> | |
− | + | <tex>(C_{|\varphi{}|}(\varphi{})=1 \Rightarrow \varphi{}|_{x_1=0} \in SAT или \varphi{}|_{x_1=1} \in SAT)</tex> | |
− | |||
− | Если <tex>C</tex> решает <tex>SAT</tex> то все хорошо, | + | Если <tex>C</tex> решает <tex>SAT</tex> то все хорошо. Если нет, то зафиксируем формулу <tex>\varphi{}_0</tex>, которую он не решает. Если на этой формуле выдаст 0, а должна выдать 1, то получается что не удовлетворяет первую часть предыдущего выражения и, значит, не будет работать. Если наоборот выдаст 1 а на самом деле формула не удавлетворима то обе скобки не выполнятся и опять формула работать не будет. |
− | Рассмотрим минимальную схему | + | Рассмотрим минимальную неправильную схему. Тогда на той формуле, на которой эта схема неправильна, по предположению, что все более короткие формулы правильны,эта формула распознается схемами с меньшим числом входов. Поэтому обе скобки будут 0 и мы не узнаем набор схем. Развернем формулу до конца. |
− | <tex> \forall{\varphi{}}: |\varphi{}|=m \forall{x_1}..\forall{x_m} | + | <tex> \forall{\varphi{}}: |\varphi{}|=m \forall{x_1}..\forall{x_m} </tex><tex> C_m(\varphi{})=0 \Rightarrow \varphi{(x_1)}=0</tex> |
+ | иначе <tex> C_{m-1}(\varphi|_{x_1=0})=0 \Rightarrow \varphi|_{x_1=0}(x_2)=0</tex> | ||
+ | <tex>C_{m-1}(\varphi{}|_{x_1=1})=0 \Rightarrow \varphi{}|_{x_1=0}(x_2)=0</tex> | ||
+ | <tex>C_{m-1}(\varphi{}|{x_1=0}) \vee{} C_{m-1}(\varphi{}|_{x_1=1})</tex> | ||
+ | Далее рекурсивно записываем ту же самую формулу от того из них, которое равно 1. | ||
− | + | Второй вариант был угадать не только булевы схемы для сат но и те схемы, которые выдают правильные значения. | |
− | < | + | Получаем что <math>L\in \Sigma_2</math> |
− | |||
− | |||
− | |||
Теорема доказана | Теорема доказана |
Текущая версия на 19:18, 4 сентября 2022
Формулировка
Теорема Карпа-Липтона
Если
тоДоказательство
Пусть есть логические схемы для
(для любой задачи из NP). Зафиксируем любую задачу из . Например пусть разрешается логическими схемами ( с одним битом разрешается логической схемой , с двумя переменными логической схемой и т.д.).
Что значит "разрешается логической схемой"?
Это значит что если на вход логической схеме подать каким-то логичным образом закодированную формулу, то на выходе получется логичным образом в виде 0 и 1 закодированный ответ - имеется разложение или нет. И причем размер этой логической схемы
, где - какой-то полином.Здесь не утверждается, что эти логические схемы можно как-то конструктивно построить. Если бы их было возможно построить за полином, то это бы означало, что
и значит .Итак, получается, что если зафиксировать
, то для этого фиксированного будет, где - вход длины
Рассмотрим язык
. Это означает, что
Что такое ?
Обозначим пары
, для которых такой существует как какой нибудь язык .
.
Заметим что
по определениюТаким образом получается, что
Требуется доказать, что
Если
то с помощью , т.е.
Что такое " "?
для некоторого набора логических схем это означает выполнимость всего этого набора. Если предположить, что набор этих схем известен, то получится, что
,
где
- длина входа .Требуется откуда то взять этот набор. Его можно угадать, используя квантор "
" снаружи.существует по предположению, что т.е.
решает и
Что такое Решает ?
Запишем это используя квантор "
".решает если
Воспользуемся самосведением
:
,
где -
набор логических схем для .Внутри будем проверять используемый набор
Если
решает то все хорошо. Если нет, то зафиксируем формулу , которую он не решает. Если на этой формуле выдаст 0, а должна выдать 1, то получается что не удовлетворяет первую часть предыдущего выражения и, значит, не будет работать. Если наоборот выдаст 1 а на самом деле формула не удавлетворима то обе скобки не выполнятся и опять формула работать не будет.Рассмотрим минимальную неправильную схему. Тогда на той формуле, на которой эта схема неправильна, по предположению, что все более короткие формулы правильны,эта формула распознается схемами с меньшим числом входов. Поэтому обе скобки будут 0 и мы не узнаем набор схем. Развернем формулу до конца.
иначе
Далее рекурсивно записываем ту же самую формулу от того из них, которое равно 1.
Второй вариант был угадать не только булевы схемы для сат но и те схемы, которые выдают правильные значения.
Получаем что
Теорема доказана