Теорема Бермана — Форчуна — различия между версиями
AndrewD (обсуждение | вклад) |
AndrewD (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
|proof=Пусть <tex>L \in coNPC</tex>. Тогда <tex>L \in coNP</tex> и <tex>\overline L \in NP</tex>. | |proof=Пусть <tex>L \in coNPC</tex>. Тогда <tex>L \in coNP</tex> и <tex>\overline L \in NP</tex>. | ||
− | Рассмотрим произвольный язык <tex>L_1 \in NP</tex>. Тогда <tex>\overline {L_1} \in coNP</tex>. Так как <tex>L \in coNPC</tex>, то <tex>\overline {L_1} \ | + | Рассмотрим произвольный язык <tex>L_1 \in NP</tex>. Тогда <tex>\overline {L_1} \in coNP</tex>. Так как <tex>L \in coNPC</tex>, то <tex>\overline {L_1} \le L</tex>, следовательно <tex>L_1 \le \overline L</tex>. |
− | Получили, что <tex>\overline L \in NP</tex> и <tex>\forall L_1 \in NP \, L_1 \ | + | Получили, что <tex>\overline L \in NP</tex> и <tex>\forall L_1 \in NP \, L_1 \le \overline L</tex>. Значит <tex>\overline L \in NPC</tex>. |
В обратную сторону доказательство аналогично. | В обратную сторону доказательство аналогично. | ||
}} | }} | ||
Строка 42: | Строка 42: | ||
<tex>memo[\phi] \leftarrow check(\phi|_{x_i=0}, i+1)\, \&\&\, check(\phi|_{x_i=1}, i+1)</tex> | <tex>memo[\phi] \leftarrow check(\phi|_{x_i=0}, i+1)\, \&\&\, check(\phi|_{x_i=1}, i+1)</tex> | ||
'''return''' <tex>memo[\phi]</tex> | '''return''' <tex>memo[\phi]</tex> | ||
− | Ответом будет <tex>check(\phi, 1) | + | Ответом будет <tex>check(\phi, 1)</tex>. |
+ | Так как <tex>TAUT \in coNPC</tex> и <tex>S \in coNPC</tex>, то <tex>TAUT \le_f S</tex>, то есть <tex>\phi \in TAUT \Leftrightarrow f(\phi) \in S</tex>. Поэтому, если в предыдущей программе заменить все обращения к <tex>memo[\phi]</tex>, на <tex>memo[f(\phi)]</tex>, то полученная программа по прежнему будет разрешать <tex>TAUT</tex>. | ||
+ | |||
+ | Оценим необходимый размер <tex>memo</tex>. Можно считать, что <tex>T(f(\phi)) \le q(n)</tex>, где <tex>n = |\phi|</tex>, а <tex>q</tex> {{---}} монотонно возрастающий полином. Тогда <tex>|f(\phi)| \le q(n)</tex>. Так как <tex>S \in SPARSE</tex>, то <tex>|S \cap \Sigma^k| \le p(k)</tex>, где <tex>p</tex> {{---}} полином. Тогда размер <tex>memo</tex> можно оценить сверху: <tex>memo.size() \le \sum\limits_{i=0}^{q(n)}p(i) \le (1+q(n)) \cdot p(q(n)) \le r(n)</tex>, где <tex>r(n)</tex> {{---}} полином. | ||
<tex>check(\phi, i)</tex> | <tex>check(\phi, i)</tex> | ||
'''if''' <tex>memo[f(\phi)] \ne -1</tex> | '''if''' <tex>memo[f(\phi)] \ne -1</tex> | ||
Строка 56: | Строка 59: | ||
'''return''' <tex>memo[f(\phi)]</tex> | '''return''' <tex>memo[f(\phi)]</tex> | ||
− | + | Получили программу, разрешающую <tex>TAUT</tex> за полиномиальное время. Значит <tex>P=coNP</tex>, откуда <tex>P=NP</tex>. | |
}} | }} |
Версия 20:47, 13 апреля 2012
Лемма (1): |
Доказательство: |
Пусть . Тогда и .Рассмотрим произвольный язык . Тогда . Так как , то , следовательно .Получили, что В обратную сторону доказательство аналогично. и . Значит . |
Определение: |
. |
Лемма (2): |
Доказательство: |
, то есть . Тогда по лемме 1 . |
Определение: |
полином . |
Теорема (Махэни, light): |
Доказательство: |
Пусть существует . Разрешим за полином.Для начала напишем программу, разрешающую :if return if return 0 if return 1 return Ответом будет .Так как и , то , то есть . Поэтому, если в предыдущей программе заменить все обращения к , на , то полученная программа по прежнему будет разрешать .Оценим необходимый размер . Можно считать, что , где , а — монотонно возрастающий полином. Тогда . Так как , то , где — полином. Тогда размер можно оценить сверху: , где — полином.Получили программу, разрешающую if return if return 0 if return 1 if exit return за полиномиальное время. Значит , откуда . |