Теорема о соотношении coNP и IP — различия между версиями
м |
|||
| Строка 39: | Строка 39: | ||
'''Шаг i''' | '''Шаг i''' | ||
| − | Пусть <tex>r_i = random \lbrace0, \ldots, p-1 \rbrace</tex>. Отправим <tex>r_i</tex> программе <tex>P</tex>. | + | Пусть <tex>r_i = \mathrm{random} \lbrace0, \ldots, p-1 \rbrace</tex>. Отправим <tex>r_i</tex> программе <tex>P</tex>. |
Попросим <tex>P</tex> прислать <tex>V</tex> формулу <tex>A_i(x_{i+1}) = \sum\limits_{x_{i+2} = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(r_1,\ldots, r_i, x_{i+1}, \ldots, x_m)</tex>. | Попросим <tex>P</tex> прислать <tex>V</tex> формулу <tex>A_i(x_{i+1}) = \sum\limits_{x_{i+2} = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(r_1,\ldots, r_i, x_{i+1}, \ldots, x_m)</tex>. | ||
| Строка 47: | Строка 47: | ||
'''Шаг m''' | '''Шаг m''' | ||
| − | Пусть <tex>r_m = random \lbrace0, \ldots, p-1 \rbrace</tex>. Отправим <tex>r_m</tex> программе <tex>P</tex>. | + | Пусть <tex>r_m = \mathrm{random} \lbrace0, \ldots, p-1 \rbrace</tex>. Отправим <tex>r_m</tex> программе <tex>P</tex>. |
Попросим программу <tex>P</tex> прислать <tex>V</tex> значение <tex>A_m()= A(r_1, r_2, \ldots, r_m)</tex>. | Попросим программу <tex>P</tex> прислать <tex>V</tex> значение <tex>A_m()= A(r_1, r_2, \ldots, r_m)</tex>. | ||
| Строка 63: | Строка 63: | ||
Докажем эти утверждения. | Докажем эти утверждения. | ||
| − | #Первый факт следует из построения <tex> | + | #Первый факт следует из построения <tex>V</tex>. |
| − | #По [[Арифметизация булевых формул с кванторами | лемме (2)]], если <tex>\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1 A_\varphi(x_1, \ldots, x_m)=k</tex>, то условия (*) | + | #По [[Арифметизация булевых формул с кванторами | лемме (2)]], если <tex>\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1 A_\varphi(x_1, \ldots, x_m)=k</tex>, то условия (*) выполняются, а значит, по построению протокола, существует такой <tex>P</tex>, что <tex>\mathbb{P}(V_{P}(\langle\varphi,k\rangle) = 1) = 1</tex>, для любой пары <tex>\langle\varphi,k\rangle \in \mathrm{\#SAT}</tex>. |
| − | #Пусть количество наборов, удовлетворяющих <tex>\varphi</tex>, не равно <tex>k</tex>. Для того, | + | #Пусть количество наборов, удовлетворяющих <tex>\varphi</tex>, не равно <tex>k</tex>. Для того, чтобы <tex>V</tex> вернул '''true''', <tex>P</tex> должен посылать такие <tex>A_i</tex>, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать: |
:'''Шаг 0''' | :'''Шаг 0''' | ||
:Так как количество наборов, удовлетворяющих <tex>\varphi</tex>, не равно <tex>k</tex>, то <tex>\mathit{Prover}</tex> не может послать правильное <tex>A_0</tex>, поскольку в этом случае не выполнится условие <tex>A_0(0) + A_0(1) = k</tex>. Поэтому он посылает не <tex>A_0</tex>, а некое <tex>\tilde{A}_0</tex>. | :Так как количество наборов, удовлетворяющих <tex>\varphi</tex>, не равно <tex>k</tex>, то <tex>\mathit{Prover}</tex> не может послать правильное <tex>A_0</tex>, поскольку в этом случае не выполнится условие <tex>A_0(0) + A_0(1) = k</tex>. Поэтому он посылает не <tex>A_0</tex>, а некое <tex>\tilde{A}_0</tex>. | ||
:<tex>\ldots</tex> | :<tex>\ldots</tex> | ||
:'''Шаг i''' | :'''Шаг i''' | ||
| − | :Заметим, что если на каком-то шаге <tex>A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)</tex>, то начиная со следующего шага <tex> | + | :Заметим, что если на каком-то шаге <tex>A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)</tex>, то начиная со следующего шага <tex>P</tex> может посылать правильные <tex>A_j</tex> и в итоге <tex>V</tex> вернёт '''true'''. |
| − | :Для некоторого случайно выбранного <tex>r_i</tex> вероятность того, что <tex>A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)</tex>, | + | :Для некоторого случайно выбранного <tex>r_i</tex> вероятность того, что <tex>A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)</tex>, не превосходит <tex>\dfrac{d}{p}</tex>, так как <tex>r_i</tex> — корень полинома <tex>(A_{i-1} - \tilde{A}_{i-1})(r_i)</tex>, имеющего степень не больше <tex>d</tex>, а, по основной теореме алгебры, полином имеет ровно <tex> d </tex> корней, и <tex> r_i \in \lbrace 0, \ldots, p -1 \rbrace</tex>. |
:<tex>\ldots</tex> | :<tex>\ldots</tex> | ||
:'''Шаг m''' | :'''Шаг m''' | ||
| − | :Так как на последнем шаге <tex> | + | :Так как на последнем шаге <tex>V</tex> сверяет полученное от <tex>P</tex> значение с непосредственно вычисленным, слово будет допущено только в том случае, когда <tex>P</tex> смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома. |
: | : | ||
:Вычислим вероятность того, что хотя бы раз корень был угадан. | :Вычислим вероятность того, что хотя бы раз корень был угадан. | ||
| − | :<tex>\ | + | :<tex>\mathbb{P}(V_{P}(\langle \varphi, k \rangle)=1) = 1 - \left( 1 - \dfrac{d}{p} \right)^m \leqslant 1 - \left(1 - \dfrac{d}{3dm}\right)^m = 1 - \left(1 - \dfrac{1}{3m}\right)^m </tex>. |
| − | : | + | :Заметим, что функция <tex> y(m) = 1 - \left( 1 - \dfrac{1}{3m} \right)^{m}</tex> убывает при <tex> m \geqslant \dfrac{1}{3} </tex>. А так как <tex> m \geqslant 1 </tex> и <tex> y(1) = \dfrac{1}{3} </tex>, в итоге получаем, что <tex>\mathbb{P}(V_{P}(\langle \varphi, k \rangle)=1) \leqslant \dfrac{1}{3} </tex>. |
| − | Таким образом, построенный нами | + | Таким образом, построенный нами интерактивный протокол корректен, а значит лемма доказана. |
}} | }} | ||
Версия 20:48, 2 мая 2016
| Определение: |
| имеет ровно удовлетворяющих наборов . |
| Лемма (1): |
. |
| Доказательство: |
| Следует из леммы (1). |
| Лемма (2): |
. |
| Доказательство: |
|
Для доказательства леммы построим программы () и () из определения класса . Сперва арифметизуем формулу . Пусть полученный полином имеет степень . По лемме (1) вместо условия , можно проверять условие . Приступим к описанию интерактивного протокола. Шаг 0 Если или , то может проверить указанное выше условие сам и вернуть соответствующий результат. Иначе запросим у такое простое число , что (такое существует в силу постулата Бертрана). Проверим на простоту и на принадлежность заданному промежутку. Как мы знаем, , следовательно на эти операции у уйдёт полиномиальное от размера входа время. Далее будем проводить все вычисления модулю , то есть над конечным полем , что не позволяет числам становиться слишком большими и упрощает анализ. Попросим прислать формулу . Заметим, что размер формулы будет полином от длины входа , так как — полином степени не выше, чем , от одной переменной, а значит его можно представить в виде . Проверим следующее утверждение: (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, продолжает свою работу, иначе он прекращает свою работу и возвращет false). Шаг i Пусть . Отправим программе . Попросим прислать формулу . Проверим следующее утверждение: (*). Шаг m Пусть . Отправим программе . Попросим программу прислать значение . Проверим следующее утверждение: (*). А также сами подставим в и проверим правильность присланного значения . Возвращаем true. Докажем теперь, что построенный таким образом интерактивны протокол — корректный. Для этого нужно доказать следующие утверждения:
Докажем эти утверждения.
|
| Теорема: |
. |
| Доказательство: |
|
Сведём язык к языку следующим образом: , где — количество различных переменных в формуле . Очевидно, что . По лемме (2) . Тогда . Так как , то . |