Теорема Махэни — различия между версиями
м (rollbackEdits.php mass rollback) |
|||
(не показано 15 промежуточных версий 6 участников) | |||
Строка 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>. | Введём вспомогательный язык <tex>\mathrm{LSAT}</tex>. | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | <tex>\mathrm{LSAT}=\{\langle\ | + | <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> задает [[Лексикографический порядок | лексикографический порядок]]. |
}} | }} | ||
Строка 9: | Строка 13: | ||
|statement=<tex>\mathrm{LSAT} \in \mathrm{NPC}</tex>. | |statement=<tex>\mathrm{LSAT} \in \mathrm{NPC}</tex>. | ||
|proof= | |proof= | ||
− | #Очевидно, что <tex>\mathrm{LSAT} \in \mathrm{NP}</tex> (в качестве сертификата можно запросить <tex>x</tex>). | + | #Очевидно, что <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>\mathrm{SAT}</tex> к <tex>\mathrm{LSAT}</tex>. Для этого рассмотрим отображение <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>\ | + | #*Если <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>\langle \ | + | #*Если <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>\mathrm{SAT} \ | + | :Таким образом, <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>\mathrm{LSAT} \in \mathrm{NPH}</tex> и <tex>\mathrm{LSAT} \in \mathrm{NP}</tex>. Тогда по определению <tex>\mathrm{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\ | + | |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\ | + | |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> . | ||
+ | |||
+ | ==Теорема== | ||
{{Теорема | {{Теорема | ||
Строка 30: | Строка 48: | ||
|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>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</tex> работает полиномиальное время, то <tex>f(\langle\varphi,y\rangle) \leqslant q(|\varphi|)</tex>, где <tex>q</tex> — полином. |
− | <tex>S\in \mathrm{SPARSE}</tex>, следовательно <tex>\forall n \; |S \cap \Sigma^n|\ | + | <tex>S\in \mathrm{SPARSE}</tex>, следовательно <tex>\forall n \; |S \cap \Sigma^n|\leqslant p(n)</tex>, где <tex>p</tex> — некоторый полином. |
− | Тогда <tex>|\{x\in S \ | + | Тогда <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>x</tex>, удовлетворяющей формуле <tex>\ | + | Опишем алгоритм для нахождения лексикографически минимальной строки <tex>x</tex>, удовлетворяющей формуле <tex>\varphi</tex>. |
− | Пусть <tex>n=|\ | + | Пусть <tex>n=|\varphi|, r=r(|\varphi|)</tex>. Изначально область поиска для <tex>x</tex> — все строки длины <tex>n</tex>. Опишем одну итерацию поиска. |
− | Разобьём текущее множество строк на <tex>r+1</tex> подотрезок примерно равной длины. Обозначим концы полученных подотрезков <tex>w_0,. | + | Разобьём текущее множество строк на <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\ | + | Из леммы (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> | + | # <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(|\ | + | # <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>\ | + | В обоих случаях мы сузили область поиска как минимум на <tex>\dfrac 1{r+1}</tex> её размера. |
− | Будем повторять эту процедуру до тех пор, пока не останется не более <tex>r+1</tex> строки, которые мы можем проверить за полиномиальное время. Если какая-то из них удовлетворила формуле <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(1-\ | + | Оценим время работы нашего алгоритма. После <tex>k</tex> итераций у нас останется не более <tex>2^n\left(1-\dfrac1{r+1}\right)^k</tex> строк. Оценим <tex>k</tex>. |
− | <tex>2^n(1-\ | + | Нам нужно, чтобы <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>\mathrm{LSAT}</tex> за полиномиальное время, найдя лексикографически минимальную строку, удовлетворяющую формуле, и сравнив её с нашим аргументом. Так как <tex>\mathrm{LSAT}\in \mathrm{NPC}</tex>, то мы можем решить любую задачу из <tex>\mathrm{NP}</tex> за полиномиальное время, а значит <tex>\mathrm{P}=\mathrm{NP}</tex>. | ||
Строка 68: | Строка 86: | ||
*[[Теорема Бермана — Форчуна]] | *[[Теорема Бермана — Форчуна]] | ||
− | == | + | == Источники информации == |
* [http://blog.computationalcomplexity.org/2011/09/mahaneys-theorem.html Блог Computational Complexity] | * [http://blog.computationalcomplexity.org/2011/09/mahaneys-theorem.html Блог Computational Complexity] | ||
+ | * [https://en.wikipedia.org/wiki/Sparse_language Wikipedia — Sparse language] | ||
[[Категория: Теория сложности]] | [[Категория: Теория сложности]] | ||
+ | [[Категория: Детерминированные и недетерминированные вычисления, сложность по времени и по памяти]] | ||
+ | [[Категория: Классы P и NP, NP{{---}}полнота]] |
Текущая версия на 19:17, 4 сентября 2022
Теорема Махэни, доказанная Стефаном Махэни в 1982 году, утверждает, что если хотя бы один редкий язык — , то —полный
Содержание
Подготовка к доказательству
Введём вспомогательный язык
.Определение: |
булева формула из переменных, и отношение задает лексикографический порядок. | , где —
Лемма (1): |
. |
Доказательство: |
|
Лемма (2): |
. Тогда . |
Доказательство: |
. Тогда . Так как , то , следовательно . |
Редкие языки
Определение: |
полином — множество редких (англ. sparse) языков. |
То есть множество языков таких, что множество слов длины
из языка ограничено полиномом от .Это множество, называется множеством редких языков потому, что строк длины
всего , и если язык содержит только полином от этого числа, то при большом эта часть стремится к нулю.Пример: Согласно тезису Чёрча — Тьюринга, существует биекция между машинами Тьюринга и программами. Зафиксировав алфавит, можно занумеровать программы (программа будет иметь номер , если ее код — -е слово среди всех слов над алфавитом, отсортированных сначала по возрастанию длины, а при равной длине — в лексикографическом порядке), а следовательно и машины Тьюринга. Рассмотрим язык —я машина Тьюринга останавливается в допускающем состоянии . Просто приняв , получим, что он принадлежит . Более того, любой унарный язык принадлежит .
Теорема
Теорема (Махэни): |
. |
Доказательство: |
Пусть .Так как и , то существует полиномиальная функция сведения такая, что .Так как функция работает полиномиальное время, то , где — полином. , следовательно , где — некоторый полином.Тогда , где — также полином.Опишем алгоритм для нахождения лексикографически минимальной строки , удовлетворяющей формуле .Пусть . Изначально область поиска для — все строки длины . Опишем одну итерацию поиска.Разобьём текущее множество строк на подотрезок примерно равной длины. Обозначим концы полученных подотрезков . И . Пусть теперь .Из леммы (2) мы знаем, что, начиная с некоторого , все пары . Тогда по сведению для всех .Рассмотрим два случая:
В обоих случаях мы сузили область поиска как минимум на её размера.Будем повторять эту процедуру до тех пор, пока не останется не более строки, которые мы можем проверить за полиномиальное время. Если какая—то из них удовлетворила формуле , то удовлетворяет . Иначе, не существует.Оценим время работы нашего алгоритма. После итераций у нас останется не более строк. Оценим .Нам нужно, чтобы формулой Тейлора для логарифма). Таким образом, мы можем разрешить язык . Отсюда (это можно получить, выразив через и и воспользовавшись за полиномиальное время, найдя лексикографически минимальную строку, удовлетворяющую формуле, и сравнив её с нашим аргументом. Так как , то мы можем решить любую задачу из за полиномиальное время, а значит . |
См. также
- Класс P
- Классы NP и Σ₁
- Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи
- Теорема Бермана — Форчуна