Теорема Бермана — Форчуна — различия между версиями
AndrewD (обсуждение | вклад) |
AndrewD (обсуждение | вклад) |
||
| Строка 30: | Строка 30: | ||
|about=light | |about=light | ||
|statement=<tex>coNPC \cap SPARSE = \varnothing \Rightarrow P = NP</tex> | |statement=<tex>coNPC \cap SPARSE = \varnothing \Rightarrow P = NP</tex> | ||
| − | |proof=Пусть существует <tex>S \in coNPC \cap SPARSE</tex>. | + | |proof=Пусть существует <tex>S \in coNPC \cap SPARSE</tex>. Разрешим <tex>TAUT</tex> за полином. |
| + | |||
| + | Для начала напишем программу, разрешающую <tex>TAUT</tex>: | ||
<tex>check(\phi, i)</tex> | <tex>check(\phi, i)</tex> | ||
| + | '''if''' <tex>memo[\phi] \ne -1</tex> | ||
| + | '''return''' <tex>memo[\phi]</tex> | ||
'''if''' <tex>\phi=0</tex> | '''if''' <tex>\phi=0</tex> | ||
'''return''' 0 | '''return''' 0 | ||
| Строка 37: | Строка 41: | ||
'''return''' 1 | '''return''' 1 | ||
<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>. Далее, так как <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>check(\phi, i)</tex> | <tex>check(\phi, i)</tex> | ||
Версия 20:14, 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 returnblablabla |