Лемма о соотношении coNP и IP — различия между версиями
м |
м |
||
Строка 4: | Строка 4: | ||
}} | }} | ||
− | Введём понятие арифметизации булевых формул. Пусть нам дана формула <tex>\phi(x_1 \ldots | + | Введём понятие арифметизации булевых формул. Пусть нам дана формула <tex>\phi(x_1 \ldots x_m)</tex>. Сделаем следующие преобразования и получим формулу <tex>A_\phi(x_1, x_2, \ldots, x_m)</tex>: |
# <tex> x_i \to x_i</tex>; | # <tex> x_i \to x_i</tex>; | ||
# <tex> \lnot x \to 1 - x</tex>; | # <tex> \lnot x \to 1 - x</tex>; | ||
Строка 13: | Строка 13: | ||
{{Лемма | {{Лемма | ||
|about=1 | |about=1 | ||
− | |statement=<tex>\phi(x_1 \ldots | + | |statement=<tex>\phi(x_1 \ldots x_m) = A_\phi(x_1, \ldots, x_m)</tex>. |
|proof= | |proof= | ||
}} | }} | ||
Строка 19: | Строка 19: | ||
{{Лемма | {{Лемма | ||
|about=2 | |about=2 | ||
− | |statement=<tex>\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{ | + | |statement=<tex>\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1 A_\phi(x_1, \ldots, x_m)=k \iff \langle\phi,k\rangle \in \#SAT</tex>. |
|proof=Следует из леммы (1). | |proof=Следует из леммы (1). | ||
}} | }} | ||
Строка 30: | Строка 30: | ||
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из определения класса <tex>\mathrm{IP}</tex>. | Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из определения класса <tex>\mathrm{IP}</tex>. | ||
− | Сперва арифметизуем формулу <tex>\phi</tex>. Пусть полученный полином <tex>A(x_1, x_2, ..., | + | Сперва арифметизуем формулу <tex>\phi</tex>. Пусть полученный полином <tex>A(x_1, x_2, ..., x_m)</tex> имеет степень <tex>d</tex>. |
+ | |||
+ | По лемме (2) вместо условия <tex>\langle \phi, k \rangle \in \#SAT</tex>, можно проверять условие <tex>\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1 A_\phi(x_1, \ldots, x_m)=k</tex>. | ||
+ | |||
+ | Приступим к описанию ''Verifier'''а. | ||
+ | |||
+ | Шаг 0 Запросим у ''Prover'''а такое простое число <tex>p</tex>, что <tex>max(2^m+1, k_p) \le p \le 2 \cdot max(2^m+1, k_p)</tex>. | ||
+ | Проверим простоту <tex>p</tex> и условие <tex>max(2^m+1, k_p) \le p \le 2 \cdot max(2^m+1, k_p)</tex> (константу <tex>k_p</tex> определим позднее). Как мы [[Класс P#Примеры задач и языков из P|знаем]], <tex>Primes \in \mathrm{P}</tex>, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время. | ||
+ | |||
+ | Далее будем проводить все вычисления модулю <tex>p</tex>. | ||
+ | |||
+ | Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу <tex>A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)</tex>. | ||
+ | Заметим, что размер формулы <tex>A_0(x_1)</tex> будет полином от длины входа ''Verifier'' 'а, так как <tex>A_0(x_1)</tex> полином от одной переменной степени не выше, чем <tex>d</tex>, а значит его можно представить в виде <tex>A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i</tex> . | ||
+ | Проверим следующее утверждение: <tex>A_0(0) + A_0(1) = k</tex> (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false'''). | ||
+ | |||
+ | Шаг 1 | ||
+ | |||
}} | }} | ||
+ | |||
{{Лемма | {{Лемма |
Версия 16:11, 1 июня 2012
Определение: |
имеет ровно удовлетворяющих наборов . |
Введём понятие арифметизации булевых формул. Пусть нам дана формула . Сделаем следующие преобразования и получим формулу :
- ;
- ;
- ;
- .
Заметим, что длина формулы при этом возрастёт не более, чем в константу раз.
Лемма (1): |
. |
Лемма (2): |
. |
Доказательство: |
Следует из леммы (1). |
Лемма (3): |
. |
Доказательство: |
Для доказательства леммы построим программы Verifier и Prover из определения класса .Сперва арифметизуем формулу . Пусть полученный полином имеет степень .По лемме (2) вместо условия , можно проверять условие .Приступим к описанию Verifier'а. Шаг 0 Запросим у Prover'а такое простое число знаем, , следовательно на эти операции у Verifier'а уйдёт полиномиальное от размера входа время. , что . Проверим простоту и условие (константу определим позднее). Как мыДалее будем проводить все вычисления модулю .Попросим Prover 'а прислать Verifier 'у формулу Шаг 1 . Заметим, что размер формулы будет полином от длины входа Verifier 'а, так как полином от одной переменной степени не выше, чем , а значит его можно представить в виде . Проверим следующее утверждение: (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, Verifier продолжает свою работу, иначе он прекращает свою работу и возвращет false). |
Лемма (4): |
. |
Доказательство: |
Сведём язык к языку следующим образом: , где — количество различных переменных в формуле .Очевидно, что По лемме (3) . . Тогда . Так как , то . |