Теорема Ладнера — различия между версиями
Assaron (обсуждение | вклад) (→Доказательство: совсем почти закончено) |
Assaron (обсуждение | вклад) (→Иллюстрация: исправлено немного ошибок) |
||
Строка 7: | Строка 7: | ||
==Иллюстрация== | ==Иллюстрация== | ||
− | Определим язык <math>A</math> как множество таких формул <math>\alpha</math> | + | Определим язык <math>A</math> как множество таких формул <math>\alpha</math>, |
что <math>\left\lfloor \frac{1}{2}\log_{10}^*|\alpha|\right\rfloor</math> чётно. | что <math>\left\lfloor \frac{1}{2}\log_{10}^*|\alpha|\right\rfloor</math> чётно. | ||
Иными словами, <math>A</math> — это язык формул с длинами, лежащими в промежутках | Иными словами, <math>A</math> — это язык формул с длинами, лежащими в промежутках | ||
Строка 22: | Строка 22: | ||
Осталось показать, что <math>SAT \cap A</math> не является NP-полным. Пусть | Осталось показать, что <math>SAT \cap A</math> не является NP-полным. Пусть | ||
− | это не так. Тогда из NP-полноты следует, что существует полиномиальная функция <math>f</math> | + | это не так. Тогда из NP-полноты следует, что существует полиномиальная функция <math>f</math>, |
сводящая по Карпу <math>SAT</math> к <math>SAT \cap A</math>. | сводящая по Карпу <math>SAT</math> к <math>SAT \cap A</math>. | ||
− | + | Возьмём формулу <math>\varphi</math> длиной <math>^{2k+1}10</math>. | |
Она не лежит в <math>A</math> и, следовательно, в <math>SAT \cap A</math>. | Она не лежит в <math>A</math> и, следовательно, в <math>SAT \cap A</math>. | ||
Функция <math>f</math> не может перевести <math>\varphi</math> в промежуток | Функция <math>f</math> не может перевести <math>\varphi</math> в промежуток | ||
<math>\left[^{2k+2}10, ^{2k+4}10\right)</math> или дальше, так как размер | <math>\left[^{2k+2}10, ^{2k+4}10\right)</math> или дальше, так как размер | ||
− | выхода полиномиальной функции не может быть экспоненциально больше | + | выхода полиномиальной функции не может быть экспоненциально больше длины |
входа. Значит <math>\varphi</math> отображается в меньший промежуток, но | входа. Значит <math>\varphi</math> отображается в меньший промежуток, но | ||
в этом случае размер выхода экспоненциально меньше длины входа. Добавляя | в этом случае размер выхода экспоненциально меньше длины входа. Добавляя | ||
к этому то, что проверку на принадлежность <math>f(\varphi)</math> | к этому то, что проверку на принадлежность <math>f(\varphi)</math> | ||
<math>SAT \cap A</math> можно осуществить за <math>O(2^{poly})</math> | <math>SAT \cap A</math> можно осуществить за <math>O(2^{poly})</math> | ||
− | (это следует из принадлежности <math>NP</math>), получаем программу | + | (это следует из принадлежности <math>NP</math>), получаем программу, |
разрешающую <math>\varphi</math> за полином. Утверждение о том, что все формулы | разрешающую <math>\varphi</math> за полином. Утверждение о том, что все формулы | ||
<math>\varphi</math> длиной <math>^{2k+1}10</math> принадлежат классу | <math>\varphi</math> длиной <math>^{2k+1}10</math> принадлежат классу | ||
− | <math>P</math> скорее всего не верно, | + | <math>P</math> скорее всего не верно, и ,следовательно, язык |
<math>SAT \cap A</math> не является NP-полным. | <math>SAT \cap A</math> не является NP-полным. | ||
Версия 21:36, 8 марта 2010
Формулировка
Теорема Ладнера (Ladner's Theorem) утверждает, что если
, то существует язык , принадлежащий .Иллюстрация
Определим язык
как множество таких формул , что чётно. Иными словами, — это язык формул с длинами, лежащими в промежутках Далее будем обозначать как .Рассмотрим язык
. Логично предположить, что как в , так и в лежит бесконечное множество элементов из , не принадлежащих классу , поэтому . Из и следует, что .Осталось показать, что
не является NP-полным. Пусть это не так. Тогда из NP-полноты следует, что существует полиномиальная функция , сводящая по Карпу к .Возьмём формулу
длиной . Она не лежит в и, следовательно, в . Функция не может перевести в промежуток или дальше, так как размер выхода полиномиальной функции не может быть экспоненциально больше длины входа. Значит отображается в меньший промежуток, но в этом случае размер выхода экспоненциально меньше длины входа. Добавляя к этому то, что проверку на принадлежность можно осуществить за (это следует из принадлежности ), получаем программу, разрешающую за полином. Утверждение о том, что все формулы длиной принадлежат классу скорее всего не верно, и ,следовательно, язык не является NP-полным.Заметим, что это объяснение не является доказательством!
Доказательство
Будем искать язык
, удовлетворяющий следующим условиям:- (что влечёт за собой )
Если такой язык существует, то
искомым примером множества из .Утверждение 1. Можно перечислить (возможно с повторениями) все языки из
.Действительно, рассмотрим последовательность всех программ, упорядоченных по длине,
Обозначим за программу, запускающую с таймером . Тогда среди встречаются только программы из , и для каждой полиномиальной программы , работающей за полином , существует номер , такой что для всех натуральных и делает то же самое, что и . Таким образом распознает тот же язык, что и .Утверждение 2. Можно перечислить все функции из
.Аналогично предыдущему доказательству сначала построим последовательность
, а затем, добавив таймер , получим последовательность .Упорядочим все слова по возрастанию длины. Разобьем всё
на множества , так, что отличается от элементом из , и существует для которого выполняется условие и .
Если мы сможем построить такие , то язык
будет отличаться от любого полиномиального языка и ни какая полиномиальная функция не будет сводить
к .
Попытаемся построить такую полиномиальную функцию
, что . Тогда иЗададим
. Теперь рекурсивно определим . Для этого рассмотрим три случая:- .
.
- Если существует , такой что и , то , иначе .
.
- Если существует , такой что и , то , иначе .
.
Первый случай позволяет сказать, что
ограничена . Второй «ответственен» за множества для чётных , третий — для нечетных. Логарифм в условии необходим для полиномиальности .Покажем, что
. Для упрощения будем считать, что алфавит ., где:
- идёт на вычисление ;
- — перебор всех слов , таких что ;
- — запуск ;
- — запуск ;
- — запуск ;
- — запуск ;
- — построение программы ;
- — построение программы .
, таким образом
Чтобы построить программу
достаточно построить . Из того, что все упорядоченны по длине, следует, что длина не превосходит (константа зависит от языка описания программы). Поэтому для построения i-ой программы достаточно перебрать все слов с длиной меньше, чем , и вывести i-ое, являющееся программой. Такой способ требует времени. Аналогично можно построить и . Из этого следует, что и тоже полиномиальны.Получаем, что
. Значит . Поэтому и .Таким образом,
полиномиальна, а значит .Предположим, что
. Это значит, что фунция «застряла» в ветке «иначе» случая два, но из этого следует, что отличается от лишь на конечное число элементов. Это влечёт за собой принадлежность к , что противоречит предположению .Аналогично, в случае, если
. Тогда функция «застряла» в ветке «иначе» случая три. Следствием этого является то, что функцией сводится к конечному множеству, что тоже противоречит предположению .Получается, что
, но по построению, если неограниченно растет, то не совпадает ни с каким языком , и ни какая функция не сводит к . Следовательно, выполняются все три пункта, и является примером языка из .Теорема доказана.