Теорема Ладнера — различия между версиями
Assaron (обсуждение | вклад) м (→Иллюстрация) |
Assaron (обсуждение | вклад) (→Доказательство: раделение на пункты) |
||
| Строка 43: | Строка 43: | ||
==Доказательство== | ==Доказательство== | ||
| − | |||
Будем искать язык <math>A</math>, удовлетворяющий следующим условиям: | Будем искать язык <math>A</math>, удовлетворяющий следующим условиям: | ||
#<math>A \in P</math> (что влечёт за собой<math>SAT \cap A \in NP</math>); | #<math>A \in P</math> (что влечёт за собой<math>SAT \cap A \in NP</math>); | ||
| Строка 52: | Строка 51: | ||
из <math>NP \setminus (P \cup NPC)</math>. | из <math>NP \setminus (P \cup NPC)</math>. | ||
| − | + | ===Утверждение 1=== | |
| + | Можно перечислить (возможно, с повторениями) все языки из <math>P</math>. | ||
Действительно, рассмотрим последовательность всех программ, упорядоченных по длине: | Действительно, рассмотрим последовательность всех программ, упорядоченных по длине: | ||
| Строка 64: | Строка 64: | ||
Таким образом, <math>p_j</math> распознает тот же язык, что и <math>\tilde{p_i}</math>. | Таким образом, <math>p_j</math> распознает тот же язык, что и <math>\tilde{p_i}</math>. | ||
| − | + | ===Утверждение 2=== | |
| + | Можно перечислить все функции из <math>\tilde{P}</math>. | ||
Аналогично предыдущему доказательству, сначала построим последовательность <math>\tilde{f_i}</math>, | Аналогично предыдущему доказательству, сначала построим последовательность <math>\tilde{f_i}</math>, | ||
а затем, добавив таймер <math>in^i</math>, получим последовательность <math>f_i</math>. | а затем, добавив таймер <math>in^i</math>, получим последовательность <math>f_i</math>. | ||
| + | ===Описание способа построения <math>A</math>=== | ||
Упорядочим все слова по возрастанию длины. Разобьем всё <math>\Sigma^{*}</math> на множества | Упорядочим все слова по возрастанию длины. Разобьем всё <math>\Sigma^{*}</math> на множества | ||
<math>A_i</math>, <math>\forall i,j: i<j, \forall \alpha \in A_i, \beta \in A_j |\alpha| < |\beta|</math> | <math>A_i</math>, <math>\forall i,j: i<j, \forall \alpha \in A_i, \beta \in A_j |\alpha| < |\beta|</math> | ||
| Строка 87: | Строка 89: | ||
<math>L=SAT \cap A = \left\{\varphi \mid \varphi \in SAT \and f(|\varphi|)\, \vdots \, 2\right\}</math> | <math>L=SAT \cap A = \left\{\varphi \mid \varphi \in SAT \and f(|\varphi|)\, \vdots \, 2\right\}</math> | ||
| + | ===Построение <math>f</math>=== | ||
Зададим <math>f(0) = f(1) = 0</math>. Затем рекурсивно определим <math>f(n)</math>. Для этого рассмотрим три случая: | Зададим <math>f(0) = f(1) = 0</math>. Затем рекурсивно определим <math>f(n)</math>. Для этого рассмотрим три случая: | ||
| − | + | *<math>{\log_2 n} ^ {f(n-1)} \ge n</math>: | |
| − | + | *:<math>f(n) = f(n-1)</math>; | |
| − | + | *<math>f(n-1)=2i</math>: | |
| − | + | *:если существует <math>x</math> такой, что <math>|x| < \log_2 n</math> и <math>p_i(x) \ne L(x)</math>, то <math>f(n) = f(n-1)+1</math>, иначе <math>f(n) = f(n-1)</math>; | |
| − | + | *<math>f(n-1)=2i+1</math>: | |
| − | + | *:если существует <math>x</math> такой, что <math>|x| < \log_2 n</math> и <math>SAT(x) \ne L(f_i(x))</math>, то <math>f(n) = f(n-1)+1</math>, иначе <math>f(n) = f(n-1)</math>. | |
Первый случай позволяет сказать, что <math>f(n)</math> ограничена <math>O\left(\log_{\log_2 n} n\right) = O(\log_2 n)</math>. | Первый случай позволяет сказать, что <math>f(n)</math> ограничена <math>O\left(\log_{\log_2 n} n\right) = O(\log_2 n)</math>. | ||
| Строка 99: | Строка 102: | ||
Логарифм в условии <math>|x| < \log_2 n</math> необходим для полиномиальности <math>f(n)</math>. | Логарифм в условии <math>|x| < \log_2 n</math> необходим для полиномиальности <math>f(n)</math>. | ||
| + | |||
| + | ===Полиномиальность <math>f</math>=== | ||
Покажем, что <math>f \in \tilde{P}</math>. Для упрощения будем считать, что алфавит <math>\Sigma={0,1}</math>. | Покажем, что <math>f \in \tilde{P}</math>. Для упрощения будем считать, что алфавит <math>\Sigma={0,1}</math>. | ||
| Строка 133: | Строка 138: | ||
Таким образом, <math>f</math> полиномиальна и <math>A \in P</math>. | Таким образом, <math>f</math> полиномиальна и <math>A \in P</math>. | ||
| + | ===Доказательство выполнения свойств <math>A</math>=== | ||
Предположим, что <math>\lim_{n \to \infty}f(n) = 2i</math>. Это значит, что фунция «застряла» в ветке «иначе» случая два, | Предположим, что <math>\lim_{n \to \infty}f(n) = 2i</math>. Это значит, что фунция «застряла» в ветке «иначе» случая два, | ||
но из этого следует, что <math>SAT</math> отличается от <math>L(p_i)</math> лишь на конечное число элементов. Это | но из этого следует, что <math>SAT</math> отличается от <math>L(p_i)</math> лишь на конечное число элементов. Это | ||
| Строка 143: | Строка 149: | ||
Получается, что <math>\lim_{n \to \infty}f(n) = +\infty</math>, но по построению если <math>f</math> неограниченно растет, | Получается, что <math>\lim_{n \to \infty}f(n) = +\infty</math>, но по построению если <math>f</math> неограниченно растет, | ||
то <math>L</math> не совпадает ни с каким языком <math>L(p_i)</math> и ни одна функция <math>f_i</math> не сводит | то <math>L</math> не совпадает ни с каким языком <math>L(p_i)</math> и ни одна функция <math>f_i</math> не сводит | ||
| − | <math>SAT</math> к <math>L</math>. Следовательно, выполняются все три | + | <math>SAT</math> к <math>L</math>. Следовательно, выполняются все три требуемых свойста, и <math>L</math> является примером |
языка из <math>NP\setminus(P \cup NPC)</math>. | языка из <math>NP\setminus(P \cup NPC)</math>. | ||
Теорема доказана. | Теорема доказана. | ||
Версия 23:50, 10 марта 2010
Содержание
Формулировка
Теорема Ладнера (Ladner's Theorem) утверждает, что если , то существует язык , принадлежащий .
Иллюстрация
Определим язык как множество таких формул , что чётно. Иными словами, — это язык формул с длинами, лежащими в промежутках Далее будем обозначать как .
Рассмотрим язык . Логично предположить, что как в , так и в лежит бесконечное множество элементов из , не распознаваемых за полиномиальное время, поэтому . Из и следует, что .
Осталось показать, что не является NP-полным. Пусть это не так. Тогда из NP-полноты следует, что существует полиномиальная функция , сводящая по Карпу к .
Возьмём формулу длиной . Она не лежит в и, следовательно, в . Функция не может перевести в промежуток или дальше, так как размер выхода полиномиальной функции не может быть экспоненциально больше длины входа. Значит, отображается в меньший промежуток, но в этом случае размер выхода экспоненциально меньше длины входа. Добавляя к этому то, что проверку на принадлежность можно осуществить за (это следует из её принадлежности классу ), получаем программу, разрешающую за полином. Утверждение о том, что все формулы длиной принадлежат классу , скорее всего не верно, и, следовательно, язык не является NP-полным.
Заметим, что это объяснение не является доказательством!
Доказательство
Будем искать язык , удовлетворяющий следующим условиям:
- (что влечёт за собой);
- ;
- .
Если такой язык существует, то является искомым примером множества из .
Утверждение 1
Можно перечислить (возможно, с повторениями) все языки из .
Действительно, рассмотрим последовательность всех программ, упорядоченных по длине: Обозначим за программу, запускающую с таймером . Тогда среди встречаются только программы из , и для каждой полиномиальной программы , работающей за полином , существует номер такой, что для всех натуральных , и делает то же самое, что и . Таким образом, распознает тот же язык, что и .
Утверждение 2
Можно перечислить все функции из .
Аналогично предыдущему доказательству, сначала построим последовательность , а затем, добавив таймер , получим последовательность .
Описание способа построения
Упорядочим все слова по возрастанию длины. Разобьем всё на множества , так, что отличается от элементом из и для любого существует , для которого выполняются условия и .
Если мы сможем построить такие , то язык
будет отличаться от любого полиномиального языка, и ни одна полиномиальная функция не будет сводить
к .
Попытаемся построить такую полиномиальную функцию , что . Тогда и
Построение
Зададим . Затем рекурсивно определим . Для этого рассмотрим три случая:
- :
- ;
- :
- если существует такой, что и , то , иначе ;
- :
- если существует такой, что и , то , иначе .
Первый случай позволяет сказать, что ограничена . Второй «ответственен» за множества для чётных , третий — для нечетных. Логарифм в условии необходим для полиномиальности .
Полиномиальность
Покажем, что . Для упрощения будем считать, что алфавит .
, где:
- идёт на вычисление ;
- — время перебора всех слов , таких что ;
- — время работы ;
- — время работы ;
- — время работы ;
- — время работы ;
- — время, необходимое для построения программы ;
- — время, необходимое для построения функции .
, таким образом .
Чтобы построить программу достаточно построить . Из того, что все упорядочены по длине, следует, что длина не превосходит (константа зависит от языка описания программы). Поэтому для построения i-ой программы достаточно перебрать все слов с длиной не больше и вывести i-ое, являющееся программой. Такой способ требует времени. Аналогично можно построить и . Из этого следует, что и тоже полиномиальны.
Получаем, что . Значит, . Поэтому и .
Таким образом, полиномиальна и .
Доказательство выполнения свойств
Предположим, что . Это значит, что фунция «застряла» в ветке «иначе» случая два, но из этого следует, что отличается от лишь на конечное число элементов. Это влечёт за собой принадлежность к , что противоречит предположению .
Аналогично, в случае, если . Тогда функция «застряла» в ветке «иначе» случая три. Следствием этого является то, что функцией сводится к конечному множеству, что тоже противоречит предположению .
Получается, что , но по построению если неограниченно растет, то не совпадает ни с каким языком и ни одна функция не сводит к . Следовательно, выполняются все три требуемых свойста, и является примером языка из .
Теорема доказана.