Теорема Махэни — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
<tex>LSAT=\{\langle\phi,y\rangle | \exists x: x\le_{lex}y, \phi(x) = 1\}</tex>.
+
<tex>\mathrm{LSAT}=\{\langle\phi,y\rangle | \exists x: x\le_{lex}y, \phi(x) = 1\}</tex>.
 
}}
 
}}
  
 
{{Лемма
 
{{Лемма
 
|about=1
 
|about=1
|statement=<tex>LSAT \in \mathrm{NPC}</tex>.
+
|statement=<tex>\mathrm{LSAT} \in \mathrm{NPC}</tex>.
 
|proof=
 
|proof=
#Очевидно, что <tex>LSAT \in \mathrm{NP}</tex> (в качестве сертификата можно запросить <tex>x</tex>).
+
#Очевидно, что <tex>\mathrm{LSAT} \in \mathrm{NP}</tex> (в качестве сертификата можно запросить <tex>x</tex>).
#Сведём <tex>SAT</tex> к <tex>LSAT</tex>. Для этого рассмотрим отображение <tex>\phi \mapsto \langle \phi, 1^{|\phi|}\rangle</tex>, где <tex>|\phi|</tex> — количество различных переменных в формуле <tex>\phi</tex>. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное.  
+
#Сведём <tex>SAT</tex> к <tex>\mathrm{LSAT}</tex>. Для этого рассмотрим отображение <tex>\phi \mapsto \langle \phi, 1^{|\phi|}\rangle</tex>, где <tex>|\phi|</tex> — количество различных переменных в формуле <tex>\phi</tex>. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное.  
#*Если <tex>\phi \in SAT</tex>, то формула <tex>\phi</tex> удовлетворима, а значит <tex>\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1</tex>. Следовательно, <tex>\langle \phi, 1^{|\phi|}\rangle \in LSAT</tex>.
+
#*Если <tex>\phi \in SAT</tex>, то формула <tex>\phi</tex> удовлетворима, а значит <tex>\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1</tex>. Следовательно, <tex>\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}</tex>.
#*Если <tex>\langle \phi, 1^{|\phi|}\rangle \in LSAT</tex>, то <tex>\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1</tex>. Значит формула <tex>\phi</tex> удовлетворима, и <tex>\phi \in SAT</tex>.
+
#*Если <tex>\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}</tex>, то <tex>\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1</tex>. Значит формула <tex>\phi</tex> удовлетворима, и <tex>\phi \in SAT</tex>.
:Таким образом, <tex>SAT \le LSAT</tex>. Но <tex>SAT \in \mathrm{NPC}</tex>, а значит <tex>\forall L \in \mathrm{NP} \; L \le SAT</tex>. Тогда в силу транзитивности <tex>\forall L \in \mathrm{NP} \; L \le LSAT</tex>, то есть <tex>LSAT \in \mathrm{NPH}</tex>.
+
:Таким образом, <tex>SAT \le \mathrm{LSAT}</tex>. Но <tex>SAT \in \mathrm{NPC}</tex>, а значит <tex>\forall L \in \mathrm{NP} \; L \le SAT</tex>. Тогда в силу транзитивности <tex>\forall L \in \mathrm{NP} \; L \le \mathrm{LSAT}</tex>, то есть <tex>\mathrm{LSAT} \in \mathrm{NPH}</tex>.
Итого мы доказали, что <tex>LSAT \in \mathrm{NPH}</tex> и <tex>LSAT \in \mathrm{NP}</tex>. Тогда по определению <tex>LSAT \in \mathrm{NPC}</tex>.
+
Итого мы доказали, что <tex>\mathrm{LSAT} \in \mathrm{NPH}</tex> и <tex>\mathrm{LSAT} \in \mathrm{NP}</tex>. Тогда по определению <tex>\mathrm{LSAT} \in \mathrm{NPC}</tex>.
 
}}
 
}}
  
 
{{Лемма
 
{{Лемма
 
|about=2
 
|about=2
|statement=<tex>\langle\phi,y\rangle \in LSAT, y<_{lex}z</tex>. Тогда <tex>\langle\phi,z\rangle \in LSAT</tex>.
+
|statement=<tex>\langle\phi,y\rangle \in \mathrm{LSAT}, y<_{lex}z</tex>. Тогда <tex>\langle\phi,z\rangle \in \mathrm{LSAT}</tex>.
|proof=<tex>\langle\phi,y\rangle \in LSAT</tex>. Тогда <tex>\exists x: x\le_{lex}y, \phi(x) = 1</tex>. Так как <tex>y<_{lex}z</tex>, то <tex>\exists x: x<_{lex}z, \phi(x) = 1</tex>, следовательно <tex>\langle\phi,z\rangle \in LSAT</tex>.
+
|proof=<tex>\langle\phi,y\rangle \in \mathrm{LSAT}</tex>. Тогда <tex>\exists x: x\le_{lex}y, \phi(x) = 1</tex>. Так как <tex>y<_{lex}z</tex>, то <tex>\exists x: x<_{lex}z, \phi(x) = 1</tex>, следовательно <tex>\langle\phi,z\rangle \in \mathrm{LSAT}</tex>.
 
}}
 
}}
  
Строка 29: Строка 29:
 
|proof=Пусть <tex>S \in \mathrm{NPC} \cap \mathrm{SPARSE}</tex>.
 
|proof=Пусть <tex>S \in \mathrm{NPC} \cap \mathrm{SPARSE}</tex>.
  
Так как <tex>S\in \mathrm{NPC}</tex>, и <tex>LSAT \in \mathrm{NP}</tex>, то существует полиномиальная функция сведения <tex>f</tex> такая, что <tex>\langle \phi, y \rangle \in LSAT \Leftrightarrow f(\langle \phi, y \rangle) \in S</tex>.
+
Так как <tex>S\in \mathrm{NPC}</tex>, и <tex>\mathrm{LSAT} \in \mathrm{NP}</tex>, то существует полиномиальная функция сведения <tex>f</tex> такая, что <tex>\langle \phi, y \rangle \in \mathrm{LSAT} \Leftrightarrow f(\langle \phi, y \rangle) \in S</tex>.
  
 
Так как функция <tex>f</tex> работает полиномиальное время, и <tex>|\phi|=|y|</tex> (<tex>|y|</tex> — длина вектора <tex>y</tex>), то <tex>f(\langle\phi,y\rangle) \le q(|\phi|)</tex>, где <tex>q</tex> — полином.
 
Так как функция <tex>f</tex> работает полиномиальное время, и <tex>|\phi|=|y|</tex> (<tex>|y|</tex> — длина вектора <tex>y</tex>), то <tex>f(\langle\phi,y\rangle) \le q(|\phi|)</tex>, где <tex>q</tex> — полином.
<tex>S\in SPARSE</tex>. Следовательно, <tex>\forall n \; |S \cap \Sigma^n|\le p(n)</tex>, где <tex>p</tex> — некоторый полином.  
+
<tex>S\in \mathrm{SPARSE}</tex>. Следовательно, <tex>\forall n \; |S \cap \Sigma^n|\le p(n)</tex>, где <tex>p</tex> — некоторый полином.  
  
 
Тогда <tex>|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)</tex>, где <tex>r</tex> — также полином.
 
Тогда <tex>|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)</tex>, где <tex>r</tex> — также полином.
Строка 42: Строка 42:
 
Разобьём текущее множество строк на <tex>r+1</tex> подотрезок примерно равной длины. Обозначим концы полученных подотрезков <tex>w_0,...,w_{r+1}</tex>. Пусть теперь <tex>z_i=f(\langle\phi,w_i\rangle)</tex>.
 
Разобьём текущее множество строк на <tex>r+1</tex> подотрезок примерно равной длины. Обозначим концы полученных подотрезков <tex>w_0,...,w_{r+1}</tex>. Пусть теперь <tex>z_i=f(\langle\phi,w_i\rangle)</tex>.
  
Из леммы (2) мы знаем, что, начиная с некоторого <tex>l</tex>, все пары <tex>\langle\phi, w_l\rangle \in LSAT</tex>. Тогда по сведению <tex>z_j \in S</tex> для всех <tex>j\ge l</tex>.
+
Из леммы (2) мы знаем, что, начиная с некоторого <tex>l</tex>, все пары <tex>\langle\phi, w_l\rangle \in \mathrm{LSAT}</tex>. Тогда по сведению <tex>z_j \in S</tex> для всех <tex>j\ge l</tex>.
  
 
Рассмотрим два случая:
 
Рассмотрим два случая:
Строка 57: Строка 57:
 
<tex>2^n(1-\frac1{r+1})^k \simeq 1</tex>. Отсюда <tex>k=O(rn)</tex> (это можно получить, выразив <tex>k</tex> через <tex>n</tex> и <tex>r</tex> и воспользовавшись [http://ru.wikipedia.org/wiki/Ряд_Тейлора#.D0.A0.D1.8F.D0.B4.D1.8B_.D0.9C.D0.B0.D0.BA.D0.BB.D0.BE.D1.80.D0.B5.D0.BD.D0.B0_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9 формулой Тейлора] для логарифма).  
 
<tex>2^n(1-\frac1{r+1})^k \simeq 1</tex>. Отсюда <tex>k=O(rn)</tex> (это можно получить, выразив <tex>k</tex> через <tex>n</tex> и <tex>r</tex> и воспользовавшись [http://ru.wikipedia.org/wiki/Ряд_Тейлора#.D0.A0.D1.8F.D0.B4.D1.8B_.D0.9C.D0.B0.D0.BA.D0.BB.D0.BE.D1.80.D0.B5.D0.BD.D0.B0_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9 формулой Тейлора] для логарифма).  
  
Таким образом, мы можем разрешить язык <tex>LSAT</tex> за полиномиальное время, найдя лексиграфически минимальную строку, удовлетворяющую формулу, и сравнив её с нашим аргументом. Так как <tex>LSAT\in \mathrm{NPC}</tex>, то мы можем решить любую задачу из <tex>\mathrm{NP}</tex> за полиномиальное время, а значит <tex>\mathrm{P}=\mathrm{NP}</tex>.
+
Таким образом, мы можем разрешить язык <tex>\mathrm{LSAT}</tex> за полиномиальное время, найдя лексиграфически минимальную строку, удовлетворяющую формулу, и сравнив её с нашим аргументом. Так как <tex>\mathrm{LSAT}\in \mathrm{NPC}</tex>, то мы можем решить любую задачу из <tex>\mathrm{NP}</tex> за полиномиальное время, а значит <tex>\mathrm{P}=\mathrm{NP}</tex>.
  
 
}}
 
}}

Версия 01:04, 3 июня 2012

Определение:
[math]\mathrm{LSAT}=\{\langle\phi,y\rangle | \exists x: x\le_{lex}y, \phi(x) = 1\}[/math].


Лемма (1):
[math]\mathrm{LSAT} \in \mathrm{NPC}[/math].
Доказательство:
[math]\triangleright[/math]
  1. Очевидно, что [math]\mathrm{LSAT} \in \mathrm{NP}[/math] (в качестве сертификата можно запросить [math]x[/math]).
  2. Сведём [math]SAT[/math] к [math]\mathrm{LSAT}[/math]. Для этого рассмотрим отображение [math]\phi \mapsto \langle \phi, 1^{|\phi|}\rangle[/math], где [math]|\phi|[/math] — количество различных переменных в формуле [math]\phi[/math]. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное.
    • Если [math]\phi \in SAT[/math], то формула [math]\phi[/math] удовлетворима, а значит [math]\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1[/math]. Следовательно, [math]\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}[/math].
    • Если [math]\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}[/math], то [math]\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1[/math]. Значит формула [math]\phi[/math] удовлетворима, и [math]\phi \in SAT[/math].
Таким образом, [math]SAT \le \mathrm{LSAT}[/math]. Но [math]SAT \in \mathrm{NPC}[/math], а значит [math]\forall L \in \mathrm{NP} \; L \le SAT[/math]. Тогда в силу транзитивности [math]\forall L \in \mathrm{NP} \; L \le \mathrm{LSAT}[/math], то есть [math]\mathrm{LSAT} \in \mathrm{NPH}[/math].
Итого мы доказали, что [math]\mathrm{LSAT} \in \mathrm{NPH}[/math] и [math]\mathrm{LSAT} \in \mathrm{NP}[/math]. Тогда по определению [math]\mathrm{LSAT} \in \mathrm{NPC}[/math].
[math]\triangleleft[/math]
Лемма (2):
[math]\langle\phi,y\rangle \in \mathrm{LSAT}, y\lt _{lex}z[/math]. Тогда [math]\langle\phi,z\rangle \in \mathrm{LSAT}[/math].
Доказательство:
[math]\triangleright[/math]
[math]\langle\phi,y\rangle \in \mathrm{LSAT}[/math]. Тогда [math]\exists x: x\le_{lex}y, \phi(x) = 1[/math]. Так как [math]y\lt _{lex}z[/math], то [math]\exists x: x\lt _{lex}z, \phi(x) = 1[/math], следовательно [math]\langle\phi,z\rangle \in \mathrm{LSAT}[/math].
[math]\triangleleft[/math]


Теорема (Махэни):
[math]\mathrm{NPC} \cap \mathrm{SPARSE} \ne \varnothing \Rightarrow \mathrm{P}=\mathrm{NP}[/math].
Доказательство:
[math]\triangleright[/math]

Пусть [math]S \in \mathrm{NPC} \cap \mathrm{SPARSE}[/math].

Так как [math]S\in \mathrm{NPC}[/math], и [math]\mathrm{LSAT} \in \mathrm{NP}[/math], то существует полиномиальная функция сведения [math]f[/math] такая, что [math]\langle \phi, y \rangle \in \mathrm{LSAT} \Leftrightarrow f(\langle \phi, y \rangle) \in S[/math].

Так как функция [math]f[/math] работает полиномиальное время, и [math]|\phi|=|y|[/math] ([math]|y|[/math] — длина вектора [math]y[/math]), то [math]f(\langle\phi,y\rangle) \le q(|\phi|)[/math], где [math]q[/math] — полином. [math]S\in \mathrm{SPARSE}[/math]. Следовательно, [math]\forall n \; |S \cap \Sigma^n|\le p(n)[/math], где [math]p[/math] — некоторый полином.

Тогда [math]|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)[/math], где [math]r[/math] — также полином.

Опишем алгоритм для нахождения лексиграфически минимальной строки [math]x[/math], удовлетворяющей формулу [math]\phi[/math].

Пусть [math]n=|\phi|, r=r(|\phi|)[/math]. Изначально область поиска для [math]x[/math] — все строки длины [math]n[/math]. Опишем одну итерацию поиска.

Разобьём текущее множество строк на [math]r+1[/math] подотрезок примерно равной длины. Обозначим концы полученных подотрезков [math]w_0,...,w_{r+1}[/math]. Пусть теперь [math]z_i=f(\langle\phi,w_i\rangle)[/math].

Из леммы (2) мы знаем, что, начиная с некоторого [math]l[/math], все пары [math]\langle\phi, w_l\rangle \in \mathrm{LSAT}[/math]. Тогда по сведению [math]z_j \in S[/math] для всех [math]j\ge l[/math].

Рассмотрим два случая:

  1. [math]\exists i \ne j \, z_i=z_j[/math]. Строки [math]z_i[/math] и [math]z_j[/math] либо обе лежат в [math]S[/math], либо обе не лежат в [math]S[/math]. Тогда по вышеуказанной причине [math]x\notin (w_i, w_j][/math]. Значит мы можем исключить этот полуинтервал из рассматриваемого множества. Таким образом, мы удаляем не менее [math]\frac 1{r+1}[/math] часть множества подстановок.
  2. [math]z_i \ne z_j \, \forall i \ne j[/math]. Как было показано выше, если [math]z_0[/math] или [math]z_1[/math] лежат в [math]S[/math], то все последующие [math]z_i[/math] тоже лежат в [math]S[/math], но тогда [math]S[/math] содержит [math]r+1[/math] строку длины не более, чем [math]q(|\phi|)[/math], что противоречит условию [math]|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le r(|\phi|)[/math]. Следовательно, [math]x\notin[w_0,w_1][/math], то есть его можно убрать из рассмотрения.

В обоих случаях мы сузили область поиска как минимум на [math]\frac 1{r+1}[/math] её размера.

Будем повторять эту процедуру до тех пор, пока не останется не более [math]r+1[/math] строки, которые мы можем проверить за полиномиальное время. Если какая-то из них удовлетворила формулу [math]\phi[/math], то [math]x=min(w_i), w_i[/math] удовлетворяет [math]\phi[/math]. Иначе, [math]x[/math] не существует.

Оценим время работы нашего алгоритма. После [math]k[/math] итераций у нас останется не более [math]2^n(1-\frac1{r+1})^k[/math] строк. Оценим [math]k[/math].

[math]2^n(1-\frac1{r+1})^k \simeq 1[/math]. Отсюда [math]k=O(rn)[/math] (это можно получить, выразив [math]k[/math] через [math]n[/math] и [math]r[/math] и воспользовавшись формулой Тейлора для логарифма).

Таким образом, мы можем разрешить язык [math]\mathrm{LSAT}[/math] за полиномиальное время, найдя лексиграфически минимальную строку, удовлетворяющую формулу, и сравнив её с нашим аргументом. Так как [math]\mathrm{LSAT}\in \mathrm{NPC}[/math], то мы можем решить любую задачу из [math]\mathrm{NP}[/math] за полиномиальное время, а значит [math]\mathrm{P}=\mathrm{NP}[/math].
[math]\triangleleft[/math]

См. также