Редактирование: Теорема Махэни

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

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
Теорема Махэни, доказанная Стефаном Махэни в 1982 году, утверждает, что если хотя бы один [[#Sparse|редкий язык]] {{---}} [[Сведение_относительно_класса_функций._Сведение_по_Карпу._Трудные_и_полные_задачи#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F_.D1.82.D1.80.D1.83.D0.B4.D0.BD.D1.8B.D1.85_.D0.B8_.D0.BF.D0.BE.D0.BB.D0.BD.D1.8B.D1.85_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87 | <tex> \mathrm{NP} </tex>{{---}}полный ]], то <tex> \mathrm{P} = \mathrm{NP} </tex>
 
 
==Подготовка к доказательству==
 
 
Введём вспомогательный язык <tex>\mathrm{LSAT}</tex>.
 
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
<tex>\mathrm{LSAT} = \{\langle \varphi, y \rangle \mid \exists x: x \leqslant_{lex} y, \varphi(x) = 1\}</tex>, где <tex> \varphi </tex> {{---}} [[Определение_булевой_функции | булева формула]] из <tex>n</tex> переменных, <tex>x, y \in \{0,1\}^{n} </tex> и отношение <tex> \leqslant_{lex} </tex> задает [[Лексикографический порядок | лексикографический порядок]].
+
<tex>LSAT=\{\langle\phi,y\rangle | \exists x: x<_{lex}y, \phi(x) = 1\}</tex>.
 
}}
 
}}
  
 
{{Лемма
 
{{Лемма
|about=1
+
|statement=<tex>LSAT \in NPC</tex>.
|statement=<tex>\mathrm{LSAT} \in \mathrm{NPC}</tex>.
 
 
|proof=
 
|proof=
#Очевидно, что <tex>\mathrm{LSAT} \in \mathrm{NP}</tex> (в качестве [[Классы_NP,_coNP,_Σ₁,_Π₁#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F.2C_.D1.81.D0.B2.D1.8F.D0.B7.D1.8C_.CE.A3.E2.82.81_.D0.B8_NP|сертификата]] можно запросить <tex>x</tex>).
+
#Очевидно, что <tex>LSAT \in NP</tex>.
#[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи | Сведём]] <tex>\mathrm{SAT}</tex> к <tex>\mathrm{LSAT}</tex>. Для этого рассмотрим отображение <tex>\varphi \mapsto \langle \varphi, 1^{|\varphi|}\rangle</tex>, где <tex>|\varphi|</tex> — количество различных переменных в формуле <tex>\varphi</tex>. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное.  
+
#Сведём <tex>SAT</tex> к <tex>LSAT</tex>. Для этого рассмотрим отображение <tex>\phi \mapsto \langle \phi, 1^m\rangle</tex>, где <tex>m</tex> — количество различных аргументов в формуле <tex>\phi</tex>. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное.  
#*Если <tex>\varphi \in \mathrm{SAT}</tex>, то формула <tex>\varphi</tex> удовлетворима, а значит <tex>\exists x: x \leqslant_{lex} 1^{|\varphi|}, \varphi(x)=1</tex>. Такой <tex> x </tex> cуществует, потому что формула удовлетворима и любой вектор длины <tex> |\varphi| </tex> меньше либо равен единичному, значит мы переберем всевозможые вектора. Следовательно, <tex>\langle \varphi, 1^{|\varphi|}\rangle \in \mathrm{LSAT}</tex>.
+
#*Если <tex>\phi \in SAT</tex>, то формула <tex>\phi</tex> удовлетворима, а значит <tex>\exists x: x <_{lex} 1^m, \phi(x)=1</tex>. Следовательно, <tex>\langle \phi, 1^m\rangle \in LSAT</tex>.
#*Если <tex>\langle \varphi, 1^{|\varphi|}\rangle \in \mathrm{LSAT}</tex>, то <tex>\exists x: x \leqslant_{lex} 1^{|\varphi|}, \varphi(x)=1</tex>. Значит формула <tex>\varphi</tex> удовлетворима, и <tex>\varphi \in \mathrm{SAT}</tex>.
+
#*Если <tex>\langle \phi, 1^m\rangle \in LSAT</tex>, то <tex>\exists x: x <_{lex} 1^m, \phi(x)=1</tex>. Значит формула <tex>\phi</tex> удовлетворима, и <tex>\phi \in SAT</tex>.
:Таким образом, <tex>\mathrm{SAT} \leqslant \mathrm{LSAT}</tex>. Но [[Теорема Кука | по теореме Кука ]]<tex>\mathrm{SAT} \in \mathrm{NPC}</tex>, а значит для любого <tex>L \in \mathrm{NP} </tex> выполнено <tex> L \leqslant \mathrm{SAT}</tex>. Тогда в силу транзитивности <tex>\forall L \in \mathrm{NP} \; L \leqslant \mathrm{LSAT}</tex>, то есть <tex>\mathrm{LSAT} \in \mathrm{NPH}</tex>.
+
:Таким образом, <tex>SAT \le LSAT</tex>. Но <tex>SAT \in NPC</tex>, а значит <tex>\forall L \in NP \; L \le SAT</tex>. Тогда в силу транзитивности <tex>\forall L \in NP \; L \le LSAT</tex>, то есть <tex>LSAT \in NPH</tex>.
Итого, мы доказали, что <tex>\mathrm{LSAT} \in \mathrm{NPH}</tex> и <tex>\mathrm{LSAT} \in \mathrm{NP}</tex>. Тогда по определению <tex>\mathrm{LSAT} \in \mathrm{NPC}</tex>.
+
Итого мы доказали, что <tex>LSAT \in NPH</tex> и <tex>LSAT \in NP</tex>. Тогда по определению <tex>LSAT \in NPC</tex>.
 
}}
 
}}
  
 
{{Лемма
 
{{Лемма
|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\varphi,y\rangle \in \mathrm{LSAT}, y<_{lex}z</tex>. Тогда <tex>\langle\varphi,z\rangle \in \mathrm{LSAT}</tex>.
+
|proof=<tex>\langle\phi,y\rangle \in LSAT</tex>. Тогда <tex>\exists x: x<_{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\varphi,y\rangle \in \mathrm{LSAT}</tex>. Тогда <tex>\exists x: x\leqslant_{lex}y, \varphi(x) = 1</tex>. Так как <tex>y<_{lex}z</tex>, то <tex>\exists x: x<_{lex}z, \varphi(x) = 1</tex>, следовательно <tex>\langle\varphi,z\rangle \in \mathrm{LSAT}</tex>.
 
}}
 
 
 
==Редкие языки==
 
 
 
{{Определение
 
|id = Sparse
 
|definition=
 
<tex>\mathrm{SPARSE}=\{L \mid \exists</tex> полином <tex> p: \forall n \, |L \cap \Sigma^n| \leqslant p(n)\}</tex> {{---}} множество '''редких''' (англ. ''sparse'') языков.
 
 
}}
 
}}
То есть множество языков таких, что множество слов длины <tex> n </tex> из языка ограничено полиномом от <tex> n </tex>.
 
 
Это множество, называется множеством редких языков потому, что строк длины <tex> n </tex> всего <tex> 2^{n} </tex>, и если язык содержит только полином от этого числа, то при большом <tex> n </tex> эта часть стремится к нулю.
 
 
'''Пример:''' Согласно [[Машина_Тьюринга#.D0.9C.D0.BD.D0.BE.D0.B3.D0.BE.D0.BB.D0.B5.D0.BD.D1.82.D0.BE.D1.87.D0.BD.D0.B0.D1.8F_.D0.BC.D0.B0.D1.88.D0.B8.D0.BD.D0.B0_.D0.A2.D1.8C.D1.8E.D1.80.D0.B8.D0.BD.D0.B3.D0.B0 | тезису Чёрча {{---}} Тьюринга]], существует биекция между машинами Тьюринга и программами. Зафиксировав алфавит, можно занумеровать программы (программа будет иметь номер <tex>n</tex>, если ее код {{---}} <tex>n</tex>-е слово среди всех слов над алфавитом, отсортированных сначала по возрастанию длины, а при равной длине {{---}} в лексикографическом порядке), а следовательно и машины Тьюринга. Рассмотрим язык <tex> \{1^{n} \mid n</tex>{{---}}я [[Машина Тьюринга | машина Тьюринга]] останавливается в допускающем состоянии <tex> \} </tex>. Просто приняв <tex> p(n) = 1 </tex>, получим, что он принадлежит <tex> \mathrm{SPARSE}</tex>. Более того, любой унарный язык принадлежит <tex>\mathrm{SPARSE} </tex> .
 
  
==Теорема==
 
  
 
{{Теорема
 
{{Теорема
 
|author=Махэни
 
|author=Махэни
 
|statement=
 
|statement=
<tex>\mathrm{NPC} \cap \mathrm{SPARSE} \ne \varnothing \Rightarrow \mathrm{P}=\mathrm{NP}</tex>.
+
<tex>NPC \cap SPARSE \ne \varnothing \Rightarrow P=NP</tex>.
|proof=Пусть <tex>S \in \mathrm{NPC} \cap \mathrm{SPARSE}</tex>.
+
|proof=Пусть <tex>S \in NPC \cap SPARSE</tex>.
 
 
Так как <tex>S\in \mathrm{NPC}</tex> и <tex>\mathrm{LSAT} \in \mathrm{NPC}</tex>, то существует полиномиальная функция сведения <tex>f</tex> такая, что <tex>\langle \varphi, y \rangle \in \mathrm{LSAT} \Leftrightarrow f(\langle \varphi, y \rangle) \in S</tex>.
 
  
Так как функция <tex>f</tex> работает полиномиальное время, то <tex>f(\langle\varphi,y\rangle) \leqslant q(|\varphi|)</tex>, где <tex>q</tex> — полином.
+
Так как <tex>S\in NPC</tex>, и <tex>LSAT \in NP</tex>, то существует полиномиальная функция сведения <tex>f:LSAT \mapsto S</tex> такая, что <tex>\langle \phi, y \rangle \in NPC \iff f(\langle \phi, y \rangle) \in S</tex>.
<tex>S\in \mathrm{SPARSE}</tex>, следовательно <tex>\forall n \; |S \cap \Sigma^n|\leqslant p(n)</tex>, где <tex>p</tex> — некоторый полином.  
 
  
Тогда <tex>|\{x\in S \mid |x| \leqslant q(|\varphi|)\}| = \displaystyle\sum\limits_{i=1}^{q(|\varphi|)}|S \cap \Sigma^i| \leqslant \displaystyle\sum\limits_{i=1}^{q(|\varphi|)} p(i) = r(|\varphi|)</tex>, где <tex>r</tex> — также полином.
+
Так как функция <tex>f</tex> работает полиномиальное время, и <tex>|\phi|=|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>|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)</tex>, где <tex>r</tex> — также полином.
  
Опишем алгоритм для нахождения лексикографически минимальной строки <tex>x</tex>, удовлетворяющей формуле <tex>\varphi</tex>.
+
Опишем алгоритм для нахождения лексиграфически минимальной строки <tex>x</tex>, удовлетворяющей формулу <tex>\phi</tex>.
 
 
Пусть <tex>n=|\varphi|, r=r(|\varphi|)</tex>. Изначально область поиска для <tex>x</tex> — все строки длины <tex>n</tex>. Опишем одну итерацию поиска.
 
 
 
Разобьём текущее множество строк на <tex>r+1</tex> подотрезок примерно равной длины. Обозначим концы полученных подотрезков <tex>w_0, \ldots ,w_{r+1}</tex>. И <tex>w_0 < w_1 < \ldots < w_{r+1} </tex>. Пусть теперь <tex>z_i=f(\langle\varphi,w_i\rangle)</tex>.
 
 
 
Из леммы (2) мы знаем, что, начиная с некоторого <tex>l</tex>, все пары <tex>\langle\varphi, w_l\rangle \in \mathrm{LSAT}</tex>. Тогда по сведению <tex>z_j \in S</tex> для всех <tex>j\geqslant l</tex>.
 
 
 
Рассмотрим два случая:
 
 
 
# <tex>z_i=z_j</tex> для некоторого <tex> j > i </tex> . Строки <tex>z_i</tex> и <tex>z_j</tex> либо обе лежат в <tex>S</tex>, либо обе не лежат в <tex>S</tex>. Если <tex>z_i, z_j \in S</tex>, то по сведению <tex> \langle \varphi, w_i \rangle, \langle \varphi, w_j \rangle \in \mathrm{LSAT}</tex>, то есть получаем <tex> x \leqslant w_i < w_j </tex>. Тогда по вышеуказанной причине <tex>x\notin (w_i, w_j]</tex>. Значит мы можем исключить этот полуинтервал из рассматриваемого множества. Таким образом, мы удаляем не менее <tex>\dfrac 1{r+1}</tex> часть множества подстановок.
 
# <tex>z_i \ne z_j \, \forall i \ne j</tex>. Как было показано выше, если <tex>x \in [w_0, w_1]</tex>, то все <tex>z_i</tex>, начиная с <tex>z_1</tex>, лежат в <tex>S</tex>, но тогда <tex>S</tex> содержит <tex>r+1</tex> строку длины не более, чем <tex>q(|\varphi|)</tex>, что противоречит условию <tex>|\{x\in S \mid |x| \leqslant q(|\varphi|)\}| \leqslant r(|\varphi|)</tex>. Следовательно, <tex>x\notin[w_0,w_1]</tex>, то есть его можно убрать из рассмотрения.
 
 
 
В обоих случаях мы сузили область поиска как минимум на <tex>\dfrac 1{r+1}</tex> её размера.
 
 
 
Будем повторять эту процедуру до тех пор, пока не останется не более <tex>r+1</tex> строки, которые мы можем проверить за полиномиальное время. Если какая{{---}}то из них удовлетворила формуле <tex>\varphi</tex>, то <tex>x=\min(w_i), w_i</tex> удовлетворяет <tex>\varphi</tex>. Иначе, <tex>x</tex> не существует.
 
 
 
Оценим время работы нашего алгоритма. После <tex>k</tex> итераций у нас останется не более <tex>2^n\left(1-\dfrac1{r+1}\right)^k</tex> строк. Оценим <tex>k</tex>.
 
 
 
Нам нужно, чтобы <tex>2^n\left(1-\dfrac1{r+1}\right)^k \simeq 1</tex>. Отсюда <tex>k=O(rn)</tex> (это можно получить, выразив <tex>k</tex> через <tex>n</tex> и <tex>r</tex> и воспользовавшись [[Формула Тейлора для произвольной функции | формулой Тейлора]] для логарифма).
 
 
 
Таким образом, мы можем разрешить язык <tex>\mathrm{LSAT}</tex> за полиномиальное время, найдя лексикографически минимальную строку, удовлетворяющую формуле, и сравнив её с нашим аргументом. Так как <tex>\mathrm{LSAT}\in \mathrm{NPC}</tex>, то мы можем решить любую задачу из <tex>\mathrm{NP}</tex> за полиномиальное время, а значит <tex>\mathrm{P}=\mathrm{NP}</tex>.
 
  
 +
Пусть <tex>n=|\phi|</tex>.  Разобьём множество бинарных строк длины <tex>n</tex> на <tex>r+1</tex> подотрезок так, чтобы каждый подотрезок содержал не больше <tex>\frac{2^n}{r+1}</tex> строк. Обозначим концы полученных подотрезков <tex>w_0,...,w_{r+2}</tex>.
 
}}
 
}}
 
== См. также ==
 
*[[Класс P]]
 
*[[Классы NP и Σ₁]]
 
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]
 
*[[Теорема Бермана — Форчуна]]
 
 
== Источники информации ==
 
* [http://blog.computationalcomplexity.org/2011/09/mahaneys-theorem.html Блог Computational Complexity]
 
* [https://en.wikipedia.org/wiki/Sparse_language Wikipedia — Sparse language]
 
 
[[Категория: Теория сложности]]
 
[[Категория: Детерминированные и недетерминированные вычисления, сложность по времени и по памяти]]
 
[[Категория: Классы P и NP, NP{{---}}полнота]]
 

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)