Лемма о соотношении coNP и IP — различия между версиями
м |
м |
||
Строка 9: | Строка 9: | ||
{{Лемма | {{Лемма | ||
|about=1 | |about=1 | ||
− | |statement=<tex>\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1 A_\phi(x_1, \ldots, x_m)=k \ | + | |statement=<tex>\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1 A_\phi(x_1, \ldots, x_m)=k \Leftrightarrow \langle\phi,k\rangle \in \#SAT</tex>. |
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]]. | |proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]]. | ||
}} | }} | ||
Строка 89: | Строка 89: | ||
Сведём язык <tex>TAUT</tex> к языку <tex>\#SAT</tex> следующим образом: <tex>\phi \mapsto \langle \phi, 2^k \rangle </tex>, где <tex>k</tex> — количество различных переменных в формуле <tex>\phi</tex>. | Сведём язык <tex>TAUT</tex> к языку <tex>\#SAT</tex> следующим образом: <tex>\phi \mapsto \langle \phi, 2^k \rangle </tex>, где <tex>k</tex> — количество различных переменных в формуле <tex>\phi</tex>. | ||
− | Очевидно, что <tex>\phi \in TAUT \ | + | Очевидно, что <tex>\phi \in TAUT \Leftrightarrow \langle \phi, 2^k \rangle \in \#SAT</tex>. |
По лемме (2) <tex>\#SAT \in \mathrm{IP}</tex>. Тогда <tex>TAUT \in \mathrm{IP}</tex>. Так как <tex>TAUT \in \mathrm{coNPC}</tex>, то <tex>\mathrm{coNP} \subset \mathrm{IP}</tex>. | По лемме (2) <tex>\#SAT \in \mathrm{IP}</tex>. Тогда <tex>TAUT \in \mathrm{IP}</tex>. Так как <tex>TAUT \in \mathrm{coNPC}</tex>, то <tex>\mathrm{coNP} \subset \mathrm{IP}</tex>. |
Версия 01:03, 3 июня 2012
Определение: |
имеет ровно удовлетворяющих наборов . |
Лемма (1): |
. |
Доказательство: |
Следует из леммы (1). |
Лемма (2): |
. |
Доказательство: |
Для доказательства леммы построим программы Verifier и Prover из определения класса . Сперва арифметизуем формулу . Пусть полученный полином имеет степень .По лемме (1) вместо условия , можно проверять условие .Приступим к описанию Verifier'а. Шаг 0 Если постулата Бертрана). Проверим на простоту и на принадлежность заданному промежутку. Как мы знаем, , следовательно на эти операции у Verifier'а уйдёт полиномиальное от размера входа время. или , то Verifier может проверить указанное выше условие сам и вернуть соответствующий результат. Иначе запросим у Prover'а такое простое число , что (такое существует в силуДалее будем проводить все вычисления модулю .Попросим Prover 'а прислать Verifier 'у формулу . Заметим, что размер формулы будет полином от длины входа Verifier 'а, так как полином от одной переменной степени не выше, чем , а значит его можно представить в виде .Проверим следующее утверждение: (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, Verifier продолжает свою работу, иначе он прекращает свою работу и возвращет false).Шаг i Пусть . Отправим программе Prover.Попросим Prover 'а прислать Verifier 'у формулу .Проверим следующее утверждение: (*).Шаг m Пусть . Отправим программе Prover.Попросим программу Prover прислать Verifier 'у значение .Проверим следующее утверждение: (*). А также сами подставим в и проверим правильность присланного значения .Возвращаем true. Докажем теперь, что построенный таким образом Verifier — корректный. Для этого нужно доказать следующие утверждения:
|
Лемма (3): |
. |
Доказательство: |
Сведём язык к языку следующим образом: , где — количество различных переменных в формуле .Очевидно, что По лемме (2) . . Тогда . Так как , то . |